C語言程序設(shè)計課程設(shè)計_第1頁
C語言程序設(shè)計課程設(shè)計_第2頁
C語言程序設(shè)計課程設(shè)計_第3頁
C語言程序設(shè)計課程設(shè)計_第4頁
C語言程序設(shè)計課程設(shè)計_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、C語言程序設(shè)計課程設(shè)計 評語:考勤(10)紀(jì)律(10)過程(40)設(shè)計報告(30)答辯(10)總成績(100)專 業(yè): 自動化 班 級: 自動化1402 姓 名: 魏萬鵬 學(xué) 號: 201408623 指導(dǎo)教師: 侯濤 蘭州交通大學(xué)自動化與電氣工程學(xué)院2015 年 7月 22日1.基本題目1.1 題目打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。1.2 題目分析先把三位數(shù)的百位,十位,個位分解開,最后再計算下各位數(shù)字立方和是否等于該數(shù)本身,滿足條件輸出該數(shù),不滿足繼續(xù)循環(huán)直到程序結(jié)束。1.3流程圖基本題目的流程圖如圖1.1所示。如圖1.1 基本題目流程

2、圖1.4 源程序#include<stdio.h>int main()int i,j,k,n; printf("parcissus numbers aren"); for(n=100;n<1000;n+) i=n/100; j=n/10-i*10; k=n%10; if(n=i*i*i+j*j*j+k*k*k) printf("%d ",n); printf("n"); return 0;1.5 程序運行結(jié)果上述程序的運行結(jié)果如圖1.2所示。圖1.2 基本題目運行結(jié)果2.改錯題目2.1 題目下列給定程序中,函數(shù)fun

3、的功能是:用選擇法對數(shù)組中的n個元素按從小到大的順序進(jìn)行排序。請改正程序中的錯誤,使程序能得出正確的結(jié)果。注意,不要改多main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。程序如下:#include <stdio.h>#define N 20void fun(int a,int n) int i,j,t,p;for (j=0;j<n-1;j+) p=j 加上“;”for (i=j;i,n;i+) j改為j+1if (ai<ap)p=j; j改為it=ap;ap=aj;aj=t; main()int aN=9,6,8,3,-1,i,m=5;printf("排序前

4、的數(shù)據(jù):");for (i=0;i<m;i+)printf("%d",ai);printf("n");fun(a,m);printf("排序后的數(shù)據(jù):");for (i=0;i<m;i+)printf("%d",ai);printf("n");2.2 錯誤分析本題使用fun函數(shù)的調(diào)用,來實現(xiàn)排序的功能。Fun函數(shù)中有兩個for語句的嵌套使用,實現(xiàn)遍歷操作。錯誤如下:1. 在fun函數(shù)中第二個for語句對循環(huán)次數(shù)的控制不正確。2. j的值應(yīng)該賦給p,而不是i。2.3 流程圖給

5、錯題的流程圖如圖2.1所示。如圖2.1 給錯題的流程圖2.3 改正后程序#include <stdio.h>#define N 20void fun(int a,int n)int i,j,t,p;for (j=0;j<n-1;j+)p=j;for (i=j+1;i<n;i+)if(ai<ap)p=i;t=ap;ap=aj;aj=t;main()int aN=9,6,8,3,-1,i,m=5;printf("排序前的數(shù)據(jù):");for (i=0;i<m;i+)printf("%d ",ai);printf("

6、n");fun(a,m);printf("排序后的數(shù)據(jù):");for (i=0;i<m;i+)printf("%d ",ai);printf("n");2.4 程序運行結(jié)果上述程序的運行結(jié)果如圖2.2所示。圖2.2 改錯題目運行結(jié)果3.綜合題目3.1 題目綜合題目為:班級成績管理系統(tǒng)一、問題描述:對一個有N個學(xué)生的班級,每個學(xué)生有M門課程。該系統(tǒng)實現(xiàn)對班級成績的錄入、顯示、修改、排序、保存等操作的管理。二、功能要求:1. 本系統(tǒng)采用一個結(jié)構(gòu)體數(shù)組,每個數(shù)據(jù)的結(jié)構(gòu)應(yīng)當(dāng)包括:學(xué)號、姓名、M門課程名稱。2. 本系統(tǒng)顯示這樣的

