C語(yǔ)言課程設(shè)計(jì)投票程序系統(tǒng)設(shè)計(jì)_第1頁(yè)
C語(yǔ)言課程設(shè)計(jì)投票程序系統(tǒng)設(shè)計(jì)_第2頁(yè)
C語(yǔ)言課程設(shè)計(jì)投票程序系統(tǒng)設(shè)計(jì)_第3頁(yè)
C語(yǔ)言課程設(shè)計(jì)投票程序系統(tǒng)設(shè)計(jì)_第4頁(yè)
C語(yǔ)言課程設(shè)計(jì)投票程序系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、中國(guó)地質(zhì)大學(xué)本科生課程論文封面課程名稱C語(yǔ)言課程設(shè)計(jì)教師邵老師本科生常壁本科生學(xué)號(hào)本科生專業(yè)應(yīng)用化學(xué)所在院系材化學(xué)院類別:C.本科生日期:2011年7月6日課程設(shè)計(jì)評(píng)語(yǔ)對(duì)課程論文的評(píng)語(yǔ):平時(shí)成績(jī):課程論文成績(jī):總成績(jī):評(píng)閱人簽名:注:1、無(wú)評(píng)閱人簽名成績(jī)無(wú)效;2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無(wú)效;3、如有平時(shí)成績(jī),必須在上面評(píng)分表中標(biāo)出,f算入總成績(jī)。課程設(shè)計(jì)評(píng)語(yǔ)2目錄31 .課程論文題目42 .程序設(shè)計(jì)思路43 .功能模塊圖54 .數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)55 .算法設(shè)計(jì)56 .程序代碼107 .程序運(yùn)行結(jié)果 138 .編程中遇到的困難及解決方法 149 .總結(jié)心得及良好建議 1410 .致151

2、 .課程論文題目投票程序要求設(shè)有代號(hào)為a' , 'b' , 'c'的三個(gè)足球先生候選人,根據(jù)投票者在選票上對(duì)他們編號(hào)的填寫順序分 別記分5, 3, 2。請(qǐng)編程從鍵盤上輸入投票人數(shù)及投票結(jié)果,統(tǒng)計(jì)他們的得分,并輸出哪位當(dāng)選足球先生。注意:若同一票上寫有兩個(gè)相同的代號(hào),則顯示“此票無(wú)效”,若最終前兩名得分相同應(yīng)顯示“重新投 票”,否則顯示三位候選人得分并輸入“祝賀X當(dāng)選冠軍”。例如:投票人數(shù):5請(qǐng)參加投票的人開始投票:abccabcaa此票無(wú)效cbabca三位候選人得分:a: 12b: 13c: 15祝賀c當(dāng)選冠軍提示數(shù)據(jù)結(jié)構(gòu)可用結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體成員包括代

3、號(hào)、得分?;蛘卟捎枚S數(shù)組,行方向?qū)?yīng) 一投票,列方向?qū)?yīng)各候選人得分。2 .程序設(shè)計(jì)思路根據(jù)題目要求,首先要輸入投票者人數(shù),再輸入投票者的選票,而選票不是都有效,若同 一票上寫有兩個(gè)相同的代號(hào),則此票無(wú)效,所以要將有效的選票選出來(lái),然后對(duì)選票進(jìn)行統(tǒng) 計(jì)得分,最終來(lái)比較得分,若有得分相同,則重新來(lái)選,最后得分最多的獲勝,最終成為足 球先生。但是此程序還不夠完善,可以增加以下程序,增強(qiáng)其功能:1 .記錄廢票數(shù)目,以便廢票太多,影響選舉公正。2 .若出現(xiàn)a,b,c以外的投票,應(yīng)當(dāng)將該票記為無(wú)效。3 .若出現(xiàn)最終前兩名得分相同,應(yīng)該還可以運(yùn)行程序,使其重新投票,重新計(jì)票,直至最 后選出足球先生。3

