C語言綜合程序設(shè)計(jì)說明書_第1頁
C語言綜合程序設(shè)計(jì)說明書_第2頁
C語言綜合程序設(shè)計(jì)說明書_第3頁
C語言綜合程序設(shè)計(jì)說明書_第4頁
C語言綜合程序設(shè)計(jì)說明書_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、c語言綜合程序設(shè)計(jì)說明書一、設(shè)計(jì)目的 用c語言設(shè)計(jì)一個(gè)具有輸入成績、打印成績表功能的綜合程序,以鞏固和加深對(duì)c語言的學(xué)習(xí)。二、設(shè)計(jì)要求已知有5名學(xué)生學(xué)號(hào)、學(xué)科如下:學(xué)號(hào)姓名數(shù)學(xué)英語計(jì)算機(jī)哲學(xué)總分名次1010110102101031010410105設(shè)計(jì)一個(gè)菜單程序,完成功能如下:1、輸入1時(shí)完成輸入姓名及各科成績;2、輸入2時(shí)完成打印輸出總表;3、輸入3時(shí)完成打印學(xué)號(hào),成績表,總分和名次;4、輸入4時(shí),完成退出功能。注:每執(zhí)行完一個(gè)功能,屏幕必須清屏。三、設(shè)計(jì)思路將設(shè)計(jì)要求中的1、2、3分別定義為具有相應(yīng)功能的子函數(shù),再在主函數(shù)中進(jìn)行調(diào)用。1、根據(jù)設(shè)計(jì)要求,設(shè)計(jì)需要用到結(jié)構(gòu)體數(shù)組。因此,首先需

2、要定義一個(gè)結(jié)構(gòu)體數(shù)組,并將其中的學(xué)號(hào)賦值為從1010110105。2、定義一個(gè)具有輸入成績功能的子函數(shù),用循環(huán)語句和scanf語句相結(jié)合,完成每個(gè)學(xué)生的信息輸入。3、另外定義一個(gè)子函數(shù)對(duì)結(jié)構(gòu)體中的總分進(jìn)行比較,排出學(xué)生名次。4、定義一個(gè)輸出總表函數(shù),用printf語句和循環(huán)語句結(jié)合使用,使該函數(shù)可以輸出結(jié)構(gòu)體中的各項(xiàng)數(shù)據(jù)。根據(jù)設(shè)計(jì)要求,可將定義的輸出總表的函數(shù)中的輸出姓名項(xiàng)刪除,即可得到打印學(xué)號(hào)、成績表、總分和名次的函數(shù)。四、程序設(shè)計(jì)環(huán)境 windows操作系統(tǒng) win-tc 五、程序功能模塊圖主函數(shù)調(diào)用子函數(shù)數(shù)1,完成學(xué)生信息的輸入調(diào)用子函數(shù)2,完成成績總表的打印,調(diào)用子函數(shù)3,完成打印學(xué)號(hào)

3、,成績表,總分,名次完成程序的退出輸出提示語:對(duì)不起!您選擇的不是功能鍵,請(qǐng)重新選擇選擇功能鍵:1,2,3,4選擇1選擇2選擇3選擇4選擇其他六、程序功能流程圖主函數(shù)main()while(1)輸入n的值switch(n)n=1n=2n=3n=4n!=1,2,3,4調(diào)用子函數(shù),完成信息錄入和排名調(diào)用子函數(shù),完成打印輸出總表調(diào)用子函數(shù),完成打印輸出部分信息調(diào)用子函數(shù)完成退出提示用戶輸入有錯(cuò)誤返回主函數(shù)main()主函數(shù)功能菜單輸輸出第一個(gè)學(xué)生的信息輸出第i個(gè)學(xué)生的信息選擇功能鍵1,2,3,4i=5i=+輸入第一個(gè)學(xué)生的信息輸入第i個(gè)學(xué)生的信息按任意鍵返回主函數(shù)main()i=5i=+ 假 假 真

4、 真 輸入子函數(shù)-完成信息的錄入 輸出子函數(shù)完成打印表 for i=1 to 5 for j=1 to 5sti.sumstj.sum 真 假sti.mingci+返回主函數(shù)main()m=n退出m=y輸入mwhile(1) 排名子函數(shù)-完成名次的排列 退出子函數(shù)-完成退出功能七、程序代碼#include#include#include#includestruct student int num; char name20; float score5; float sum; int mingci;st6=0,10101,10102,10103,10104,10105;int shuru() in

5、t i; system(cls); printf(成績錄入nnnn); printf(tt本程序只能輸入5個(gè)學(xué)生的信息ntt為使系統(tǒng)正常工作請(qǐng)按提示操作nntt注意:每輸入成一項(xiàng)信息后按enter鍵確認(rèn)!nnnn); printf(nn); sqrt(0); /*打開win tc浮點(diǎn)數(shù)支持*/ for(i=1;i=5;i+) /*這個(gè)循環(huán)是輸入數(shù)據(jù)*/ printf(請(qǐng)輸入學(xué)號(hào)為%d學(xué)生的姓名:,sti.num); scanf(%s,); printf(請(qǐng)輸入該生的數(shù)學(xué)成績:); scanf(%f,&sti.score1); printf(請(qǐng)輸入該生的英語成績:); scanf

