C语言课程设计 投票程序系统设计.docx

上传人:scccc 文档编号:12098934 上传时间:2021-12-01 格式:DOCX 页数:15 大小:49.59KB
返回 下载 相关 举报
C语言课程设计 投票程序系统设计.docx_第1页
第1页 / 共15页
C语言课程设计 投票程序系统设计.docx_第2页
第2页 / 共15页
C语言课程设计 投票程序系统设计.docx_第3页
第3页 / 共15页
C语言课程设计 投票程序系统设计.docx_第4页
第4页 / 共15页
C语言课程设计 投票程序系统设计.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《C语言课程设计 投票程序系统设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 投票程序系统设计.docx(15页珍藏版)》请在三一文库上搜索。

1、.中 国 地 质 大 学本科生课程论文封面课程名称 C语言课程设计 教师姓名 邵老师 本科生姓名 常堃 本科生学号 20091001079 本科生专业 应用化学 所在院系 材化学院 类别: C.本科生 日期: 2011 年 7 月 6 日 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录课程设计评语2目 录31课程论文题目42程序设计思路43功能模块图54数据结构设计55算法设计66程序代码137程序运行结果228编程中遇到的困

2、难及解决方法259总结心得及良好建议2610致谢261课程论文题目投票程序要求设有代号为a,b,c的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三位候选人得分并输入“祝贺X当选冠军”。例如:投票人数:5请参加投票的人开始投票:abccabcaa 此票无效cbabca三位候选人得分:a:12b:13c:15祝贺c当选冠军 提示数据结构可用结构体数组,结构体成员包括代号、得

3、分。或者采用二维数组,行方向对应一张投票,列方向对应各候选人得分。2程序设计思路根据题目要求,首先要输入投票者人数,再输入投票者的选票,而选票不是都有效,若同一张票上写有两个相同的代号,则此票无效,所以要将有效的选票选出来,然后对选票进行统计得分,最终来比较得分,若有得分相同,则重新来选,最后得分最多的获胜,最终成为足球先生。 但是此程序还不够完善,可以增加以下程序,增强其功能:1.记录废票数目,以便废票太多,影响选举公正。2.若出现a,b,c以外的投票,应当将该票记为无效。3.若出现最终前两名得分相同,应该还可以运行程序,使其重新投票,重新计票,直至最后选出足球先生。3功能模块图足

4、球先生评选程序输入选票信息输出结果统计选票输入选票信息:输入对足球先生候选人的选票输出结果:输出最后足球先生的获得者统计选票:对选票进行统计4数据结构设计要输入投票人数,将其定义为re,选票信息可以用一个p1003的数组来存放,re来控制投票信息数组的行数。最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的目的。每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现a,b,c以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。判断完毕后,若出现废票,就将其中的票府赋值为0。返回投票人数re,留到后续函数使用。5算法设计1、

5、 主函数:主函数只提供输入、处理和输出部分函数调用:【程序】#include<stdio.h>#include<math.h>int start(char p3);                 /*输入函数*/void count(int a,char p3,int pp);       /*统计函数*/int result(int a,int b,

6、int c);                /*输出函数*/int m;      /*全局变量 */void main()                   /*主函数*/   

7、60;           int a;         m=3;        int pp3=0,0,0;        do                

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