4、.功能模塊圖I 口后、輸入選票信息:輸入對(duì)足球先生候選人的選票 輸出結(jié)果:輸出最后足球先生的獲得者 統(tǒng)計(jì)選票:對(duì)選票進(jìn)行統(tǒng)計(jì)4 .數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)要輸入投票人數(shù),將其定義為re,選票信息可以用一個(gè) p1003的數(shù)組來(lái)存放,re來(lái)控制投票信息數(shù)組的行數(shù)。最開始定義一個(gè)全局變量 m=3,來(lái)表示候選者人數(shù)。這樣來(lái)控制數(shù)列數(shù),達(dá)到控制輸入的 目的。每輸入一行,就開始判斷是否一票上寫有兩個(gè)相同代號(hào),或者是出現(xiàn)a','姒外的投票結(jié)果,如果出現(xiàn)這種情況,就將票作廢,并記錄作廢票數(shù)。定義變量v記錄作廢票數(shù)。判斷完畢后,若出現(xiàn)廢票,就將其中的票府賦值為0'返回投票人數(shù)re,留到后續(xù)函數(shù)使用。

5、5 .算法設(shè)計(jì)1、主函數(shù):主函數(shù)只提供輸入、處理和輸出部分函數(shù)調(diào)用:【程序】#include<stdio.h>#include<math.h>int start(char p口3);/* 輸入函數(shù) */void count(int a,char p口3,int pp口);/* 統(tǒng)計(jì)函數(shù) */int result(int a,int b,int c);/* 輸出函數(shù) */int m; /* 全局變量 */void main() /* 主函數(shù) */int a;m=3;int pp3=0,0,0;dochar p1003=0;/*p1003賦初值,清空 */a=start(p