7、菜單:請選擇系統(tǒng)功能項:a、 成績錄入b、 成績顯示c、 成績保存d、 成績排序e、 成績修改(要求先輸入密碼)f、 成績統(tǒng)計(1) 顯示每門課程成績最高的學(xué)生的基本信息(2) 顯示每門課程的平均成績(3) 顯示超過某門課程平均成績的學(xué)生人數(shù)g、 退出系統(tǒng)3. 執(zhí)行一個具體的功能之后,程序?qū)⒅匦嘛@示菜單。4. 將學(xué)生成績保存到文件中。三、算法提示:1. 數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體類型數(shù)組。2. 數(shù)據(jù)庫結(jié)構(gòu):下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫。姓名學(xué)號課程名稱1課程名稱2charCharfloatfloat四、測試數(shù)據(jù):學(xué)生人數(shù)N=10課程門數(shù)M=4課程名:數(shù)學(xué)、語文、英語、政治五、其它 對該系統(tǒng)有興趣的同學(xué)可以

8、在實現(xiàn)上述基本功能后,完善系統(tǒng)的其它功能。3.2 設(shè)計思路 設(shè)計思路:根據(jù)系統(tǒng)要求,進(jìn)入,輸出文件,保存文件,排序,修改,統(tǒng)計、具體為 成績錄入,成績顯示, 成績保存, 成績排序, 成績統(tǒng)計。以及主函數(shù),來完成系統(tǒng)要求功能。在主函數(shù)中,根據(jù)使用對象不同要求,用switch語句來實現(xiàn)其功能。同時使用結(jié)構(gòu)體將不同類型的數(shù)組放到一起便于使用。3.3 流程圖1.班級學(xué)生管理系統(tǒng)基本框架圖,如圖3.1所示。班級學(xué)生成績管理系統(tǒng)成績保存退出程序成績統(tǒng)計成績修改成績排序成績顯示成績錄入顯示每門課程成績最高的學(xué)生的基本信息顯示超過某門課程平均成績的學(xué)生人數(shù)顯示每門課程的平均成績 圖3.1 班級學(xué)生成績管理系統(tǒng)

9、框架圖2. 主函數(shù)流程圖如圖3.2所示。如圖3.2 主函數(shù)流程圖3.修改成績子函數(shù)流程圖,如圖3.3所示。如圖3.3 修改成績子函數(shù)的流程圖4.成績排序子函數(shù)流程圖,如圖3.4所示。如圖3.4 成績排序子函數(shù)流程圖3.4 程序運行結(jié)果上述程序的運行結(jié)果如圖3.5,如圖3.6,如圖3.7,如圖3.8,如圖3.9所示。如圖3.5 主函數(shù)運行結(jié)果如圖3.6 子函數(shù)成績錄入的運行結(jié)果 如圖3.7 子函數(shù)成績顯示的運行結(jié)果如圖3.8 子函數(shù)成績排序的運行結(jié)果如圖3.9 子函數(shù)成績統(tǒng)計的運行結(jié)果結(jié)論通過這次課程設(shè)計,讓我更加深刻的體會到C語言是一門注重上機(jī)實踐課程,要想學(xué)好它,并能熟練的運用,就應(yīng)該多上機(jī)

10、。將自己的想法轉(zhuǎn)化為代碼,進(jìn)行運行。找出錯誤,只有這樣不斷地練習(xí),才能提高自己。在綜合題上面,有很多次并不能運行自己理想的結(jié)果,不斷地調(diào)試,查閱資料和同學(xué)交流,最終解決問題,使自己的理論知識得到應(yīng)用,這也為自己今后的學(xué)習(xí)方式提供了新的思路。這次的課設(shè)是自己的收獲很大。附錄 綜合題源代碼#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #include<ctype.h> #define HEADER1 " -總表-n"#

11、define HEADER2 " | 學(xué)號 | 姓名 | 數(shù)學(xué) | 語文 | 英語 | 政治 | 總分 |平均分 |名次 | n"#define HEADER3 " | 學(xué)號 | 姓名 | 數(shù)學(xué) | 語文 | 英語 | 政治 | 總分 |平均分 |次序 | n"#define HEADER4 " |-|-|-|-|-|-|-|-|-| n"#define HEADER5 " | 學(xué)號 | 姓名 | 數(shù)學(xué) | 語文 | 英語 | 政治 | 總分 |平均分 |n"#define END " - n"

