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

下載本文檔

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

文檔簡介

1、目 錄課程設(shè)計評語2目 錄31課程論文題目42程序設(shè)計思路43功能模塊圖54數(shù)據(jù)結(jié)構(gòu)設(shè)計55算法設(shè)計66程序代碼137程序運行結(jié)果228編程中遇到的困難及解決方法259總結(jié)心得及良好建議2610致謝261課程論文題目投票程序要求設(shè)有代號為a,b,c的三個足球先生候選人,根據(jù)投票者在選票上對他們編號的填寫順序分別記分5,3,2。請編程從鍵盤上輸入投票人數(shù)及投票結(jié)果,統(tǒng)計他們的得分,并輸出哪位當(dāng)選足球先生。注意:若同一張票上寫有兩個相同的代號,則顯示“此票無效”,若最終前兩名得分相同應(yīng)顯示“重新投票”,否則顯示三位候選人得分并輸入“祝賀x當(dāng)選冠軍”。例如:投票人數(shù):5請參加投票的人開始投票:abc

2、cabcaa 此票無效cbabca三位候選人得分:a:12b:13c:15祝賀c當(dāng)選冠軍 提示數(shù)據(jù)結(jié)構(gòu)可用結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體成員包括代號、得分?;蛘卟捎枚S數(shù)組,行方向?qū)?yīng)一張投票,列方向?qū)?yīng)各候選人得分。2程序設(shè)計思路根據(jù)題目要求,首先要輸入投票者人數(shù),再輸入投票者的選票,而選票不是都有效,若同一張票上寫有兩個相同的代號,則此票無效,所以要將有效的選票選出來,然后對選票進(jìn)行統(tǒng)計得分,最終來比較得分,若有得分相同,則重新來選,最后得分最多的獲勝,最終成為足球先生。 但是此程序還不夠完善,可以增加以下程序,增強(qiáng)其功能:1.記錄廢票數(shù)目,以便廢票太多,影響選舉公正。2.若出現(xiàn)a

3、,b,c以外的投票,應(yīng)當(dāng)將該票記為無效。3.若出現(xiàn)最終前兩名得分相同,應(yīng)該還可以運行程序,使其重新投票,重新計票,直至最后選出足球先生。3功能模塊圖足球先生評選程序輸入選票信息輸出結(jié)果統(tǒng)計選票輸入選票信息:輸入對足球先生候選人的選票輸出結(jié)果:輸出最后足球先生的獲得者統(tǒng)計選票:對選票進(jìn)行統(tǒng)計4數(shù)據(jù)結(jié)構(gòu)設(shè)計要輸入投票人數(shù),將其定義為re,選票信息可以用一個p1003的數(shù)組來存放,re來控制投票信息數(shù)組的行數(shù)。最開始定義一個全局變量m=3,來表示候選者人數(shù)。這樣來控制數(shù)列數(shù),達(dá)到控制輸入的目的。每輸入一行,就開始判斷是否一張票上寫有兩個相同代號,或者是出現(xiàn)a,b,c以外的投票結(jié)果,如果出現(xiàn)這種情況,

4、就將票作廢,并記錄作廢票數(shù)。定義變量v記錄作廢票數(shù)。判斷完畢后,若出現(xiàn)廢票,就將其中的票府賦值為0。返回投票人數(shù)re,留到后續(xù)函數(shù)使用。5算法設(shè)計1、 主函數(shù):主函數(shù)只提供輸入、處理和輸出部分函數(shù)調(diào)用:【程序】#include<stdio.h>#include<math.h>int start(char p3);                 /*輸入函數(shù)*/void count(int a,char p3,i

5、nt pp);       /*統(tǒng)計函數(shù)*/int result(int a,int b,int c);                /*輸出函數(shù)*/int m;      /*全局變量 */void main()          &#

6、160;        /*主函數(shù)*/               int a;         m=3;        int pp3=0,0,0;        do   &#

7、160;                   char p1003=0;     /*p1003賦初值,清空*/          a=start(p);          count(a,p,pp);