6、);count(a,p,pp);/* 計(jì)算得分 */while(result(pp0,pp1,pp2);/*若m=2循環(huán),直至選出足球先生*/2、各功能模塊設(shè)計(jì)(1)輸入模塊【分析】要輸入投票人數(shù),將其定義為re,選票信息可以用一個(gè) p1003的數(shù)組來(lái)存放,re來(lái)控制 投票信息數(shù)組的行數(shù)。最開始定義一個(gè)全局變量m=3,來(lái)表示候選者人數(shù)。這樣來(lái)控制數(shù)列數(shù),達(dá)到控制輸入的目的。每輸入一行,就開始判斷是否一票上寫有兩個(gè)相同代號(hào),或者是出現(xiàn) 結(jié)果,如果出現(xiàn)這種情況,就將票作廢,并記錄作廢票數(shù)。定義變量'a','瞅外的投票 v記錄作廢票數(shù)。判斷完畢后,若出現(xiàn)廢票,就將其中的票府賦

7、值為返回投票人數(shù)re,留到后續(xù)函數(shù)使用。【程序】'0'int start(char p口3)int re,i,j,v=0;printf("請(qǐng)輸入投票人數(shù)n");scanf("%d",&re);/*a 為投票人數(shù)*/printf("請(qǐng)參力口投票的人開始投票n");getchar();/* 輸入時(shí)以回車結(jié)束 */int flag=0;for(j=0;j<m;j+)scanf("%c”,&pij);getchar();/*輸入選舉投票*/if(pi0=pi111Pi1=pi211Pi0=pi2

8、)flag=1;/*判斷一票上是否寫有兩個(gè)相同代號(hào)*/for(j=0;j<m;j+)if(pij!='a'&&p皿!='b'&&pij!='c')flag=1;/*判斷是否有a,b,c以外的字母*/if(flag)printf("此票無(wú)效 n");v+;for(j=0;j<m;j+)p皿=0;/*若有以上情況,顯示"此票無(wú)效",忽略此票,并記錄廢票數(shù)*/printf("作廢票數(shù)是d票n",v); return re;(2) 統(tǒng)計(jì)模塊【分析】功能

9、上要求分別統(tǒng)計(jì)a,b,c三個(gè)人的得分,因而用 x,y,z來(lái)存放,每一票中分別統(tǒng)計(jì)得分,根據(jù)投票者在選票上對(duì)他們編號(hào)的填寫順序分別記分5, 3, 2,將如果出現(xiàn)廢票,直接跳過(guò)不計(jì),將最后結(jié)果分別放入x,y,z. o引用主函數(shù)中的數(shù)組 pp3,將統(tǒng)計(jì)的x,y,z分別賦值到pp0,pp1,pp2中,這樣就可以帶 回主函數(shù)中?!境绦颉縱oid count(int a,char p口3,int pp口) int b=a,i;int x=0,y=0,z=0;/*'a','b','c'分別代表三個(gè)候選人x y z分別是他們的得分*/for(i=0;i<a

10、;i+)if(pi0='a')x+=5;else if(pi1='a')x+=3;else if(pi2='a')x+=2;if(pi0='b')y+=5;else if(pi1='b')y+=3;else if(pi2='b')y+=2;if(pi0='c')z+=5;else if(pi1='c')z+=3;else if(pi2='c')z+=2;if(pi0='0')continue;PP0=x;ppi=y;pp2=z;(3)輸

11、出模塊【分析】功能上要求比較三位候選人的最后得分,三人得分分別為x,y,z。定義max,將最高分賦值到max中。只有一位最高分時(shí),輸出三位候選人得分,顯示 祝賀某人當(dāng)選冠軍”。如果有兩位最高分,則顯示 請(qǐng)重新投票”,接著,令m=2,改變?nèi)肿兞浚皇O聝?位候選者,顯示三位候選人得分,重新投票統(tǒng)計(jì)。如果兩位候選人分?jǐn)?shù)還相同,則再次循環(huán),若不同,則顯示兩人得分,并顯示祝賀某人當(dāng)選冠軍”?!境绦颉縤nt result(int a,int b,int c)int x,y,z,max=0,s=0,l=0;char k;x=a;y=b;z=c;max=x;k='a'if(max<y

12、) max=y; k='b' if(max<z) max=z;k='c'if(max=x&&max=y|max=x&&max=z|max=y&&max=z) printf("請(qǐng)重新投票n");/*若最高票數(shù)有兩人相同,提示重新投票*/1=1;if(m=3)printf("三位候選人得分:n");elseprintf("兩位候選人得分:n");if(1)m=2;if(x>0)printf("a:%dn",x);if(y>

13、0)printf("b:%dn",y);if(z>0)printf("c:%dn",z);if(!1)printf("祝賀%c當(dāng)選冠軍n",k);/* 輸出最后結(jié)果*/ return 1;如果l返回主程序,若l為真值,則代表最后兩位候選人分?jǐn)?shù)還相同,主程序的do,while循環(huán),可以再次統(tǒng)計(jì)票數(shù),再次比較得分,直到選出最后的足球先生。6.程序代碼#include<stdio.h>#include<math.h> int start(char p3);void count(int a,char p口3,in