9、 /*计算得分*/                   while(result(pp0,pp1,pp2);/*若m=2循环,直至选出足球先生*/2、 各功能模块设计(1)   输入模块【分析】要输入投票人数,将其定义为re,选票信息可以用一个p1003的数组来存放,re来控制投票信息数组的行数。最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的目的。每输入一行,就开始判断是否

10、一张票上写有两个相同代号,或者是出现a,b,c以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。判断完毕后,若出现废票,就将其中的票府赋值为0。返回投票人数re,留到后续函数使用。 【程序】       int start(char p3)            int re,i,j,v=0;        &#

11、160; printf("请输入投票人数n");          scanf("%d",&re);           /*a为投票人数*/                printf("请参加投票的人开始投票n&quo

12、t;);       getchar();        /*输入时以回车结束*/        for(i=0;i<re;i+)                     int flag=0; 

13、0;       for(j=0;j<m;j+)                scanf("%c",&pij);             getchar();       &

14、#160; /*输入选举投票*/        if(pi0=pi1|pi1=pi2|pi0=pi2)         flag=1;    /*判断一张票上是否写有两个相同代号*/        for(j=0;j<m;j+)          

15、60;     if(pij!='a'&&pij!='b'&&pij!='c')         flag=1;          /*判断是否有a,b,c以外的字母*/         if(flag)   

16、                   printf("此票无效n");            v+;            for(j=0;j<m;j+)   &#

17、160;        pij=0;                /*若有以上情况,显示"此票无效",忽略此票,并记录废票数*/                     

18、0;    printf("作废票数是%d票n",v);          return re; (2)   统计模块【分析】功能上要求分别统计a,b,c三个人的得分,因而用x,y,z来存放,每一票中分别统计得分,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2,将如果出现废票,直接跳过不计,将最后结果分别放入x,y,z.。引用主函数中的数组pp3,将统计的x,y,z分别赋值到pp0,pp1,pp2中,这样就可以带回主

19、函数中。 【程序】 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分别是他们的得分*/      for(i=0;i<a;i+)   

20、;                          if(pi0='a')            x+=5;           else if(pi1='a

21、9;)             x+=3;            else if(pi2='a')                 x+=2;      

22、     if(pi0='b')            y+=5;           else if(pi1='b')              y+=3;  

23、60;         else if(pi2='b')               y+=2;           if(pi0='c')          

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

25、60;  else if(pi2='c')                  z+=2;                if(pi0='0')         

26、0;   continue;                                 pp0=x;              pp1=y; &

27、#160;            pp2=z; (3)输出模块【分析】功能上要求比较三位候选人的最后得分,三人得分分别为x,y,z。定义max,将最高分赋值到max中。只有一位最高分时,输出三位候选人得分,显示“祝贺某人当选冠军”。        如果有两位最高分,则显示“请重新投票”,接着,令m=2,改变全局变量,只剩下两位候选者,显示三位候选人得分,重新投票统计。如果两位候选人分数还相同,则再次循环,若

28、不同,则显示两人得分,并显示“祝贺某人当选冠军”。 【程序】 int 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

29、=x;          k='a'          if(max<y)                             max=y; &

30、#160;              k='b'                        if(max<z)          &#

31、160;                 max=z;              k='c'                    &

32、#160;    if(max=x&&max=y|max=x&&max=z|max=y&&max=z)                               printf("请重新投票n");  

33、    /*若最高票数有两人相同,提示重新投票*/                l=1;                          if(m=3)   

34、;         printf("三位候选人得分:n");           else            printf("两位候选人得分:n");         

35、0;       if(l)                     m=2;                if(x>0)     

36、              printf("a:%dn",x);                if(y>0)               &#

37、160;   printf("b:%dn",y);                if(z>0)                   printf("c:%dn",z);   

38、;            if(!l)              printf("祝贺%c当选冠军n",k);                 /*输出最后结果*/  &

39、#160;                          return l; 如果l返回主程序,若l为真值,则代表最后两位候选人分数还相同,主程序的do,while循环,可以再次统计票数,再次比较得分,直到选出最后的足球先生。6程序代码#include<stdio.h>#include<math.h> int

40、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;        int pp3=0,0,0;       

41、do                       char p1003=0;     /*p1003赋初值,清空*/          a=start(p);        

42、60; count(a,p,pp);          /*计算得分*/                         while(result(pp0,pp1,pp2);  int start(char p3)    

43、0;                    int re,i,j,v=0;          printf("请输入投票人数n");          scanf("%d",&re);  &#

44、160;        /*a为投票人数*/         printf("请参加投票的人开始投票n");       getchar();        /*输入时以回车结束*/       for(i=0;i<re;i+) &#

45、160;                    int flag=0;         for(j=0;j<m;j+)                    

46、60;     scanf("%c",&pij);             getchar();         /*输入选举投票*/        if(pi0=pi1|pi1=pi2|pi0=pi2)     

47、;    flag=1;    /*判断一张票上是否写有两个相同代号*/        for(j=0;j<m;j+)                      if(pij!='a'&&pij!='b'&&

48、amp;pij!='c')                     flag=1;                          

49、  /*判断是否有a,b,c以外的字母*/              if(flag)                        printf("此票无效n");    

50、60;       v+;            for(j=0;j<m;j+)                            pij=0;

51、60;               /*若有以上情况,显示“此票无效”,忽略此票,并记录废票数*/                                 

52、60;    printf("作废票数是%d票n",v);                     return re;   void count(int a,char p3,int pp)         int b=a,i;  

53、0;   int x=0,y=0,z=0;     /*'a','b','c'分别代表三个候选人 x y z分别是他们的得分*/      for(i=0;i<a;i+)                         

54、60;     if(pi0='a')            x+=5;           else if(pi1='a')             x+=3;    

55、0;       else if(pi2='a')                 x+=2;           if(pi0='b')          

56、  y+=5;           else if(pi1='b')              y+=3;            else if(pi2='b')    

57、0;          y+=2;           if(pi0='c')               z+=5;            &

58、#160; else if(pi1='c')                z+=3;               else if(pi2='c')            

59、60;     z+=2;              if(pi0='0')                       continue;      

60、                            pp0=x;              pp1=y;         &#

61、160;    pp2=z;           int 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;  &#

62、160;       max=x;          k='a'          if(max<y)                      &

63、#160;        max=y;                k='b'                          if(max

64、<z)                              max=z;              k='c'     &

65、#160;                     if(max=x&&max=y|max=x&&max=z|max=y&&max=z)                     &#

66、160;           printf("请重新投票n");      /*若最高票数有两人相同,提示重新投票*/                l=1;          &

67、#160;                       if(m=3)                        printf("三位候选人得分:n"); 

68、                else                        printf("两位候选人得分:n");       

69、0;         if(l)                     m=2;                    

70、;        if(x>0)                   printf("a:%dn",x);                  &

71、#160;         if(y>0)                   printf("b:%dn",y);                

72、60;           if(z>0)                   printf("c:%dn",z);               

73、; if(!l)                               printf("祝贺%c当选冠军n",k);               

74、;              /*输出最后结果*/                             return l;7程序运行结果1、主函数运行,输入选票信息3、 统计选票,输出结果8编程中遇到的困难

75、及解决方法在编程的过程中,很容易出现一个问题,就时少大括号“”的问题。这是,error只有一个,但是错误的地方很多,且都在括号处。按照计算机所指出的错误位置寻找是不容易找出错误的。直到整个程序看了一遍后才会发现是一个大括号的问题。通常少的是“”或者“”,错误位置会出现在缺少括号位置之后的其他大括号出现的地方。只要这种情况发生后,往前找是否有大括号缺失就可以将问题很快解决了。在帮同学修改程序的过程中,也遇到过一个问题。在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数

76、后再在头文件底下声明。9总结心得及良好建议此次实习为期一周,我学到了很多,也知道了很多的不足。通过老师的精心指导带领下,我不仅获得了很多新知识,还好好复习了一下以前学的知识。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。C语言课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会

77、自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。我所编的虽然只是一个小程序,但是每一步的编的过程,让我懂得很多。重温一下C语言,因为过了计算机二级,因而编程比较容易懂,但是通过练习,发现理论与实际的差距。编程从一开始全部编到一个main函数中到,最后逐个分块,到添加功能,一点一点的进步让我很欣喜,对编程的兴趣也更加浓厚。此次实习,不仅学到了有关c语言的知识,还学到了一些有关c+方面的知识,动手能力也得到了历练,是很好的一次机会!10致谢在C语言的实习过程中,让我巩固了C语言的基础知识,以前从来没有这样编过完整的程序,实习让我有这样的一个机会,自己独立编写程序。我觉得自己说学的东西不多,但是可以将它们运用出来。在实习过程中,首先我要感谢我的老师,一个是带我走进C语言大门的曹老师,因为她,我开始喜欢C语言,把所学知识掌握牢固。同时,在这次实习中,邵老师对我的帮助对我最难忘。题目本身是很简单的,在老师的教学风格影响下,我在编写完最初程序后,有自己添加了很多功能。总之,我真诚的感谢在这次实习中给过我帮助的人!;.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1