8、0;              /*計算得分*/                   while(result(pp0,pp1,pp2);/*若m=2循環(huán),直至選出足球先生*/2、 各功能模塊設(shè)計(1)   輸入模塊【分析】要輸入投票人數(shù),將其定義為re,選票信息可以用一個p1003的數(shù)組

9、來存放,re來控制投票信息數(shù)組的行數(shù)。最開始定義一個全局變量m=3,來表示候選者人數(shù)。這樣來控制數(shù)列數(shù),達(dá)到控制輸入的目的。每輸入一行,就開始判斷是否一張票上寫有兩個相同代號,或者是出現(xiàn)a,b,c以外的投票結(jié)果,如果出現(xiàn)這種情況,就將票作廢,并記錄作廢票數(shù)。定義變量v記錄作廢票數(shù)。判斷完畢后,若出現(xiàn)廢票,就將其中的票府賦值為0。返回投票人數(shù)re,留到后續(xù)函數(shù)使用。 【程序】       int start(char p3)         

10、60;  int re,i,j,v=0;          printf("請輸入投票人數(shù)n");          scanf("%d",&re);           /*a為投票人數(shù)*/      

11、0;         printf("請參加投票的人開始投票n");       getchar();        /*輸入時以回車結(jié)束*/        for(i=0;i<re;i+)          &#

12、160;          int flag=0;         for(j=0;j<m;j+)                scanf("%c",&pij);        

13、60;    getchar();         /*輸入選舉投票*/        if(pi0=pi1|pi1=pi2|pi0=pi2)         flag=1;    /*判斷一張票上是否寫有兩個相同代號*/        f

14、or(j=0;j<m;j+)                if(pij!='a'&&pij!='b'&&pij!='c')         flag=1;          /*判斷是否有a,b,c以外的字母*/

15、         if(flag)                      printf("此票無效n");            v+;     

16、       for(j=0;j<m;j+)            pij=0;                /*若有以上情況,顯示"此票無效",忽略此票,并記錄廢票數(shù)*/       

17、60;                  printf("作廢票數(shù)是%d票n",v);          return re; (2)   統(tǒng)計模塊【分析】功能上要求分別統(tǒng)計a,b,c三個人的得分,因而用x,y,z來存放,每一票中分別統(tǒng)計得分,根據(jù)投票者在選票上對他們編號的填寫順序分別記分5,3,2,將如果出

18、現(xiàn)廢票,直接跳過不計,將最后結(jié)果分別放入x,y,z.。引用主函數(shù)中的數(shù)組pp3,將統(tǒng)計的x,y,z分別賦值到pp0,pp1,pp2中,這樣就可以帶回主函數(shù)中。 【程序】 void count(int a,char p3,int pp)             int b=a,i;      int x=0,y=0,z=0;/*'a','b','c'分別代表三個候選人 x y z分

19、別是他們的得分*/      for(i=0;i<a;i+)                             if(pi0='a')            x+=5; &

20、#160;         else if(pi1='a')             x+=3;            else if(pi2='a')          

21、60;      x+=2;           if(pi0='b')            y+=5;           else if(pi1='b')    

22、          y+=3;            else if(pi2='b')               y+=2;          

23、; if(pi0='c')               z+=5;              else if(pi1='c')                z+=3;

24、               else if(pi2='c')                  z+=2;                if

25、(pi0='0')             continue;                                 pp0=x;   

26、;           pp1=y;              pp2=z; (3)輸出模塊【分析】功能上要求比較三位候選人的最后得分,三人得分分別為x,y,z。定義max,將最高分賦值到max中。只有一位最高分時,輸出三位候選人得分,顯示“祝賀某人當(dāng)選冠軍”。        如果有兩位最

27、高分,則顯示“請重新投票”,接著,令m=2,改變?nèi)肿兞?,只剩下兩位候選者,顯示三位候選人得分,重新投票統(tǒng)計。如果兩位候選人分?jǐn)?shù)還相同,則再次循環(huán),若不同,則顯示兩人得分,并顯示“祝賀某人當(dāng)選冠軍”。 【程序】 int result(int a,int b,int c)       int x,y,z,max=0,s=0,l=0;       char k;        &#

28、160; x=a;y=b;z=c;          max=x;          k='a'          if(max<y)                 

29、            max=y;                k='b'                       