12、#define N 10#define M 4struct Student char name60; char num60; float scoreM; float sum;struct Student studentN; /定義結(jié)構(gòu)體數(shù)組 int main() /主函數(shù) void menu(); /聲明主菜單 void chengjiluru(); /聲明成績錄入函數(shù) void chengjixianshi(); /聲明成績顯示函數(shù) void chengjibaocun(); /聲明成績保存函數(shù) void chengjipaixu(); /聲明成績排序函數(shù) void chengjixiuga

13、i(); /聲明成績修改函數(shù) void chengjitongji(); /聲明成績統(tǒng)計函數(shù) void display(); char c,a; while(1) menu(); c=getchar(); printf("確定按Y,不確定按N!n"); a=getchar(); scanf("%c",&a); if(a!='Y'&&a!='y') /可以選擇是否繼續(xù)錄入 break; switch(c) /采用多分支選擇接結(jié)構(gòu)實現(xiàn)對菜單程序的訪問 case 'a': chengjil

14、uru(); break; case 'b': chengjixianshi(); break; case 'c': chengjibaocun(); break; case 'd': chengjipaixu(); break; case 'e': chengjixiugai(); break; case 'f': chengjitongji(); break; case 'g': exit(0); default: break; c=getchar(); printf("n"

15、); return 0;void menu() system("cls"); /執(zhí)行控制臺命令cls,就是CMD下面的cls,功能是清屏,清除所有顯示的信息。 printf(" *n"); printf(" 歡迎使用班級成績管理系統(tǒng)n"); printf(" *n"); /*系統(tǒng)歡迎界面*/ printf(" 請按照提示選擇您所需要的相應(yīng)操作:n"); printf("n"); printf("n"); printf("n"); pri

16、ntf("n"); printf(" a:成績錄入n"); /*主菜單相應(yīng)選項*/ printf("n"); printf(" b:成績顯示n"); printf("n"); printf(" c:成績保存n"); printf("n"); printf(" d:成績排序n"); printf("n"); printf(" e:成績修改n"); printf("n"); pri

17、ntf(" f:成績統(tǒng)計n"); printf("n"); printf(" g:退出系統(tǒng)n"); printf("你的選擇是:");void chengjiluru() int i,c; system("cls"); for(i=0;i<N;i+) printf("tttt1.錄入學(xué)生信息n輸入第%d個學(xué)生的信息n",i+1); printf("輸入學(xué)號:"); scanf("%s",&studenti.num); ff

18、lush(stdin); /功能:清空輸入緩沖區(qū),通常是為了確保不影響后面的數(shù)據(jù)讀?。ɡ缭谧x完一個字符串后緊接著又要讀取一個字符,此時應(yīng)該先執(zhí)行fflush(stdin);)。 printf("輸入姓名:"); scanf("%s",&); fflush(stdin); printf("數(shù)學(xué)成績:"); fflush(stdin); scanf("%f",&studenti.score0); printf("語文成績:"); fflush(stdin)

