C语言课程设计投票程序系统设计_第1页
C语言课程设计投票程序系统设计_第2页
C语言课程设计投票程序系统设计_第3页
C语言课程设计投票程序系统设计_第4页
C语言课程设计投票程序系统设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录课程设计评语2目 录31课程论文题目42程序设计思路43功能模块图54数据结构设计55算法设计66程序代码137程序运行结果228编程中遇到的困难及解决方法259总结心得及良好建议2610致谢261课程论文题目投票程序要求设有代号为a,b,c的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三位候选人得分并输入“祝贺x当选冠军”。例如:投票人数:5请参加投票的人开始投票:abc

2、cabcaa 此票无效cbabca三位候选人得分:a:12b:13c:15祝贺c当选冠军 提示数据结构可用结构体数组,结构体成员包括代号、得分。或者采用二维数组,行方向对应一张投票,列方向对应各候选人得分。2程序设计思路根据题目要求,首先要输入投票者人数,再输入投票者的选票,而选票不是都有效,若同一张票上写有两个相同的代号,则此票无效,所以要将有效的选票选出来,然后对选票进行统计得分,最终来比较得分,若有得分相同,则重新来选,最后得分最多的获胜,最终成为足球先生。 但是此程序还不够完善,可以增加以下程序,增强其功能:1.记录废票数目,以便废票太多,影响选举公正。2.若出现a

3、,b,c以外的投票,应当将该票记为无效。3.若出现最终前两名得分相同,应该还可以运行程序,使其重新投票,重新计票,直至最后选出足球先生。3功能模块图足球先生评选程序输入选票信息输出结果统计选票输入选票信息:输入对足球先生候选人的选票输出结果:输出最后足球先生的获得者统计选票:对选票进行统计4数据结构设计要输入投票人数,将其定义为re,选票信息可以用一个p1003的数组来存放,re来控制投票信息数组的行数。最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的目的。每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现a,b,c以外的投票结果,如果出现这种情况,

4、就将票作废,并记录作废票数。定义变量v记录作废票数。判断完毕后,若出现废票,就将其中的票府赋值为0。返回投票人数re,留到后续函数使用。5算法设计1、 主函数:主函数只提供输入、处理和输出部分函数调用:【程序】#include<stdio.h>#include<math.h>int start(char p3);                 /*输入函数*/void count(int a,char p3,i

5、nt pp);       /*统计函数*/int result(int a,int b,int c);                /*输出函数*/int m;      /*全局变量 */void main()          &#

6、160;        /*主函数*/               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循环,直至选出足球先生*/2、 各功能模块设计(1)   输入模块【分析】要输入投票人数,将其定义为re,选票信息可以用一个p1003的数组

9、来存放,re来控制投票信息数组的行数。最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的目的。每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现a,b,c以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。判断完毕后,若出现废票,就将其中的票府赋值为0。返回投票人数re,留到后续函数使用。 【程序】       int start(char p3)         

10、60;  int re,i,j,v=0;          printf("请输入投票人数n");          scanf("%d",&re);           /*a为投票人数*/      

11、0;         printf("请参加投票的人开始投票n");       getchar();        /*输入时以回车结束*/        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;                /*若有以上情况,显示"此票无效",忽略此票,并记录废票数*/       

17、60;                  printf("作废票数是%d票n",v);          return re; (2)   统计模块【分析】功能上要求分别统计a,b,c三个人的得分,因而用x,y,z来存放,每一票中分别统计得分,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2,将如果出

18、现废票,直接跳过不计,将最后结果分别放入x,y,z.。引用主函数中的数组pp3,将统计的x,y,z分别赋值到pp0,pp1,pp2中,这样就可以带回主函数中。 【程序】 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中。只有一位最高分时,输出三位候选人得分,显示“祝贺某人当选冠军”。        如果有两位最

27、高分,则显示“请重新投票”,接着,令m=2,改变全局变量,只剩下两位候选者,显示三位候选人得分,重新投票统计。如果两位候选人分数还相同,则再次循环,若不同,则显示两人得分,并显示“祝贺某人当选冠军”。 【程序】 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");      /*若最高票数有两人相同,提示重新投票*/                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当选冠军n",k);       

38、60;         /*输出最后结果*/                             return l; 如果l返回主程序,若l为真值,则代表最后两位候选人分数还相同,主程序的do,while循环,可以再次统计票数,再次比较

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("请输入投票人数n");    

43、      scanf("%d",&re);           /*a为投票人数*/         printf("请参加投票的人开始投票n");       getchar();        /

44、*输入时以回车结束*/       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;                /*若有以上情况,显示“此票无效”,忽略此票,并记录废票数*/                   &#

51、160;                  printf("作废票数是%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");      /*若最高票数有两人相同,提示重新投票*/             

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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论