6、(%f,&sti.score2); printf(請(qǐng)輸入該生的計(jì)算機(jī)成績:); scanf(%f,&sti.score3); printf(請(qǐng)輸入該生的哲學(xué)成績:); scanf(%f,&sti.score4); sti.sum=sti.score1+sti.score2+sti.score3+sti.score4; printf(n您已經(jīng)完成了5位學(xué)生信息的錄入nntt請(qǐng)按任意鍵返回主菜單t); getch(); int mingci() int i,j; for(i=1;i=5;i+) sti.mingci=1; for(j=1;j=5;j+) if(sti.sumstj.sum) sti

7、.mingci+; int shuchu() int i; printf(打印輸出總表); printf(nnn); printf(tbbb_n); printf(t學(xué)號(hào)t姓名tt數(shù)學(xué)t英語t計(jì)算機(jī)t哲學(xué)t總分t名次n); printf(tbbb_n); for(i=1;i6;i+) /*這個(gè)循環(huán)是輸出數(shù)據(jù)*/ printf(t%dt%8st%.2ft%.2ft%.2ft%.2ft%.2ft %dn,sti.num,,sti.score1,sti.score2,sti.score3,sti.score4,sti.sum,sti.mingci); printf(tbbb_n);

8、printf(nnnn); printf(您還想完成哪項(xiàng)操作,請(qǐng)選擇功能鍵 1,2,3,4后按 entern); printf(n); printf(t1.錄入成績 2.打印輸出總表 3.打印學(xué)號(hào)、成績表、總分和名次 4.退出n); int shuchu1() int i; printf(打印學(xué)號(hào)、成績表、總分和名次); printf(nnn); printf(tttbbbbbbbbbbbbbb_n); printf(tt學(xué)號(hào)t數(shù)學(xué)t英語t計(jì)算機(jī)t哲學(xué)t總分t名次n); printf(tttbbbbbbbbbbbbbb_n); for(i=1;i6;i+) /*這個(gè)循環(huán)是輸出數(shù)據(jù)*/ prin

9、tf(tt%dt%.2ft%.2ft%.2ft%.2ft%.2ft %dn,sti.num,sti.score1,sti.score2,sti.score3,sti.score4,sti.sum,sti.mingci); printf(tttbbbbbbbbbbbbbb_n); printf(nnnn); printf(您還想完成哪項(xiàng)操作,請(qǐng)選擇功能鍵 1,2,3,4后按 entern); printf(n); printf(t1.錄入成績 2.打印輸出總表 3.打印學(xué)號(hào)、成績表、總分和名次 4.退出n); int tuichu() char m; while(1) system(cls);

10、printf(nnnnn); printf(ttt您確認(rèn)要退出嗎?(y/n)n); printf(nn); printf(ttty 確認(rèn)退出n); printf(tttn 返回主菜單nnnn); printf(tt請(qǐng)選擇功能鍵 y 或 n 后按 entert); scanf(%c,&m); if(m=y) exit(0); else if(m=n) main(); main() int i,j; char n; system( graftabl 936 ); system(cls); printf( 08-09學(xué)年第2學(xué)期c語言綜合程序設(shè)計(jì)*應(yīng)用電子技術(shù)08-1班: 肖紅福 丁傳飛*n); p

11、rintf(n); printf(nnnn); printf(ttt1.錄入成績nttt2.打印輸出總表nttt3.打印學(xué)號(hào)、成績表、總分和名次nttt4.退出nnnnn); printf(tt請(qǐng)選擇功能鍵 1,2,3,4后按 entert); while(1) scanf(%c,&n); switch(n) case 1: system(cls); shuru(); mingci(); main(); break; case 2: system(cls); shuchu(); break; case 3: system(cls); shuchu1(); break; case 4: tuic

12、hu(); default : printf(對(duì)不起!您輸入的數(shù)字不是功能鍵,請(qǐng)從新選擇n); 八、程序運(yùn)行結(jié)果 注:本程序因調(diào)用函數(shù)system( graftabl 936 ),因此直接用win-tc的英文環(huán)境即可運(yùn)行。1、進(jìn)入程序界面,如圖8.1所示:圖8.1 進(jìn)入程序選擇界面2、輸入1后按enter 進(jìn)入成績錄入界面如圖8.2所示:圖8.2 進(jìn)入成績錄入界面3、按提示完成成績的錄入,如圖8.3 所示:圖8.3 成績的錄入界面4、完成成績的錄入后輸入2后按enter 打印出總表:圖8.4 打印總表界面5、完成成績的錄入后選擇3后按enter,打印出學(xué)號(hào)、成績表、總分和名次,如圖8.5所示:

13、圖8.5 打印出學(xué)號(hào)、成績表、總分和名次表界面6、輸入4后,按eneter進(jìn)入退出界面如圖8.6所示:圖8.6退出界面九、設(shè)計(jì)總結(jié) 1、定義結(jié)構(gòu)體數(shù)組 struct student本次設(shè)計(jì)的程序需要定義結(jié)構(gòu)體,起出我們是把各科成績分開逐個(gè)定義: float shuxue;float yingyu;float jisuanji;float zhexue;但后面發(fā)現(xiàn)這樣定義過于繁雜,而且不易給其賦值和打印。然后我們將結(jié)構(gòu)體中學(xué)生的成績定義為一個(gè)數(shù)組float score5;,為與各個(gè)學(xué)生的學(xué)號(hào)對(duì)應(yīng),增強(qiáng)程序的可讀性,我們定義的成績數(shù)組score可以存儲(chǔ)六科成績,其中score0不用,從score1

14、開始,分別存儲(chǔ)學(xué)生的數(shù)學(xué)、英語、計(jì)算機(jī)和哲學(xué)成績。2、定義輸入子函數(shù) int input()在定義輸入函數(shù)時(shí)我們遇到了這樣的一個(gè)問題:我們用循環(huán)語句和輸入函數(shù)scanf對(duì)結(jié)構(gòu)體數(shù)組賦值,但是在運(yùn)行時(shí),輸入數(shù)據(jù)程序就突然跳出了。后來在網(wǎng)上查到,這是由于只不過,tc有關(guān)于float(浮點(diǎn)數(shù))的bug而已。解決這個(gè)問題有一個(gè)方法,就是先在程序中用浮點(diǎn)數(shù)進(jìn)行一次賦值或運(yùn)算即可,因此我們?cè)诙x的輸入子函數(shù)input時(shí)先調(diào)用函數(shù)sqrt(0);求0的平方根,但舍棄結(jié)果/這句的作用,可以讓tc打開浮點(diǎn)數(shù)支持。3、定義排名函數(shù)int mingci() 原先我們想用教材上(p102)所舉出的“冒泡”排序法,對(duì)學(xué)

15、生的總分進(jìn)行排序,然后按從高到底的順序排列出來,即可打印出名次,編輯的代碼如下:int mingci() int i,j,num1; float cj1,cj2,cj3,cj4,sum1; char name1; for(i=1;i6;i+) for(j=i+1;j6;j+) if(sti.sumstj.sum) num1=sti.num; sti.num=stj.num; stj.num=num1; strcpy(name1,); strcpy(,); strcpy(,name1); cj1=sti.score1; sti.sc

16、ore1=stj.score1; stj.score1=cj1; cj2=sti.score2; sti.score2=stj.score2; stj.score2=cj2; cj3=sti.score3; sti.score3=stj.score3; stj.score3=cj3; cj4=sti.score4; sti.score4=stj.score4; stj.score4=cj4; sum1=sti.sum; sti.sum=stj.sum; stj.sum=sum1; 但這樣的排序不僅代碼過多,而且輸出的結(jié)果是按總分從高到底的排列,它把學(xué)生的學(xué)號(hào)順序打亂了。后來通過與其他同學(xué)的交流

17、發(fā)現(xiàn)還有好的方法,即:用循環(huán)語句把學(xué)生的總分進(jìn)行比較,然后得出學(xué)生的名次,代碼如下:int mingci() int i,j; for(i=1;i=5;i+) sti.mingci=1; for(j=1;j=5;j+) if(sti.sum運(yùn)行程序關(guān)閉程序調(diào)整位置”的調(diào)整模式來調(diào)整對(duì)應(yīng)位置,比較麻煩,而且程序代碼不太美觀,不易查看。后來 ,我們?cè)跁喜榈接兄票矸鹴、b,用制表符來對(duì)表的標(biāo)簽和學(xué)生信息的對(duì)應(yīng)位置做調(diào)整比較方便,只需用相同制表服將printf()函數(shù)中的信息隔開,輸出的表的標(biāo)簽與學(xué)生的信息就回相對(duì)應(yīng)了。5、設(shè)計(jì)主函數(shù) main()本設(shè)計(jì)需要程序具有菜單功能,因此在主函數(shù)中我們選擇了switch()循環(huán)語句。為防止跳出循環(huán)而出錯(cuò),我們又在switch()外加上了一個(gè)while(1)的死循環(huán)。這樣,程序就不會(huì)因?yàn)樘鲅h(huán)而結(jié)束。另外,在switch()上,加一個(gè)if語句,當(dāng)用戶輸入的信息有誤時(shí)給用戶提示,提高程序的容錯(cuò)率。6、程序運(yùn)行環(huán)境為使程序能在不用超級(jí)工具(中文dos運(yùn)行環(huán)境)的條件下運(yùn)行出中文,我們?cè)谥骱瘮?shù)中加入了函數(shù)system( graftabl 936 ),該函數(shù)可以實(shí)現(xiàn)在英文運(yùn)行環(huán)境下使程序能顯示中文。但需要注意的是該函

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論