14、t pp);int result(int a,int b,int c);int m;void main()int a;m=3;int pp3=0,0,0;dochar p1003=0;/*p1003賦初值,清空 */a=start(p);count(a,p,pp);/* 計(jì)算得分 */while(result(pp0,pp1,pp2);int start(char p3)int re,i,j,v=0;printf("請(qǐng)輸入投票人數(shù)n");scanf("%d",&re);/*a為投票人數(shù)*/printf("請(qǐng)參加投票的人開始投票n&quo

15、t;);getchar();/* 輸入時(shí)以回車結(jié)束 */for(i=0;i<re;i+)int flag=0;for(j=0;j<m;j+)scanf("%c”,&pij);getchar();/* 輸入選舉投票*/if(pi0=pi111Pi1=pi211Pi0=pi2) flag=1;/*判斷一票上是否寫有兩個(gè)相同代號(hào)*/for(j=0;j<m;j+)if(P皿!='a'&&pij!='b'&&pij!='c') flag=1;/*判斷是否有 a,b,c以外的字母*/ if(

16、flag)printf("此票無(wú)效 n");v+;for(j=0;j<m;j+)p皿=0;/*若有以上情況,顯示此票無(wú)效",忽略此票,并記錄廢票數(shù)*/printf("作廢票數(shù)是%d票n",v);return re;void count(int a,char p口3,int pp口)int b=a,i;int x=0,y=0,z=0;/*'a','b','c'分別代表三個(gè)候選人x y z分別是他們的得分*/for(i=0;i<a;i+)if(pi0='a')x+=5;el

17、se if(pi1='a')x+=3;else if(pi2='a')x+=2;if(pi0='b')y+=5;else if(pi1='b')y+=3;else if(pi2='b')y+=2;if(pi0='c')z+=5;else if(pi1='c')z+=3;else if(pi2='c')z+=2;if(pi0='0') continue;PP0=x; ppi=y;PP2=z;int result(int a,int b,int c)int

18、 x,y,z,max=0,s=0,l=0;char k;x=a;y=b;z=c;max=x;k='a'if(max<y) max=y;k='b' if(max<z)max=z;k='c'if(max=x&&max=y|max=x&&max=z|max=y&&max=z) printf("請(qǐng)重新投票n");/*若最高票數(shù)有兩人相同,提示重新投票*/l=1;if(m=3)printf("三位候選人得分:n");elseprintf("兩位候選

19、人得分:n");if(l)m=2;if(x>0) printf("a:%dn",x);if(y>0) printf("b:%dn",y);if(z>0) printf("c:%dn",z); if(!l)printf("祝賀%c當(dāng)選冠軍n",k);/*輸出最后結(jié)果*/return l;7 .程序運(yùn)行結(jié)果1、主函數(shù)運(yùn)行,輸入選票信息3、統(tǒng)計(jì)選票,輸出結(jié)果8 .編程中遇到的困難及解決方法在編程的過(guò)程中,很容易出現(xiàn)一個(gè)問(wèn)題,就時(shí)少大括號(hào)“ ”的問(wèn)題。這是,error只有一個(gè),但是錯(cuò)誤的地方很多

20、,且都在括號(hào)處。按照計(jì)算機(jī)所指出的錯(cuò)誤位置尋找是不容易找出錯(cuò)誤的。直到整個(gè)程序看了一遍后才會(huì)發(fā)現(xiàn)是一個(gè)大括號(hào)的問(wèn)題。通常少的是“”或者“”,錯(cuò)誤位置會(huì)出現(xiàn)在缺少括號(hào)位置之后的其他大括號(hào)出現(xiàn)的地方。只要這種情況發(fā)生后,往前 找是否有大括號(hào)缺失就可以將問(wèn)題很快解決了。在幫同學(xué)修改程序的過(guò)程中,也遇到過(guò)一個(gè)問(wèn)題。在頭文件后定義了子函數(shù),可是之后 忘了編寫子函數(shù),在糾錯(cuò)時(shí),有的是不會(huì)發(fā)現(xiàn)錯(cuò)誤的,但是連接過(guò)程中就會(huì)報(bào)告出錯(cuò)。我覺 得在以后的編程過(guò)程中,最好用什么函數(shù)寫什么函數(shù),后者在寫完一個(gè)子函數(shù)后再在頭文件 底下聲明。9 .總結(jié)心得及良好建議此次實(shí)習(xí)為期一周,我學(xué)到了很多,也知道了很多的不足。通過(guò)老師的精心指導(dǎo)帶領(lǐng)下,我不僅獲得了很多新知識(shí),還好好復(fù)習(xí)了一下以前學(xué)的知識(shí)。在這之前,我們已經(jīng)對(duì)C語(yǔ)言這門課程學(xué)習(xí)了一個(gè)學(xué)期,對(duì)其有了一定的了解,但是也僅僅是停留在學(xué)習(xí)了解的圍,對(duì)里 面的好多東西還是很陌生,并不是很熟練,有著許多欠缺,更多的在運(yùn)用起

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論