19、; scanf("%f",&studenti.score1); printf("英語成績:"); fflush(stdin); scanf("%f",&studenti.score2); printf("政治成績:"); fflush(stdin); scanf("%f",&studenti.score3); printf("nn"); printf("按Y繼續(xù)錄入,按N結(jié)束錄入!n"); c=getchar(); scanf(&q

20、uot;%c",&c); if(c!='Y'&&c!='y') /可以選擇是否繼續(xù)錄入 break; void chengjixianshi() FILE *fp; /文件指針 int count=0;/保存文件中的記錄條數(shù) int i,j; fp=fopen("student.txt","rb"); /以追加方式打開一個二進(jìn)制文件,讀,若此文件不存在,會創(chuàng)建此文件 if(fp=NULL) printf("n=>不能打開文件!n"); exit(0); while

21、(!feof(fp) if(fread(&studentcount,sizeof(struct Student),1,fp)=1) /一次從文件中讀取一條學(xué)生成績記錄 count+; printf("n=>成功打開文件,總的記錄數(shù)為 : %dn",N); printf(HEADER1); / 表頭 printf(HEADER3); printf(HEADER4); for(i=0;i<N;i+) printf(" | %-9s| %-7s |",studenti.num,); for(j=0;j<M;j

22、+) printf(" %-0.1f |",studenti.scorej); studenti.sum+=studenti.scorej; printf(" %4.1f | %-4.2f |",studenti.sum,studenti.sum/4); printf(" %-2d |",i+1); printf("n"); printf(HEADER4); getchar();void chengjibaocun() FILE *fp; /文件指針 int i; fp=fopen("student.tx

23、t","wb"); /打開一個二進(jìn)制文件,進(jìn)行寫操作,若此文件不存在,會創(chuàng)建此文件 if(fp=NULL) printf("n=>不能打開文件!n"); exit(0); for(i=0;i<N;i+) if(fwrite(&studenti,sizeof( struct Student),1,fp)!=1) printf("file write error!"); printf(" | %-7s | %-7s |",studenti.num,); print

24、f("n=>成功保存成績,總的記錄數(shù)為 : %dn",N); fclose(fp); /關(guān)閉文件void chengjipaixu() int i,j; for(i=0;i<N-1;i+) / 冒泡排序法 for(j=i+1;j<N;j+) if(studenti.sum<studentj.sum) /以結(jié)構(gòu)體數(shù)組中.sum各元素作為比較對象 struct Student st; st=studenti; studenti=studentj; studentj=st; printf(HEADER1); / 原樣輸出表頭 printf(HEADER2)

25、; printf(HEADER4); for(i=0;i<N;i+) printf(" | %-9s| %-7s |",studenti.num,); /負(fù)號表示左對齊 studenti.sum=0; for(j=0;j<M;j+) printf(" %0.1f |",studenti.scorej); studenti.sum+=studenti.scorej; printf(" %0.1f | %0.1f |",studenti.sum,studenti.sum/4); /沒有負(fù)號表示右對齊

26、printf(" %2d |",i+1); printf("n"); printf(HEADER4); getch(); /輸入字母,進(jìn)入下一模塊void chengjitongji() struct Student maxM; / 單門課程成績最高記錄 int i, j; int aM; float averM, sum; for(j=0;j<M;j+) /打擂臺法確定每門課程的最高成績 maxj=student0; for(i=0;i<N;i+) if(studenti.scorej>maxj.scorej) maxj=studen

27、ti; printf(HEADER5); printf("數(shù)學(xué)成績最高學(xué)生記錄:n | %-7s | %-7s |",max0.num,); for(j=0;j<M;j+) printf(" %-0.1f |",max0.scorej); printf(" %.1f | %-.2f |n",max0.sum,max0.sum/M); printf("語文成績最高學(xué)生記錄:n | %-7s | %-7s |",max1.num,); for(j=0;j<M;j+) pr

28、intf(" %-0.1f |",max1.scorej); printf(" %-.1f | %-.2f |n",max1.sum,max1.sum/4); printf("英語成績最高學(xué)生記錄:n | %-7s | %-7s |",max2.num,); for(j=0;j<M;j+) printf(" %-0.1f |",max2.scorej); printf(" %-0.1f | %-0.2f |n",max2.sum,max2.sum/4); printf(&

29、quot;政治成績最高學(xué)生記錄:n | %-7s | %-7s |",max3.num,); for(j=0;j<M;j+) printf(" %-0.1f |",max3.scorej); printf(" %3.1f | %-3.2f |n",max3.sum,max3.sum/4); for(j=0;j<M;j+) sum=0; for(i=0;i<N;i+) sum=studenti.scorej+sum; averj=sum/N; for(j=0;j<M;j+) aj=0; for(i=0;i<N;i+) if(studenti.scorej>averj) aj=aj+1; printf("n* * 數(shù)學(xué)成績的平均分:%3.1f,超過數(shù)學(xué)成績平均分的學(xué)生人數(shù)為:%d * *nn",aver0,a0); printf("* * 語文成績的平均分:%3.1f,超過語文成績平均分的學(xué)生人數(shù)為:%d * *nn"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論