30、 if(max<z)                            max=z;              k='c'      

31、                   if(max=x&&max=y|max=x&&max=z|max=y&&max=z)                        &

32、#160;      printf("請重新投票n");      /*若最高票數(shù)有兩人相同,提示重新投票*/                l=1;                

33、0;         if(m=3)            printf("三位候選人得分:n");           else            printf("

34、兩位候選人得分:n");                 if(l)                     m=2;         &#

35、160;      if(x>0)                   printf("a:%dn",x);                if(y>0)   

36、;                printf("b:%dn",y);                if(z>0)             &

37、#160;     printf("c:%dn",z);               if(!l)              printf("祝賀%c當(dāng)選冠軍n",k);       

38、60;         /*輸出最后結(jié)果*/                             return l; 如果l返回主程序,若l為真值,則代表最后兩位候選人分?jǐn)?shù)還相同,主程序的do,while循環(huán),可以再次統(tǒng)計票數(shù),再次比較

39、得分,直到選出最后的足球先生。6程序代碼#include<stdio.h>#include<math.h> int start(char p3);void count(int a,char p3,int pp);int result(int a,int b,int c); int m; void main()         int a;         m=3;   &#

40、160;    int pp3=0,0,0;        do                       char p1003=0;     /*p1003賦初值,清空*/       

41、   a=start(p);          count(a,p,pp);          /*計算得分*/                         while(res

42、ult(pp0,pp1,pp2);  int start(char p3)                         int re,i,j,v=0;          printf("請輸入投票人數(shù)n");    

43、      scanf("%d",&re);           /*a為投票人數(shù)*/         printf("請參加投票的人開始投票n");       getchar();        /

44、*輸入時以回車結(jié)束*/       for(i=0;i<re;i+)                      int flag=0;         for(j=0;j<m;j+)        

45、                  scanf("%c",&pij);             getchar();         /*輸入選舉投票*/    

46、    if(pi0=pi1|pi1=pi2|pi0=pi2)         flag=1;    /*判斷一張票上是否寫有兩個相同代號*/        for(j=0;j<m;j+)                 &

47、#160;    if(pij!='a'&&pij!='b'&&pij!='c')                     flag=1;            

48、0;               /*判斷是否有a,b,c以外的字母*/              if(flag)                    &#

49、160;   printf("此票無效n");            v+;            for(j=0;j<m;j+)                &

50、#160;           pij=0;                /*若有以上情況,顯示“此票無效”,忽略此票,并記錄廢票數(shù)*/                   &#

51、160;                  printf("作廢票數(shù)是%d票n",v);                     return re;   void count(int a,char

52、p3,int pp)         int b=a,i;      int x=0,y=0,z=0;     /*'a','b','c'分別代表三個候選人 x y z分別是他們的得分*/      for(i=0;i<a;i+)           &#

53、160;                   if(pi0='a')            x+=5;           else if(pi1='a')     &

54、#160;       x+=3;            else if(pi2='a')                 x+=2;           if(p

55、i0='b')            y+=5;           else if(pi1='b')              y+=3;       &#

56、160;    else if(pi2='b')               y+=2;           if(pi0='c')               z+=

57、5;              else if(pi1='c')                z+=3;               else if(pi2='c&

58、#39;)                  z+=2;              if(pi0='0')                

59、60;      continue;                                   pp0=x;           

60、   pp1=y;              pp2=z;           int result(int a,int b,int c)       int x,y,z,max=0,s=0,l=0;       char k; 

61、         x=a;y=b;z=c;          max=x;          k='a'          if(max<y)        

62、                       max=y;                k='b'            

63、              if(max<z)                              max=z;         

64、;     k='c'                           if(max=x&&max=y|max=x&&max=z|max=y&&max=z)       &

65、#160;                         printf("請重新投票n");      /*若最高票數(shù)有兩人相同,提示重新投票*/             

66、60;  l=1;                                  if(m=3)                

67、;        printf("三位候選人得分:n");                 else                        p

68、rintf("兩位候選人得分:n");                 if(l)                     m=2;       &#

69、160;                    if(x>0)                   printf("a:%dn",x);                       

溫馨提示

  • 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

提交評論