第一篇:C語言課程設(shè)計報告
C語言課程設(shè)計報告--學(xué)生成績管理系
C語言課程設(shè)計報告: 學(xué)生成績管理系統(tǒng) 系統(tǒng)需求
一、當(dāng)前學(xué)生信息:通過結(jié)構(gòu)體struct student 來保存學(xué)生的姓名,學(xué)號,性別,語文,數(shù)學(xué),英語和計算機等等相關(guān)信息,并且通過cin函數(shù)來進行給當(dāng)前學(xué)生輸入初始信息.二、學(xué)生成績查詢: 輸入一個學(xué)號, 在文件中查找此學(xué)生, 若找到則輸出此學(xué)生的全部信息和成績;若找不到則輸出查找失敗的信息.同時也可以全部把各科的平均成績,最高和最低分輸出。
三、新生插入 :通過給該生的學(xué)號來和原班上的學(xué)生的學(xué)號比較大小,若大就在后,若小則靠前排,將此生的信息保存下來。
四、輸出全部學(xué)生信息和全部學(xué)生成績。
五、退出系統(tǒng).六、附加說明:系統(tǒng)將來完善的功能有:可以通過性別來模糊查詢,也可以通過姓名的姓來先進行模糊查詢,以便后面精確查找。
總體設(shè)計
一、仔細閱讀系統(tǒng)要求,首先將此系統(tǒng)化分為如下模塊(即如下函數(shù))
1、輸入初始的學(xué)生信息:其中包括學(xué)生的姓名、學(xué)號和性別以及學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)信息;可用函數(shù)cin(stu *p1)來實現(xiàn)此操作。
2、查詢模塊:可用stu *lookdata(stu *p1)來實現(xiàn)。找到就輸出此學(xué)生全部信息包括學(xué)生的語文、數(shù)學(xué)、英語和計算機等的成績。
3、插入模塊:可用insert()函數(shù)來實現(xiàn)。其中通過學(xué)號的大小來比較的,并且以此來排序。
4、輸出學(xué)生的信息以及成績:通過學(xué)生的姓名來查看學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)成績,同時也可以分別通過caverage()、maverage()、eaverage()和comaverage()來輸出語文、數(shù)學(xué)、英語和計算機等成績的平均分?jǐn)?shù)、最高和最低分?jǐn)?shù)。
5、退出系統(tǒng):可用一個函數(shù)exit()來實現(xiàn),首先將信息保存到文件中,釋放動態(tài)創(chuàng)建的內(nèi)存空間,再退出此程序。
二、系統(tǒng)主模塊結(jié)構(gòu)圖:
詳細設(shè)計
一、界面設(shè)計
此系統(tǒng)界面采用圖形和數(shù)字化菜單設(shè)計。主界面設(shè)計如下:
學(xué)生成績管理系統(tǒng)
請選擇相應(yīng)的數(shù)字執(zhí)行相應(yīng)的功能: 1:是否輸入其他數(shù)據(jù) 2:查看數(shù)據(jù) 3:插入數(shù)據(jù) 4:查找數(shù)據(jù) 5:更新數(shù)據(jù) 6:保留數(shù)據(jù)
7:顯示或打印數(shù)據(jù) 8:語文成績狀況 9:數(shù)學(xué)成績狀況 10:英語成績狀況 11:計算機成績狀況 12:?
13:退出系統(tǒng)
二、數(shù)據(jù)結(jié)構(gòu)設(shè)計:
程序設(shè)計中用到的結(jié)構(gòu)體類型:
學(xué)生信息結(jié)構(gòu)體類型: typedef struct student{
char name[MAX];
int num[MAX];
char sex[MAX];
int chinese;
int mathematic;
int english;
int computer;
struct student *next;
}
程序代碼:
//原始密碼是123456 #include“stdio.h” #include“stddef.h” #include“stddef.h” #include“string.h” #define MAX 10 typedef struct student{
char name[MAX];
int num[MAX];
/*定義結(jié)構(gòu)體*/
/*姓名*/
/* 學(xué)號*/
char sex[MAX];
/*性別*/
int chinese;
/*語文*/
int mathematic;
/* 數(shù)學(xué)*/
int english;
/*英語*/
int computer;
/*計算機*/
struct student *next;
/*結(jié)構(gòu)體指針*/
}stu;stu *head;
/*頭指針*/ void print()
/*顯示或打印函數(shù)*/
{
system(“cls”);
printf(“tttScore Manage Systemn”);
printf(“<1>Enter Recordt”);
printf(“<2>Displayt”);
printf(“<3>Insertt”);
printf(“<4>Questt”);
printf(“<5>Updatet”);
printf(“<6>Savet”);
printf(“<7>Fresht”);
printf(“<8>Chinese Averaget”);
printf(“<9>Math Averaget”);
printf(“<10>English Averaget”);
printf(“<11>Computer Averaget”);
printf(“<12>Quittn”);
}
void cin(stu *p1)
{ printf(“Enter name:n”);
scanf(“%s”,&p1->name);
printf(“Enter num:n”);
scanf(“%d”,&p1->num);
printf(“Enter sex:n”);
scanf(“%s”,&p1->sex);
printf(“Enter score:n”);
printf(“Enter chinese:n”);
scanf(“%d”,&p1->chinese);
printf(“Enter math:n”);
scanf(“%d”,&p1->mathematic);
printf(“Enter English:n”);
scanf(“%d”,&p1->english);
printf(“Enter Computer:n”);
scanf(“%d”,&p1->computer);
} stu *cindata()
/*成績管理系統(tǒng)*/
/*輸入數(shù)據(jù)*/
/*顯示*/
/*插入數(shù)據(jù)*/
/*訪問數(shù)據(jù)*/
/*以前數(shù)據(jù)*/
/*保留數(shù)據(jù)*/
/*更新數(shù)據(jù)*/
/*語文平均成績*/
/*數(shù)學(xué)平均成績*/
/*英語平均成績*/
/*計算機平均成績*/
/*退出*/
/*輸入相關(guān)數(shù)據(jù)的函數(shù)*/ /*其他數(shù)據(jù)是否繼續(xù)輸入的函數(shù)*/
{ stu *p1,*p2;
int i=1;
char ch;
p1=(stu *)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf(“Do you Want to Continue?yes or no”);
/*是否繼續(xù)輸入數(shù)據(jù)*/
ch=getchar();
ch=getchar();
if(ch=='n'||ch=='N')
{ i=0;
p1->next=NULL;
}
else
{ p2=p1;
p1=(stu *)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);}
stu *lookdata(stu *p1)
/*查看數(shù)據(jù)的函數(shù)*/ {
while(p1!=NULL)
{ printf(“Num:%dt”,p1->num);
printf(“Name:%st”,p1->name);
printf(“Sex:%st”,p1->sex);
printf(“n”);
printf(“Chinese:%dt”,p1->chinese);
printf(“Math:%dt”,p1->mathematic);
printf(“English:%dt”,p1->english);
printf(“Computer:%dt”,p1->computer);
printf(“n”);
p1=p1->next;
}
return p1;
}
void insert()
/*通過比較學(xué)號來插入數(shù)據(jù)的函數(shù)*/ { stu *p1,*p3,*p2;
char ch;
p1=head;
p3=(stu *)malloc(sizeof(stu));
p3->next=NULL;
if(head==NULL){ head=p3;return;}
cin(p3);
while(p1!=NULL&&(p1->num
num))
/*通過學(xué)號的比較來插入*/
{ p2=p1;p1=p1->next;}
if(p2==head){p3->next=head;head=p3;return;}
p3->next=p1;
p2->next=p3;}
find(stu *p2)
/*通過姓名查找查看數(shù)據(jù)的函數(shù)*/ { char name[20];
int b=0;
printf(“Enter the name of the student you want to find:”);
/*通過姓名查看*/
scanf(“%s”,name);
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf(“The data you want has be foundn”);
printf(“ Name:%st”,p2->name);
printf(“Num:%dt”,p2->num);
printf(“sex%st”,p2->sex);
printf(“n”);
printf(“Chinese:%dt”,p2->chinese);
printf(“Math:%dt”,p2->mathematic);
printf(“English:%dt”,p2->english);
printf(“Computer:%dt”,p2->computer);
printf(“n”);
b=1;
}
else if(b==0)
printf(“sorry not find data!”);
p2=p2->next;
}
if(b==1)
{
print();
printf(“Find onen”);}
else
{print();
printf(“Not findn”);
} }
void caverage()
/*求各學(xué)生語文平均分、最高和最低分成績的函數(shù)*/ { stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!”);
else
{for(i=0;p1!=NULL;i++,p1=p1->next)sum+=p1->chinese;
aver=sum/i;
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max
chinese)
max=p1->chinese;
}
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf(“Chinese Average:%f”,aver);
printf(“Chinese Max:%f”,max);
printf(“Chinese Min:%f”,min);}
void maverage()
/*求各學(xué)生數(shù)學(xué)平均分、最高和最低分成績的函數(shù)*/ { stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!”);
else
{for(i=0;p1!=NULL;i++,p1=p1->next)sum+=p1->mathematic;
aver=sum/i;
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max
mathematic)
max=p1->mathematic;
}
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf(“Mathe Average:%f”,aver);
printf(“Mathe Max:%f”,max);
printf(“Mathe Min:%f”,min);}
void eaverage()
/*求各學(xué)生英語平均分、最高和最低分成績的函數(shù)*/ { stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!”);
else
{for(i=0;p1!=NULL;i++,p1=p1->next)sum+=p1->english;
aver=sum/i;
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max
english)
max=p1->english;
}
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf(“English Average:%f”,aver);
printf(“English Max:%f”,max);
printf(“English Min:%f”,min);}
void comaverage()
/*求各學(xué)生計算機平均分、最高和最低分成績的函數(shù)*/ { stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!”);
else
{for(i=0;p1!=NULL;i++,p1=p1->next)sum+=p1->computer;
aver=sum/i;
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max
computer)
max=p1->computer;
}
p1=head;for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf(“Computer Average:%f”,aver);
printf(“Computer Max:%f”,max);
printf(“Computer Min:%f”,min);}
update(stu *p2)
/*通過姓名查找來更新數(shù)據(jù)*/
{
char name[10];
/*p2為指向結(jié)構(gòu)體struct student的指針*/
int b=0;
printf(“Enter The Name”);
/*輸入姓名*/
scanf(“%s”,name);
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf(“Find you datan”);
scanf(“Name:%s”,p2->name);
scanf(“Num:%s”,p2->num);
scanf(“Sex:%s”,p2->sex);
scanf(“Chinese:%d”,p2->chinese);
scanf(“Math:%d”,p2->mathematic);
scanf(“english:%d”,p2->english);
scanf(“Computer:%d”,p2->computer);
printf(“Success!”);
b=1;}
else if(b==0)
printf(“Sorry not Find data!”);
p2=p2->next;}
if(b==0)
{print();
printf(“Sorry not Find data!”);
}
else
{
print();
printf(“Finish!”);
}
}
save(stu *p2)
/*保留數(shù)據(jù)函數(shù)*/
{
FILE *fp;
char file[10];
printf(“Enter file name”);
/*輸入文件名*/
scanf(“%s”,file);
fp=fopen(file,“w”);
while(p2!=NULL)
{
fprintf(fp,“%s”,p2->name);
fprintf(fp,“%s”,p2->num);
fprintf(fp,“%s”,p2->sex);
fprintf(fp,“%d”,p2->chinese);
fprintf(fp,“%d”,p2->mathematic);
fprintf(fp,“%d”,p2->english);
fprintf(fp,“%d”,p2->computer);
p2=p2->next;
}
fclose(fp);}
char password[7]=“123456”;
/*定義初始密碼*/
void main()
/*主函數(shù)*/ { int choice;
stu *p2;
char s[8];
int flag=0,i;
/*標(biāo)志項*/
int n=3;
do{ printf(“Enter password:n”);
scanf(“%s”,s);
if(!strcmp(s,password))
/*進行密碼匹配驗證*/
{ printf(“PASSnnn”);
flag=1;
break;
}
else{
printf(“Error Enter again:n”);
n--;
}
}
while(n>0);
if(!flag)
{printf(“you have Enter 3 times!”);
/*輸入密碼超過了3次!*/
exit(0);
/*自動退出*/
}
/*密碼驗證成功后進入的界面*/
printf(“~~~~~~~~~~ttt~~~~~~~~~~~~n”);
/*操作界面*/
printf(“ttWelcom to the Misn”);
printf(“Author:-----tClass:------tNum:------n”);
/*作者,班級和號碼*/
printf(“Adress:HGn”);
/*地址*/
printf(“%%%%%%%%%%%%%%%%%%%%%%%%%%%n”);
printf(“ttEnter OP:n”);
printf(“nnnn”);
printf(“==============tt==============n”);
printf(“==============tt==============n”);
printf(“ttEnter the MIS yes or non”);
/*問進入系統(tǒng)與否*/
scanf(“%d”,&choice);
if(choice=='n'||choice=='N')
exit(1);
print();
while(1)
{
printf(“Enter choice:”);
scanf(“%d”,&i);
if(i<1||i>13)
{
printf(“Enter num from 1 to 13:n”);
/*再從1-13中進行選擇*/
exit(1);
}
switch(i)
{
case 1:
p2=cindata();/*其他數(shù)據(jù)是否繼續(xù)輸入的函數(shù)*/
break;
case 2:
p2=lookdata(head);
/*查看數(shù)據(jù)的函數(shù)*/
break;
case 3:
insert();
/*通過比較學(xué)號來插入數(shù)據(jù)的函數(shù)*/
break;
case 4:
find(head);
/*通過姓名查找查看數(shù)據(jù)的函數(shù)*/
break;
case 5:
update(head);
/*通過姓名查找來更新數(shù)據(jù)*/
break;
case 6:
save(head);
/*保留數(shù)據(jù)函數(shù)*/
break;
case 7:
print();
/*顯示或打印函數(shù)*/
break;
case 8:
caverage();
/*求各學(xué)生語文平均分、最高和最低分成績的函數(shù)*/
break;
case 9:
maverage();
/*求各學(xué)生數(shù)學(xué)平均分、最高和最低分成績的函數(shù)*/
break;
case 10:
eaverage();/*求各學(xué)生英語平均分、最高和最低分成績的函數(shù)*/
break;
case 11:
comaverage();/*求各學(xué)生計算機平均分、最高和最低分成績的函數(shù)*/
break;
case 12:
;
/*空操作*/
case 13:
exit(1);
/*退出*/
break;}
scanf(“%d”,&i);} }
程序中出現(xiàn)的問題及解決方法
問題
一、學(xué)生初始信息模塊:
其中包括學(xué)生的姓名、學(xué)號和性別以及學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)信息;可用函數(shù)cin(stu *p1)來實現(xiàn)此操作。當(dāng)正確輸入存在的學(xué)生學(xué)號,系統(tǒng)進行判斷時,提示不存在此學(xué)生。
解決辦法及步驟:
1、一個個輸出所有的學(xué)生的學(xué)號,檢查文件中是否有此學(xué)生,發(fā)現(xiàn)有。
2、既然有此學(xué)生,那么檢查循環(huán)判斷是否有此學(xué)生的語句發(fā)現(xiàn)沒有錯
3、輸出用于循環(huán)檢查語句中的學(xué)生信息,發(fā)現(xiàn)亂碼
4、仔細分析亂碼的原因,最后發(fā)現(xiàn)是變量的類型錯誤,錯將學(xué)生類型的結(jié)構(gòu)體指針變量定義為了其他類型的指針變量。
問題
二、查詢模塊:
可用stu *lookdata(stu *p1)來實現(xiàn)。找到就輸出此學(xué)生全部信息包括學(xué)生的語文、數(shù)學(xué)、英語和計算機等的成績。當(dāng)正確輸入查找信息時,系統(tǒng)卻不能夠得到所要查找的學(xué)生信息以及學(xué)生的語文、數(shù)學(xué)、英語和計算機的成績。
解決辦法及步驟:
1、檢查所編寫的程序代碼是否完全正確,若不是,則改之,然后再繼續(xù)正確輸入查找信息看能否得到所要查找的學(xué)生信息以及學(xué)生的語文、數(shù)學(xué)、英語和計算機的成績。
2、檢查當(dāng)我們在輸入查找信息時,看是否我們輸入的信息有誤,若是這樣的話,我們應(yīng)當(dāng)仔細輸入查找信息。
問題
三、插入模塊:
可用insert()函數(shù)來實現(xiàn)。其中通過學(xué)號的大小來比較的,并且以此來排序。當(dāng)我們輸入插入信息時,系統(tǒng)卻提示插入不進數(shù)據(jù)。
解決辦法及步驟:
1、檢查所編寫的程序代碼是否完全正確,若不是,則改之,然后再繼續(xù)正確輸入插入信息看能否插入進去得到所要插入的學(xué)生信息以及學(xué)生的語文、數(shù)學(xué)、英語和計算機的成績。
2、檢查當(dāng)我們在輸入插入信息時,看是否我們輸入的插入信息有
第二篇:C語言課程設(shè)計報告
C語言課程設(shè)計報告
Experiment Designing reporter
課程名稱 : C語言課程設(shè)計
英文名稱 : C Program Experiment Designing
專 業(yè) :
學(xué) 號 :
姓 名 :
指導(dǎo)教師 :
日 期: 2011年7月18日 至2011年7月22日
《C語言課程設(shè)計》報告
C Program Experiment Designing
課程編號:01200308005
學(xué)時: 40學(xué)時 適用專業(yè):軟件工程專業(yè) 授課單位:軟件學(xué)院
一、C語言課程設(shè)計目的及要求
目的:
根據(jù)課堂講授內(nèi)容,學(xué)生做相應(yīng)的自主練習(xí),消化課堂所講解的內(nèi)容;通過調(diào)試典型例題或習(xí)題積累調(diào)試C程序的經(jīng)驗;通過完成輔導(dǎo)教材中的編程題,逐漸培養(yǎng)學(xué)生的編程能力、用計算機解決實際問題的能力。
要求:
1. 熟悉Turbo C 的編程環(huán)境、主要菜單功能。
2. 通過上機驗證運算符、表達式、運算規(guī)則、函數(shù)使用。3. 熟練使用C語言的典型語句編寫簡單程序。4. 調(diào)試典型例題或習(xí)題。5. 提高上機編程能力
二、實驗類型
設(shè)計類型
三、實驗學(xué)時
40學(xué)時
四、實驗設(shè)備
微型計算機、WINDOWS98以上版本的操作系統(tǒng)、Turbo C2.0 軟件一套
五、C語言課程參考教材:
1.李瑞 C語言程序基礎(chǔ)(第二版)清華大學(xué)出版社 2.梁旭 C語言課程設(shè)計.電子工業(yè)出版社
課程設(shè)計(報告)任務(wù)書
任務(wù)及要求:
1.設(shè)計(研究)內(nèi)容和要求
研究內(nèi)容:C語言課程設(shè)計題目相關(guān)內(nèi)容 任務(wù)和要求:
(1).學(xué)習(xí)C語言基礎(chǔ)知識,掌握C語言編程和程序調(diào)試的基本技能。(2).對指導(dǎo)教師下達的題目進行系統(tǒng)分析。(3).根據(jù)分析結(jié)果完成系統(tǒng)設(shè)計。
(4).編程:在計算機上實現(xiàn)題目的代碼實現(xiàn)。(5).完成對該系統(tǒng)的測試和調(diào)試。(6).提交課程設(shè)計報告。(7).指標(biāo): 要求完成課程設(shè)計報告3千字以上(約二、三十頁).完成若干綜合性程序設(shè)計題目,每個綜合設(shè)計題目的語句行數(shù)的和在300行語句以上.2.原始依據(jù)
了解C語言的基礎(chǔ)知識,有一定的語言編程基礎(chǔ),能夠熟練運用C語言進行程序設(shè)計。通過用C語言完成的題目,提高用C語言解決實際問題的能力。3.參考文獻
[1] 黃明等.C語言程序設(shè)計輔導(dǎo)教材.大連理工大學(xué)出版社,2006 [2] 馬靖善等.C語言程序設(shè)計.清華大學(xué)出版社,2005 [3] 譚浩強.C語言程序設(shè)計(第二版).北京:高等教育出版社,2002
目錄
C語言課程設(shè)計報告................................................................................錯誤!未定義書簽。
1. 輸出楊輝三角.............................................................................................................1 1.1 系統(tǒng)分析..............................................................................................................1 1.2 設(shè)計說明..............................................................................................................1 1.3 程序運行截圖......................................................................................................2 1.4 源程序代碼..........................................................................................................2 2 漢諾塔求解方法.............................................................................................................3 2.1 系統(tǒng)分析..............................................................................................................3 2.2 設(shè)計說明..............................................................................................................3 2.3 程序運行截圖......................................................................................................4 2.4 源程序代碼..........................................................................................................4 3 輸出200以內(nèi)的素數(shù).....................................................................................................5 3.1功能說明...............................................................................................................5 3.2 設(shè)計說明..............................................................................................................5 3.3 程序運行截圖......................................................................................................5 3.4 源程序代碼..........................................................................................................6 4 進制轉(zhuǎn)換計算器.............................................................................................................6 4.1功能說明...............................................................................................................6 4.2 設(shè)計說明..............................................................................................................6 4.3程序運行截圖.......................................................................................................7 4.4 源程序代碼..........................................................................................................7 5 一元稀疏多項式.............................................................................................................8 5.1 功能說明..............................................................................................................8 5.2 設(shè)計說明..............................................................................................................8 5.3 程序運行截圖....................................................................................................10 5.4 源程序代碼........................................................................................................11
1. 輸出楊輝三角
1.1 系統(tǒng)分析
以等腰直角三角形輸出楊輝三角
1.2 設(shè)計說明
1、包含頭文件
#include
#include
其中,頭文件
2、子函數(shù)
函數(shù)名:int num(i,j)
函數(shù)功能:以遞歸的方式進行計算,用函數(shù)代替二維數(shù)組
函數(shù)參數(shù):int i;int j;
含義:相當(dāng)于二維數(shù)組的a[i][j] 函數(shù)流程
Step1:輸出最外行,即三角形兩直角邊的結(jié)果都為 1 ;
Step2:討論其余情況,相當(dāng)于數(shù)組中的
a[i][j] = a[i-1][j-1] + a[i-1][j]。
3、main()函數(shù)
1為保證結(jié)果完整輸出,先進行清屏; ○2輸入要打印的行數(shù),由于一行只能顯示80個字符,建議不要超過13行; ○3用循環(huán)調(diào)用函數(shù)int num(int i , int j)○
其中循環(huán)為三重循環(huán):i 循環(huán)控制行打印
j 循環(huán)控制列打印
k 循環(huán)控制空格打印
每執(zhí)行一次i 循環(huán)輸出一個換行符,直角三角形定點放在第36個字符的位置上。
每個數(shù)字占6個字符的格。
1.3 程序運行截圖
1.4 源程序代碼
#include
int num(i,j){
int i,j;
if(I == j ||j == 0)return(1);
else return(num(i-1 , j-1)+num(i-1 , j));}
int main(void){
int n,k,i,j;
clrscr();
puts(“input row n:”);
scanf(“%d”,&n);
for(i = 0;i < n;i++)
{
{
for(k = 0;k < 36-3*i;k++)
putchar(' ');
}
{
for(j = 0;j <= i;j++)
printf(“%6d”,num(i , j));
}
puts(“");
}
getch();
return 0; } 漢諾塔求解方法
2.1 系統(tǒng)分析
漢諾塔求解方法
2.2 設(shè)計說明
1、包含頭文件:
#include
其中,#include
2、子函數(shù)
函數(shù)名:void move(int n , char a , char b)
函數(shù)功能:打印移動的主子編號
函數(shù)參數(shù):int n , char a , char b;
含義:n為移動的序數(shù),a為源柱號,b目的柱號 函數(shù)流程
Step1:輸出盤子移動情況;
Step2:打印換行。
函數(shù)名:void hanoi(int n,char a,char b,char c)
函數(shù)功能:以游戲規(guī)則求解移動盤子的方法
函數(shù)參數(shù):int n,char a,char b,char c;
含義:n移動的序數(shù),a為源柱號,b為目的柱號,c為中間柱號
函數(shù)流程
Step1:遞歸調(diào)用函數(shù) hanoi(n-1,a,c,b);
Step2:調(diào)用函數(shù)move(n-1,a,b);
Step3:繼續(xù)遞歸調(diào)用函數(shù)hanoi(n-1,c,b,a);
3、主函數(shù)main()1為了使程序可以重復(fù)運行,定義了變量ch,當(dāng)ch == N 時,退出游戲; ○2使用while()循環(huán)使游戲重復(fù)運行; ○3輸入盤子的數(shù)目以調(diào)整游戲的難度; ○3調(diào)用函數(shù)hanoi()○
2.3 程序運行截圖
2.4 源程序代碼
#include ”stdio.h“ #include ”ctype.h“
//應(yīng)用函數(shù)toupper void move(int n,char a,char b)
//n為移動的序數(shù),a為源柱號,b目的柱號*/ {
printf(”Disc%d move from %c to %c;“,(n+1),a,b);
printf(”n“);}
void hanoi(int n,char a,char b,char c){
//n移動的序數(shù),a為源柱號,b為目的柱號,c為中間柱號
if(n>0)
{
hanoi(n-1,a,c,b);
//遞歸調(diào)用
move(n-1,a,b);
hanoi(n-1,c,b,a);
} } main(){
int n;
char ch ='Y';
printf(”Now let us play the game of hanoitowern“);
while(ch == 'Y')
//通用性設(shè)計
{
printf(”n Input the number of disc[2-15]:“);
scanf(”%d“,&n);getchar();
printf(”n The orders of moving %d discs from A to B are:n“,n);
hanoi(n,'A','B','C');
//調(diào)用函數(shù)
printf(”n Continue(Y/N):“);
ch=getchar();
getchar();
ch=toupper(ch);}
return 0;} 3 輸出200以內(nèi)的素數(shù)
3.1功能說明
輸出200以內(nèi)的素數(shù)
3.2 設(shè)計說明
1、宏定義
#define M 200
//范圍,表示輸出200以內(nèi)的素數(shù) #define N((M+1)/2)
//奇數(shù)的個數(shù)
處理流程:
Step1:第一步篩選掉所有的偶數(shù),將剩余的奇數(shù)存放在a[N]中; Step2:第二部篩選掉多有可以被整除的數(shù) Step3:將得到的素數(shù)10個一行打印。
3.3 程序運行截圖
3.4 源程序代碼
#include ”stdio.h“ #define M 200
//范圍
#define N((M+1)/2)
//奇數(shù)的個數(shù) main(){
int i,j,a[N];
a[0]=2;
for(i=1;i //初始數(shù)組實現(xiàn)第一步篩選 a[i]=2*i+1; for(i=1;i<(N-1);i++) //第二步篩選 if(a[i]!=0) for(j=i+1;j if((a[j]%a[i]==0)) //倍數(shù)時置零篩去 a[j]=0; printf(”n The primer are[2-%d]:n“,M); for(i=0,j=0;i //顯示得到素數(shù) { if(a[i]!=0) { printf(”%5d“,a[i]); if((++j)%10==0) //十個數(shù)換行 printf(”n“); } } return 0;} 進制轉(zhuǎn)換計算器 4.1功能說明 進行進制轉(zhuǎn)換。 4.2 設(shè)計說明 1、處理流程: Step1:輸入原始數(shù)值xa,原始權(quán)a,已經(jīng)希望轉(zhuǎn)換的進制b;Step2:逐位取值,將原始數(shù)值轉(zhuǎn)換成10進制 Step3:逐位取值,將原始數(shù)值轉(zhuǎn)換成b 進制 4.3程序運行截圖 4.4 源程序代碼 void main()#include ”stdio.h“ main() { int a=0,/*原始進制*/ b=8,/*轉(zhuǎn)換進制,默認為八*/ k=1; /*位權(quán)*/ long xa=0,/*原始數(shù)值*/ xb=0,/*轉(zhuǎn)換數(shù)值*/ x1=0,x2=0; /*十進制數(shù)值*/ printf(”n Input the number and weight a->b:“); scanf(”%ld%d%d“,&xa,&a,&b); x1=xa; while(x1!=0) /*轉(zhuǎn)換為十進制數(shù)*/ { x2+=(x1%10)*k; /*逐位取值*/ x1/=10;k*=a; } k=1; x1=x2; while(x1!=0) /*轉(zhuǎn)換為b進制數(shù)*/ { xb+=(x1%b)*k;x1/=b;k*=10; } printf(”n %ld(%d)=%ld(%d)=%ld(%d)“,xa,a,x2,10,xb,b); return;} 一元稀疏多項式 5.1 功能說明 求一元稀疏多項式的運算: 1、求兩多項式加法; 2、求兩多項式減法; 3、求兩多項式乘法; 4、求兩多項式導(dǎo)數(shù); 5、求兩多項式在x=m處的值。 5.2 設(shè)計說明 1、鏈表結(jié)點的定義: typedef struct polyn { float coef; //多項式系數(shù) int expn; //多項式指數(shù) struct polyn * prior,* next;} polyn, *linkpolyn; 2、子函數(shù),多項式的基本運算。函數(shù)名:linkpolyn CREATEPOLYN()函數(shù)功能:創(chuàng)建多項式鏈表,在輸入的時候進行升序排列 返回值:return head,即建立的多項式頭結(jié)點 參數(shù):linkpolyn head,含義:鏈表頭結(jié)點 處理流程: Step1:輸入第一個結(jié)點,且第一個結(jié)點自然有序; Step2:循環(huán)輸入其余結(jié)點,當(dāng)輸入0 0是表示輸入結(jié)束; Step3:輸入過程中進行升冪排序,用二分法,找到新結(jié)點插入點; Step4:插入新結(jié)點;繼續(xù)循環(huán),直到輸入0 0,循環(huán)結(jié)束,鏈表建立成功。Step5:返回建立鏈表頭結(jié)點,函數(shù)結(jié)束。 函數(shù)名:linkpolyn DERIVATIONPOLYN(linkpolyn L)函數(shù)功能:多項式求導(dǎo) 返回值:return(head),即求導(dǎo)多項式的鏈表頭結(jié)點 參數(shù):linkpolyn L,含義:把建立好的鏈表A和B傳遞給L 處理流程: Step1:分別用指針指向L的頭結(jié)點和求導(dǎo)多項式的頭結(jié)點head; Step2:用循環(huán)逐個對L鏈表中的結(jié)點求導(dǎo),一次存放在求導(dǎo)多項式中的新結(jié)點中; Step3:循環(huán)中考慮,當(dāng)L鏈表中的結(jié)點僅存放一個常數(shù),則跳過該結(jié)點,繼續(xù)遍歷下一結(jié)點; Step4:當(dāng)循環(huán)結(jié)束,即L中的各項以被求導(dǎo),返回求導(dǎo)多項式頭結(jié)點head。 函數(shù)名:linkpolyn INITPOLYN()函數(shù)功能:鏈表初始化 返回值:return(head),即求導(dǎo)多項式生成的鏈表頭結(jié)點 參數(shù):無參數(shù) 處理流程: Step1:生成一個新的空間作為新結(jié)點; Step2:將新節(jié)點的coef域賦0,expn域賦-1,以區(qū)分其他節(jié)點; Step3:將頭結(jié)點的前去指針和后即指針置空,并返回頭結(jié)點。 函數(shù)名:void PRINTLIST(linkpolyn head)函數(shù)功能:以類數(shù)學(xué)表達式的形式打印 返回值:無返回值 參數(shù):linkpolyn head,含義:處理過的鏈表頭結(jié)點 處理流程: Step1:討論是否鏈表為空,若為空,則輸出0; Step2:若鏈表不為空,則輸出第一個值,第一個值不用輸出符號; Step3:用循環(huán)依次輸出其余各項,附加符號輸出; 函數(shù)名:linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B)函數(shù)功能:加法運算 返回值:return ptr,即和多項式的頭結(jié)點 參數(shù):linkpolyn A , linkpolyn B,含義:創(chuàng)建的鏈表A和B 處理流程: Step1:分別以兩個指針pa和pb遍歷鏈表A和B; Step2:當(dāng)A和B兩鏈表都為遍歷完畢時,進行加法運算,分配新的空間存放和多項式,并用二分法進行升冪排序; Step3:當(dāng)A遍歷完畢而B未遍歷完畢,將B其余各項拷貝到 和多項式鏈表中; Step4:當(dāng)B遍歷完畢而A未遍歷完畢,將A其余各項拷貝到 和多項式鏈表中; 函數(shù)名:linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B)函數(shù)功能:計算A-B的值 返回值:return ptr,即差多項式的頭結(jié)點 參數(shù):linkpolyn A , linkpolyn B,含義:創(chuàng)建的鏈表A和B 處理流程: Step1:分別以兩個指針pa和pb遍歷鏈表A和B; Step2:當(dāng)A和B兩鏈表都為遍歷完畢時,進行減法運算,分配新的空間存放和多項式,并用二分法進行升冪排序; Step3:當(dāng)A遍歷完畢而B未遍歷完畢,將B其余各項拷貝到 和多項式鏈表中; Step4:當(dāng)B遍歷完畢而A未遍歷完畢,將A其余各項拷貝到 差多項式鏈表中; Step5:返回多項式頭結(jié)點 函數(shù)名:float WORK(float x,int e)函數(shù)功能:求x的冪 返回值:return t,即計算冪結(jié)果 參數(shù):float x,int e,含義:x為輸入的x的值,e為x的指數(shù) 處理流程: Step1:分別討論正指數(shù)與負指數(shù)的的情況; Step2:若e>0,則累乘e次x; Step3:若e<0,則累除e次x;; Step4:將所求結(jié)果返回; 3、主函數(shù)main()Step1:依次調(diào)用函數(shù)進行運算操作; Step2:調(diào)用函數(shù)創(chuàng)建鏈表; Step3:調(diào)用函數(shù)進行運算; 5.3 程序運行截圖 5.4 源程序代碼 #include ”stdio.h“ #include typedef struct polyn { float coef;//多項式系數(shù) int expn;//多項式指數(shù) struct polyn * prior,* next;} polyn, *linkpolyn; void DESTROYPOLYN(linkpolyn head){ //銷毀鏈表 linkpolyn s,p;p=head; while(p->next!= NULL){ s = p; p = p->next; free(s);} } //DESTROYPOLYN linkpolyn INITPOLYN(){ //鏈表初始化 struct polyn * head;head=(linkpolyn)malloc(sizeof(polyn));head->coef=0.0;//假設(shè)頭結(jié)點系數(shù)為0 head->expn=-1;//假設(shè)頭結(jié)點指數(shù)為-1 head->next=NULL;head->prior=NULL;return head;} //INITPOLYN void INSERTPOLYN(linkpolyn p,linkpolyn s){ //將結(jié)點s插入到p之后 if(NULL!= p->next){ s->next = p->next; s->next->prior = s;} s->prior = p;p->next = s; } //INSERPOLYN linkpolyn CREATEPOLYN(){ //創(chuàng)建多項式鏈表,在輸入的時候進行升序排列 linkpolyn head,s,p,m,r; int num = 1;//計數(shù)器 head = INITPOLYN();//初始化鏈表 head r = head;//設(shè)置為指針 s=(linkpolyn)malloc(sizeof(polyn)); /******************************************/ printf(”請輸入第%d項系數(shù)和指數(shù):“,num);/**輸入第一個結(jié)點,并且第一個結(jié)點自然有序**/ scanf(”%f%d“,&s->coef,&s->expn);/******************************************/ r->next = s;s->prior = r;r = r->next;//r指向尾結(jié)點 r->next = NULL;p = r;//p為s的插入點前一個結(jié)點 m = r;//m為拍完結(jié)點中間的節(jié)點,二分法排序 while(++num)//while # 當(dāng)將 s->coef 與 s->expn 都賦值為0的時候,認為輸入結(jié)束 { s =(linkpolyn)malloc(sizeof(polyn));printf(”請輸入第%d項系數(shù)和指數(shù):“,num);scanf(”%f%d“,&s->coef,&s->expn); if((fabs(s->coef)<= FZ)&&(s->expn == 0))//if @ { free(s); break; } //else @ else //else @ { if(s->expn <= p->expn)//if # { while(p->prior!= NULL && p->expn > s->expn) p = p->prior;//p向前遍歷鏈表,找到插入點 if(s->expn == p->expn) { p->coef += s->coef; free(s); r=r; } else { INSERTPOLYN(p,s);//在p后面插入結(jié)點s m = m->prior; p = m; } } // if # else //else # { while(p->next!= NULL && p->next->expn < s->expn) p = p->next;//p向后遍歷鏈表,找到插入點 if(s->expn == p->expn) { p->coef += s->coef; free(s); } else { INSERTPOLYN(p,s); if(s->expn > r->expn) { r = r->next; r->next = NULL; } } } //else # } //else @ } //while # return head;} //CREATEPOLYN void PRINTPOLYN(linkpolyn head){ //以類數(shù)學(xué)表達式的形式打印 linkpolyn p; p = head->next;if(p == NULL)//鏈表為空 puts(”0“);else //else @ { //鏈表不為空,輸出第一個結(jié)點的值 if(p->expn == 0)printf(”%f“,p->coef);//指數(shù)為0時不輸出x else { if(p->coef==1)printf(”x^%d“,p->expn);/**************************/ else if(p->coef ==-1)printf(”-x^%d“,p->expn);/**第一項前不需要輸出符號**/ else printf(”%gx^%d“,p->coef,p->expn);/**************************/ } p = p->next;while(p!= NULL) { //依次輸出以后各節(jié)點 if(p->coef>0) { //當(dāng)系數(shù)為正時,討論輸出符號問題 if(p->expn == 0)printf(”+%g“,p->coef);else if(p->coef == 1)printf(”+x^%d“,p->expn);else printf(”+%gx^%d“,p->coef,p->expn); } else { //當(dāng)系數(shù)為負時,討論輸出符號問題 if(p->expn == 0)printf(”%g“,p->coef);else if(p->coef ==-1)printf(”-x^%d“,p->expn);else printf(”%gx^%d“,p->coef,p->expn); } p = p->next; } } //else @ } //PRINTPOLYN linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B){ //加法 linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多項式頭結(jié)點初始化 ptr = q;//ptr指向和多項式頭結(jié)點 while((qa!= NULL)&&(qb!= NULL)){ //升冪求和 if(qa->expn == qb->expn)//指數(shù)相同的項 { x = qa->coef + qb->coef;//系數(shù)相加 if(x!= 0)//求得系數(shù)非0 { q->next =(linkpolyn)malloc(sizeof(polyn));// q = q->next; q->coef = x; q->expn = qa->expn; } 生成和多項式的節(jié)結(jié)點 qa = qa->next; qb = qb->next; } else //指數(shù)不同 { q->next =(linkpolyn)malloc(sizeof(polyn)); q = q->next; if(qa->expn > qb->expn)//A多項式當(dāng)前指數(shù)大于B { q->coef = qb->coef;//B多項式當(dāng)前的值復(fù)制到和多項式中 q->expn = qb->expn; qb = qb->next; } else //B多項式當(dāng)前指數(shù)大于A { q->coef = qa->coef;//A多項式當(dāng)前的值復(fù)制到和多項式中 q->expn = qa->expn; qa = qa->next; } } } //A或B中有一個多項式已經(jīng)處理完畢 while(qa!= NULL)//A未處理完畢,將其余各項復(fù)制到和多項式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef = qa->coef; q->expn = qa->expn; qa = qa->next;} while(qb!= NULL)//B未處理完畢,將其余各項復(fù)制到和多項式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef = qb->coef; q->expn = qb->expn; qb = qb->next;} q->next = NULL;//令和多項式最末的節(jié)點指向頭結(jié)點 return ptr;//返回多項式頭指針 } //LINKPOLYN linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B){ //減法 linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多項式頭結(jié)點初始化 ptr = q;//ptr指向和多項式頭結(jié)點 while((qa!= NULL)&&(qb!= NULL)){ //升冪求差 if(qa->expn == qb->expn)//指數(shù)相同的項 { x = qa->coef-qb->coef;//多項式A的系數(shù)減去B的系數(shù) if(x!= 0)//求得系數(shù)非0 { q->next =(linkpolyn)malloc(sizeof(polyn));//生成和多項式的節(jié)結(jié)點 q = q->next; q->coef = x; q->expn = qa->expn; } qa = qa->next; qb = qb->next; } else //指數(shù)不同 { q->next =(linkpolyn)malloc(sizeof(polyn)); q=q->next; if(qa->expn > qb->expn)//A多項式當(dāng)前指數(shù)大于B { q->coef =-(qb->coef);//B多項式當(dāng)前的值復(fù)制到和多項式中 q->expn = qb->expn; qb = qb->next; } else //B多項式當(dāng)前指數(shù)大于A { q->coef = qa->coef;//A多項式當(dāng)前的值復(fù)制到和多項式中 q->expn = qa->expn; qa = qa->next; } } } //A或B中有一個多項式已經(jīng)處理完畢 while(qa!= NULL)//A未處理完畢,將其余各項復(fù)制到和多項式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef = qa->coef; q->expn = qa->expn; qa = qa->next;} while(qb!= NULL)//B未處理完畢,將其余各項復(fù)制到和多項式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef =-(qb->coef); q->expn = qb->expn; qb = qb->next;} q->next = NULL;//令和多項式最末的節(jié)點指向頭結(jié)點 return ptr;//返回多項式頭指針 } //SUBTRACTPOLYN linkpolyn MULTIPLYPOLYN(linkpolyn A,linkpolyn B){ //乘法 linkpolyn pa,pb,s,head,m,r,p;pa = A->next;pb = B->next;head = INITPOLYN();r = head; s=(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef;//計算第一個結(jié)點,并且第一個結(jié)點自然有序 s->expn = pa->expn + pb->expn;r->next = s;s->prior = r;r =r->next;r->next = NULL;p=r;//p為插入點前一結(jié)點 m=r;//m指向排完結(jié)點中間節(jié)點 pb=pb->next;// 第一個乘積處理完畢 for(pa= A->next;pa!= NULL;pa=pa->next)//for pa 處理其余乘積 { //用A的第一個結(jié)點分別與B的其余結(jié)點相乘 if(pa == A->next) pb = B->next->next; else pb = B->next; for(;pb!= NULL;pb = pb->next)//for pb { s =(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef; s->expn = pa->expn + pb->expn;if(s->expn <= p->expn)//if # { while(p->prior!=NULL && p->expn > s->expn)p=p->prior;//p向前遍歷鏈表,找到插入點 if(s->expn==p->expn) { p->coef+=s->coef; free(s); } else { INSERTPOLYN(p,s);//在p后面插入結(jié)點s m=m->prior; p=m; } } // if # else //else # { while(p->next!=NULL && p->next->expn < s->expn) p=p->next;//p向前遍歷鏈表,找到插入點 if(s->expn==p->expn) { p->coef+=s->coef; free(s); } else { INSERTPOLYN(p,s); if(s->expn > r->expn) { r=r->next; r->next=NULL; } } } //else # } //for pb } //for pa return head;} //MULTIPLYPOLYN linkpolyn DERIVATIONPOLYN(linkpolyn L){ //多項式求導(dǎo) linkpolyn head,p,s,r;head = INITPOLYN();//head為求導(dǎo)多項式頭結(jié)點 r = head;p = L->next;while(p!= NULL){ if(p->expn == 0) { p = p->next;continue;} s =(linkpolyn)malloc(sizeof(polyn));s->coef = p->coef * p->expn;s->expn = p->expn-1;s->prior = r; r->next = s; r = r->next; r->next = NULL; p = p->next;} return(head);} //DERIVATIONPOLYN float WORK(float x,int e){ //求x的冪 float t = 1;if(e>0){ while(e) { t *= x;e--;} } if(e<0){ while(e) { t *= 1/x;e++;} } return(t);} //WORK float CALCULATEPOLYN(linkpolyn head,float x){ //計算多項式在x處的值 float t = 0;linkpolyn p;p = head->next;while(p){ t = t +((p->coef)*(WORK(x,p->expn)));p = p->next;} return(t);} //CALCULATEPOLYN int main(void){ linkpolyn A, B,addp,decp,mulp,derp1,derp2;int i;float x;start: system(”cls“);printf(”一元稀疏多項式計算nn“);printf(”1.建立多項式n“);printf(”2.多項式加法n“);printf(”3.多項式減法n“);printf(”4.多項式乘法n“);printf(”5.計算多項式在x處的值n“);printf(”6.對多項式求導(dǎo)n“);printf(”7.清空數(shù)據(jù)n“);printf(”8.關(guān)閉計算器n“);printf(”請輸入選項(1~7):“);scanf(”%d“,&i);switch(i){ case(1): system(”cls“);printf(”建立多項式nn“);printf(”建立多項式A,當(dāng)輸入0 0 時表示出入完畢n“);A = CREATEPOLYN();printf(”建立多項式成功n“);printf(”建立多項式B,當(dāng)輸入0 0 時表示出入完畢n“);B = CREATEPOLYN();printf(”建立多項式成功n“);printf(”多項式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項式B:“);PRINTPOLYN(B); printf(”nn輸入回車返回上一級“);getchar();getchar();goto start;case(2): system(”cls“);printf(”多項式加法nn“);printf(”多項式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項式B:“);PRINTPOLYN(B);printf(”n“);addp = ADDPOLYN(A,B);printf(”多項式A+B:“);PRINTPOLYN(addp);printf(”n“);printf(”nn輸入回車返回上一級“);getchar();getchar();goto start;case(3): system(”cls“);printf(”多項式減法nn“);printf(”多項式B:“);PRINTPOLYN(A);printf(”n“);printf(”多項式B:“);PRINTPOLYN(B);printf(”n“);decp = SUBTRACTPOLYN(A,B);printf(”多項式A-B:“);PRINTPOLYN(decp);printf(”n“);printf(”nn輸入回車返回上一級“);getchar();getchar();goto start;case(4): system(”cls“);printf(”多項式乘法nn“);printf(”多項式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項式B:“);PRINTPOLYN(B);printf(”n“);mulp = MULTIPLYPOLYN(A,B);printf(”多項式AB:“);PRINTPOLYN(mulp);printf(”n“);printf(”nn輸入回車返回上一級“); getchar();getchar();goto start;case(5): system(”cls“);printf(”計算多項式在x處的值n“);printf(”請輸入x的值:“);scanf(”%f“,&x);printf(”n多項式A:“);PRINTPOLYN(A);printf(”n值為:%f“,CALCULATEPOLYN(A,x));printf(”n“);printf(”多項式B:“);PRINTPOLYN(B);printf(”n值為:%f“,CALCULATEPOLYN(B,x));printf(”nn輸入回車返回上一級“);getchar();getchar();goto start;case(6): system(”cls“);printf(”多項式求導(dǎo)n“);printf(”多項式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項式B:“);PRINTPOLYN(B);printf(”n“);derp1 = DERIVATIONPOLYN(A);printf(”求導(dǎo)后A':“);PRINTPOLYN(derp1);printf(”n“);derp2 = DERIVATIONPOLYN(B);puts(”求導(dǎo)后B':“);PRINTPOLYN(derp2);printf(”nn輸入回車返回上一級“);getchar();getchar();goto start;case(7): system(”cls“);DESTROYPOLYN(A);DESTROYPOLYN(B);DESTROYPOLYN(addp);DESTROYPOLYN(decp);DESTROYPOLYN(mulp);DESTROYPOLYN(derp1);DESTROYPOLYN(derp2);printf(”已清空所有數(shù)據(jù)n“);printf(”nn輸入回車返回上一級“);getchar();getchar(); goto start;case(8): printf(”退出");} return(0);} 目錄 1前言..............................................................1 2正文..............................................................1 2.1設(shè)計目的........................................................1 2.2設(shè)計意義........................................................1 2.3設(shè)計方案與內(nèi)容..................................................2 2.3.1設(shè)計內(nèi)容......................................................2 2.3.2程序調(diào)試......................................................4 3致謝..............................................................7 4參考文獻..........................................................7 5附錄..............................................................8 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 前言 17世紀(jì)初,西方國家的計算工具有了較大的發(fā)展,英國數(shù)學(xué)家納皮爾發(fā)明的“納皮爾算籌”,英國牧師奧卻德發(fā)明了圓柱型對數(shù)計算尺,這種計算尺不僅能做加減乘除、乘方、開方運算,甚至可以計算三角函數(shù),指數(shù)函數(shù)和對數(shù)函數(shù),這些計算工具不僅帶動了計算器的發(fā)展,也為現(xiàn)代計算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會應(yīng)用廣泛的計算工具. 1642年,年僅19歲的法國偉大科學(xué)家帕斯卡引用算盤的原理,發(fā)明了 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 其自身的優(yōu)勢,仍然是一種重要的語言,而且它還是通往c++的必由之路。它是融合了控制特性的的現(xiàn)代語言,其設(shè)計使得用戶可以自然的采用自頂向下的規(guī)劃、結(jié)構(gòu)化的編程,以及模塊化的設(shè)計。這種做法使得編寫出的程序更可靠、更易懂。它是一種高級語言,在設(shè)計上它充分利用了當(dāng)前計算機在能力上的優(yōu)點。C程序往往很緊湊且運行速度快,其還表現(xiàn)出通常只有匯編語言才具有的精細控制能力,可以用于電腦cpu的編程控制語言,如果愿意,可以細調(diào)程序以獲得最大速度或最大內(nèi)存使用率。其可移植性的特點,可以使其在不經(jīng)過太大的修改,便可在其它系統(tǒng)上運行,同時,它也是很多大型系統(tǒng)的編程語言,(比如說UNIX的操作系統(tǒng)就是建立在c之上的)。 2.3設(shè)計方案與內(nèi)容 我此次設(shè)計的是一個計算器,主要是利用我們所學(xué)的知識,做到進一步掌握c語言的奧秘,使這種功能強大的高級語言走近我們的生活。本計算系統(tǒng)主要是作加減乘除運算。 該計算系統(tǒng)程序包括:main()函數(shù)、加函數(shù)、減函數(shù)、乘函數(shù)、除函數(shù)和顯示函數(shù)。2.3.1設(shè)計內(nèi)容 1、加運算: int jia(int a,int b){int c;c=a+b;printf(“c=%d n”,c);} 2、減運算: int jian(int a,int b){int c;c=a-b;printf(“ c=%d n”,c);} 3、乘運算: int cheng(int a,int b){int c;c=a*b;printf(“ c=%d n”,c);} 4、除運算: int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);} 5、顯示函數(shù)程序: 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*選擇提示*/ printf(“***************************n”);/*分隔號*/ printf(“0:apply overn”);/*輸入0選項則提示結(jié)束,輸出0*/ printf(“1:apply is additionn”);/*選擇加號*/ printf(“2:apply is subtractionn”);/*選擇減號*/ printf(“3: apply is multiplicationn”);/*選擇乘號*/ printf(“4:apply is divisionn”);/*選擇除號*/ } 顯示界面程序圖如圖2-1所示 圖2-1顯示界面 程序分析: 1)printf(“please choose lower level operation sign n”);/*選擇提示*/這句可以根據(jù)需要寫成時間,一句鼓勵自己的話,或者別的什么,都將不影響改程序的正常運行,只要在規(guī)定的“n”里,用戶可以根據(jù)自己的需要把它用一句英文表達出來。 2)printf(“***************************n”);/*分隔號*/此句無關(guān)緊要,可以去掉也可以保留,看個人心情,不過個人建議,還是保留的比較好,它能保持計算器界面的美觀特點,還能作為分隔運算程序的作用,讓使用者能最快的對運算區(qū)進行劃區(qū)。3)printf(“0:apply overn”);/*輸入0選項則提示結(jié)束,輸出0*/此句在運算界面里出現(xiàn),當(dāng)用戶使用時,不小心輸入了一個字符,非1~4以內(nèi),則會提示錯誤,按‘enter’結(jié)束該片段,然后根據(jù)提示,選擇自己所希望使用的運算符號進行運算。 4)printf(“1:apply is additionn”);/*選擇加號*/此句是加法運算提示,當(dāng)輸入‘1’后按‘enter’會得到可以使用加法的提示,然后就可以使用加法運算了,使用空格將數(shù)字與要加的數(shù)字分開,按‘enter’將得到你要的答案。5)printf(“2:apply is subtractionn”);/*選擇減號*/這是加法運算提示。它的使用方法和 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 相同。 2.3.2程序調(diào)試 1、加法運算 加法運算運行結(jié)果如圖2-2所示。 圖2-2加法運算運行結(jié)果 2、減法運算 減法運算結(jié)果如圖2-3所示。 圖2-3減法運算 3、乘法運算 乘法運算如圖2-4所示。 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 圖2-4乘法運算 4、除法運算 除法運算如圖2-5所示 圖2-5除法運算 6、主函數(shù)程序: int main(){ int a, b; 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 for(;;){ xian();switch(getchar()){ case '0':printf(“ tui chu: ”);getchar();return 0;case '1': printf(“ apply is '+': n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jia(a,b);break;case '2':printf(“ apply is '-':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jian(a,b);break;case '3':printf(“apply is '*':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();cheng(a,b);break;case '4':printf(“ apply is '/':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();chu(a,b);break;default:printf(“wrong!please push down'enter' go on with ”);/*提示錯誤*/ getchar();break; 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 } } return 0;/*一輪運算結(jié)束后返回符號選擇功能選項*/ } 該主函數(shù)程序中使用了xian()函數(shù)、switch(getchar())語句、getchar()、for、break、return。xian()函數(shù)的功能是在程序運行中,具有顯示界面的功能。switch(getchar())語句具有多分支選擇功能。getchar()是庫函數(shù)。for循環(huán)語句。是break語句是實現(xiàn)跳出循環(huán)的功能的語句。Return語句是返回語句,是程序最后一個語句,在int main(void)中int表示main()函數(shù)的返回值應(yīng)該是一個整數(shù)。該程序具備的選擇功能: (1)選擇提示:該計算器編輯界面有5個提示,它們分別是‘0’、‘1’,‘2’、‘3’、‘4’,當(dāng)使用者在該界面上輸入它們其中一個數(shù)字,會得到相對應(yīng)的提示,其中1~4分別表示加、減、乘、除運算?!?’表示結(jié)束工作框結(jié)束。 (2)使用方法:進入選擇界面后,要選擇加法運算,請輸入‘1’,然后按下‘enter’鍵。會得到提示 致謝 在本次課程設(shè)計中,首先我要感謝張老師。是他至始至終的教導(dǎo)讓我能夠在編程方面迅速的入門。在我們對程序語言的學(xué)習(xí)過程中,是他不斷的給我們講解語句內(nèi)容并且糾正我們存在的錯誤。不斷的給我們提供幫助并且給我們分析遇到的問題。老師認真負責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)治學(xué)的精神和深厚的理論水平都使我受益匪淺。他們無論在理論上還是實踐中都給了我很大的幫助,使我整體水平得到了提高,對于我以后的學(xué)習(xí)和工作都有一定的幫助,感謝張兵老師的耐心輔導(dǎo)! 參考文獻 [1]孫雄勇.Visual C++ 6.0 實用教程.北京:中國鐵道出版社,2004.[2]新電腦課堂編委會.Visual C++ 編程篇.北京:電子工業(yè)出版社,2004.[3]陳清華.Visual C++課程設(shè)計案例精選與編程指導(dǎo).北京:北京大學(xué)出版社,2005.[4]李東玉.Visual C++.NET實用編程100例.北京:中國鐵道出版社,2003.[6]張志清.管理信息系統(tǒng).南京:東南大學(xué)出版社,2003. 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 附錄 #include int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);} void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*選擇提示*/ printf(“***************************n”);/*分隔號*/ printf(“0:apply overn”);/*輸入0選項則提示結(jié)束,輸出0*/ printf(“1:apply is additionn”);/*選擇加號*/ printf(“2:apply is subtractionn”);/*選擇減號*/ printf(“3: apply is multiplicationn”);/*選擇乘號*/ printf(“4:apply is divisionn”);/*選擇除號*/ } int main(){ 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 int a, b; for(;;){ xian(); switch(getchar()) { case '0':printf(“ tui chu: ”); getchar(); return 0; case '1': printf(“ apply is '+': n ”); scanf(“%d”,&a); getchar(); scanf(“%d”,&b); getchar(); jia(a,b); break; case '2':printf(“ apply is '-':n ”); scanf(“%d”,&a); getchar(); scanf(“%d”,&b); getchar(); jian(a,b); break; case '3':printf(“apply is '*':n ”); scanf(“%d”,&a); getchar(); scanf(“%d”,&b); getchar(); cheng(a,b); break; case '4':printf(“ apply is '/':n ”); scanf(“%d”,&a); getchar(); scanf(“%d”,&b); getchar(); chu(a,b); break; 塔里木大學(xué)信息工程學(xué)院課程設(shè)計 default:printf(“wrong!please push down'enter' go on with ”);/*提示錯誤*/ getchar(); break; } } return 0;/*一輪運算結(jié)束后返回符號選擇功能選項*/ } C語言課程設(shè)計報告 班 級: 10電子本1 學(xué) 號: 10303033122 姓 名: 指導(dǎo)老師: 方文森 完成日期: 溫州大學(xué)城市學(xué)院課程設(shè)計 目 錄 1、課程設(shè)計目的和要求.....................................................................................................2 2、課程設(shè)計任務(wù)內(nèi)容.........................................................................................................2 3、詳細設(shè)計說明.................................................................................................................3 3.1分析.........................................................................................................................3 3.2軟件設(shè)計.................................................................................................................3 3.3軟件調(diào)試(對編程中的錯誤進行記錄,并給出你的解決辦法).....................3 4、軟件使用說明.................................................................................................................4 5、課程設(shè)計心得與體會.....................................................................................................4 附錄1:參考文獻................................................................................................................5 附錄2:部分程序清單(帶有較詳細的注釋)................................................................5 溫州大學(xué)城市學(xué)院課程設(shè)計 C語言課程設(shè)計報告 1、課程設(shè)計目的和要求 目的:(1)鞏固和加深學(xué)生對C語言課程的基本知識的理解和掌握(2)掌握C語言編程和程序調(diào)試的基本技能(3)利用C語言進行基本的軟件設(shè)計(4)掌握書寫程序設(shè)計說明文檔的能力(5)提高運用C語言解決實際問題的能力 要求:(1)分析課程設(shè)計題目的要求(2)寫出詳細設(shè)計說明 (3)編寫程序代碼,調(diào)試程序使其能正確運行(4)設(shè)計完成的軟件要便于操作和使用(5)設(shè)計完成后提交課程設(shè)計報告 2、課程設(shè)計任務(wù)內(nèi)容 1)一個班級有4個學(xué)生,共學(xué)習(xí)5門課程(大學(xué)英語、高等數(shù)學(xué)、C語言程序設(shè)計、VB程序設(shè)計、大學(xué)語文)。要求編寫程序完成相應(yīng)功能。2) 輸入并保存]5門課程名稱; 3) 輸入并保存]4個學(xué)生的學(xué)號及其[個人相關(guān)信息]; 4) 輸入并保存]每個學(xué)生對應(yīng)的每門課程成績; 5)求出每門功課的平均分; 6)找出有兩門以上功課不及格的學(xué)生,輸出他們的學(xué)號和全部課程成績及該學(xué)生5門課程的平均成績; 7)找出平均成績在90分以上或者全部課程成績在85分以上的學(xué)生,輸出他們的學(xué)號和全部課程成績及該學(xué)生5門課程的平均成績; 8)計算每位學(xué)生的總分,并按總分進行排名,按由高到低輸出他們的學(xué)號及總成績; 9)對前面問題進行優(yōu)化,即在一維數(shù)駔的基礎(chǔ)上,考慮采用二維數(shù)組、函數(shù)及其參數(shù)傳遞的方式來解決相關(guān)問題; 10)對前面問題進行優(yōu)化,在學(xué)號的基礎(chǔ)上,增加學(xué)生的其它個人信息,包括:學(xué)號、姓名、年齡、性別,并采用結(jié)構(gòu)體形式加以表示; 11)利用文件實現(xiàn)對輸入及分析輸出數(shù)據(jù)的存取操作。 12)參照教材P27頁,3-11題引入選擇功能,輸入功能編號可以實現(xiàn)以上功能(考慮清屏函數(shù),自查)。 溫州大學(xué)城市學(xué)院課程設(shè)計 3、詳細設(shè)計說明 3.1分析 3.2軟件設(shè)計 開始菜單(功能選擇)Key=?Key=1Key=2Key=3Key=4Key=5Key=0Key=99Key=6Key=7Key=8Key=9Key=10寫入課程名讀取課程名輸入學(xué)生信息讀取學(xué)生信息建立了學(xué)生信息及課程名稱?退出程序讀取課程、學(xué)生、成績讀取課程成績輸出功課的平均分兩門以上功課不及格的學(xué)生輸出高分的學(xué)生總分由高到低排序No保存保存Yes輸入課程成績(提示)必須輸入課程名稱、學(xué)生信息才能建立成績保存清屏 3.3軟件調(diào)試(對編程中的錯誤進行記錄,并給出你的解決辦法) 取地址。 溫州大學(xué)城市學(xué)院課程設(shè)計 4、軟件使用說明 1.2.3.4.5.6.7.8.9.10.11.12.[99]讀取課程、學(xué)生、成績 [1]輸入課程名稱.[2]讀取課程名稱.[3]輸入學(xué)生信息.[4]讀取學(xué)生信息.[5]輸入課程成績.[6]讀取課程成績.[7]功課的平均分.[8]兩門以上功課不及格的學(xué)生 [9]-高分的學(xué)生-.[10]學(xué)生總分排序.[0]退出應(yīng)用程序.5、課程設(shè)計心得與體會 在大家的共同努力下,忙碌了兩個星期,我們順利完成了對此程序的編譯及試運行。在設(shè)計程序的過程中,我們了解到要設(shè)計一個完整的程序,其中最難的可能就屬設(shè)計整個程序的框架,其中可能會需要經(jīng)過很多次的修改與調(diào)試,所以必須要有耐心,直至最后設(shè)計出自己想要的程序。 另外平時學(xué)習(xí)c語言的基礎(chǔ)也很關(guān)鍵,因為如果平時學(xué)得就不怎么樣,那么你面對這么一個比較有難度的程序,可能會望而卻步,看懂他人的程序都是個難點,更別說讓自己去設(shè)計。為了解決此類問題,最好就是多向同學(xué),老師請教,查找資料。 設(shè)計一個程序的過程就是解決一個實際問題的過程,從解決實際問題的角度,我們可以這樣來看:首先要了解這個問題的基本要求,即輸入、輸出、完成從輸入到輸出的要求是什么;在次我們必須捋清思路,逐一的解決問題的各個方面,即從輸入開始入手,著重考慮如何從輸入導(dǎo)出輸出,在這個過程中,可確定所需的變量、數(shù)組、函數(shù),然后確定處理過程--算法。 感謝這次的課程設(shè)計,它使我更加深刻地體會到c語言程序編寫過程的嚴(yán)謹(jǐn)與細致,還有就是無論做任何事都要有耐心。當(dāng)然團隊合作也是非常重要的一個環(huán)節(jié),這會使你在學(xué)習(xí)過程中倍感輕松 總的來說,這次程序設(shè)計讓我獲益匪淺,對C語言也有了進一步的認識:C語言功能高、表達能力強、使用靈活方便、目標(biāo)程序效率高等等。C語言是在國內(nèi)外廣泛使用的一種計算機語言,相信除了以上優(yōu)點,還有許多我們還未發(fā)現(xiàn),希望能在以后的學(xué)習(xí)中有更深入的認 溫州大學(xué)城市學(xué)院課程設(shè)計 識。 附錄1:參考文獻 《C語言程序設(shè)計與實踐教程》 附錄2:部分程序清單(帶有較詳細的注釋) #include #define N 4 #define M 5 #define Debug 1 typedef struct { char SNo[5];char SName[10];}Student; void ScoreRead(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i 溫州大學(xué)城市學(xué)院課程設(shè)計 void ScoreWrite(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i void CoureseRead(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;char ch;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} i=0;j=0;while(1){ ch = fgetc(fp);if(ch==EOF)break;if(ch=='n'){ Cname[i][j]='
第三篇:C語言課程設(shè)計報告
第四篇:C語言課程設(shè)計報告