您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页c语言课程设计投票程序系统设计

c语言课程设计投票程序系统设计

来源:暴趣科技网


中 国 地 质 大 学 本科生课程论文封面

课程名称 C语言课程设计 教师姓名 邵老师 本科生姓名 常堃 本科生学号 079 本科生专业 应用化学 所在院系 材化学院 类别: C.本科生 日期: 2011 年 7 月 6 日

1

课程设计评语

对课程论文的评语:

平时成绩: 总 成 绩:

课程论文成绩: 评阅人签名: 注:1、无评阅人签名成绩无效;

2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;

3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。

2

目 录

课程设计评语 .............................................. 错误!未定义书签。 目 录 ..................................................... 错误!未定义书签。 1.课程论文题目 ........................................... 错误!未定义书签。 2.程序设计思路 ........................................... 错误!未定义书签。 3.功能模块图 ............................................. 错误!未定义书签。 4.数据结构设计 ........................................... 错误!未定义书签。 5.算法设计 ............................................... 错误!未定义书签。 6.程序代码 ............................................... 错误!未定义书签。 7.程序运行结果 ........................................... 错误!未定义书签。 8.编程中遇到的困难及解决方法 ............................. 错误!未定义书签。 9.总结心得及良好建议 ..................................... 错误!未定义书签。 10.致谢 .................................................. 错误!未定义书签。

3

1.课程论文题目

投票程序 [要求]

设有代号为‘a’,‘b’,‘c’的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。

注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三位候选人得分并输入“祝贺X当选冠军”。

例如:投票人数:5 请参加投票的人开始投票: abc cab

caa 此票无效 cba bca

三位候选人得分: a:12 b:13 c:15

祝贺c当选冠军

[提示]

数据结构可用结构体数组,结构体成员包括代号、得分。或者采用二维数组,行方向对应一张投票,列方向对应各候选人得分。

2.程序设计思路

根据题目要求,首先要输入投票者人数,再输入投票者的选票,而选票不是都有效,若同一张票上写有两个相同的代号,则此票无效,所以要将有效的选票选出来,然后对选票进行统计得分,最终来比较得分,若有得分相同,则重新来选,最后得分最多的获胜,最终成为足球先生。

但是此程序还不够完善,可以增加以下程序,增强其功能: 1.记录废票数目,以便废票太多,影响选举公正。 2.若出现a,b,c以外的投票,应当将该票记为无效。

3.若出现最终前两名得分相同,应该还可以运行程序,使其重新投票,重新计票,直至最后选出足球先生。

4

3.功能模块图

足球先生评选程序 输入选票信息 输出结果 统计选票 输入选票信息:输入对足球先生候选人的选票 输出结果:输出最后足球先生的获得者 统计选票:对选票进行统计

4.数据结构设计

要输入投票人数,将其定义为re,选票信息可以用一个p[100][3]的数组来存放,re来控制投票信息数组的行数。

最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的目的。

每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现‘a’,‘b’,‘c’以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。判断完毕后,若出现废票,就将其中的票府赋值为‘0’。

返回投票人数re,留到后续函数使用。

5.算法设计

1、 主函数:

主函数只提供输入、处理和输出部分函数调用:

【程序】 #include<> #include<>

int start(char p[][3]); /****输入函数****/

5

void count(int a,char p[][3],int pp[]); /***统计函数***/

int result(int a,int b,int c); /***输出函数***/ int m; /*****全局变量 *****/

void main() /*****主函数*****/ {

int a; m=3;

int pp[3]={0,0,0}; do

{

char p[100][3]={{0}}; /******p[100][3]赋初值,清空******/ a=start(p);

count(a,p,pp); /******计算得分******/ }

while(result(pp[0],pp[1],pp[2])); /*****若m=2循环,直至选出足球先生*****/ }

2、 各功能模块设计 (1) 输入模块 【分析】

要输入投票人数,将其定义为re,选票信息可以用一个p[100][3]的数组来存放,re来控制投票信息数组的行数。

最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的目的。

每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现‘a’,‘b’,‘c’以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。判断完毕后,若出现废票,就将其中的票府赋值为‘0’。

返回投票人数re,留到后续函数使用。 【程序】

int start(char p[][3]) {

int re,i,j,v=0;

printf(\"请输入投票人数\\n\"); scanf(\"%d\

/******a为投票人数******/ printf(\"请参加投票的人开始投票\\n\"); getchar();

/******输入时以回车结束******/ for(i=0;i6

int flag=0;

for(j=0;jif(p[i][0]==p[i][1]||p[i][1]==p[i][2]||p[i][0]==p[i][2]) flag=1;

/******判断一张票上是否写有两个相同代号******/ for(j=0;jif(p[i][j]!='a'&&p[i][j]!='b'&&p[i][j]!='c') flag=1; }

/******判断是否有a,b,c以外的字母******/ if(flag) {

printf(\"此票无效\\n\"); v++;

for(j=0;j/******若有以上情况,显示\"此票无效\",忽略此票,并记录废票数******/

}

printf(\"作废票数是%d票\\n\ return re; }

(2) 统计模块 【分析】

功能上要求分别统计a,b,c三个人的得分,因而用x,y,z来存放,每一票中分别统计得分,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2,将如果出现废票,直接跳过不计,将最后结果分别放入x,y,z.。

引用主函数中的数组pp[3],将统计的x,y,z分别赋值到pp[0],pp[1],pp[2]中,这样就可以带回主函数中。

【程序】

void count(int a,char p[][3],int pp[]) {

int b=a,i;

int x=0,y=0,z=0;

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

if(p[i][0]=='a') x+=5;

else if(p[i][1]=='a') x+=3;

else if(p[i][2]=='a') x+=2; if(p[i][0]=='b') y+=5;

else if(p[i][1]=='b') y+=3;

else if(p[i][2]=='b') y+=2; if(p[i][0]=='c') z+=5;

else if(p[i][1]=='c') z+=3;

else if(p[i][2]=='c') z+=2; if(p[i][0]=='0') continue; } pp[0]=x; pp[1]=y; pp[2]=z; }

(3)输出模块 【分析】

功能上要求比较三位候选人的最后得分,三人得分分别为x,y,z。定义

max,将最高分赋值到max中。只有一位最高分时,输出三位候选人得分,显示“祝贺某人当选冠军”。

如果有两位最高分,则显示“请重新投票”,接着,令m=2,改变全局变量,只剩下两位候选者,显示三位候选人得分,重新投票统计。

如果两位候选人分数还相同,则再次循环,若不同,则显示两人得分, 并显示“祝贺某人当选冠军”。 【程序】

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=x; k='a';

8

if(maxmax=y; k='b'; } if(maxmax=z; k='c'; }

if(max==x&&max==y||max==x&&max==z||max==y&&max==z) {

printf(\"请重新投票\\n\");

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

printf(\"三位候选人得分:\\n\"); else

printf(\"两位候选人得分:\\n\"); if(l)

m=2; if(x>0)

printf(\"a:%d\\n\ if(y>0)

printf(\"b:%d\\n\ if(z>0)

printf(\"c:%d\\n\ if(!l)

printf(\"祝贺%c当选冠军\\n\ /******输出最后结果******/

return l; }

如果l返回主程序,若l为真值,则代表最后两位候选人分数还相同,主程序的do,while循环,可以再次统计票数,再次比较得分,直到选出最后的足球先生。

6.程序代码

#include<>

9

#include<>

int start(char p[][3]);

void count(int a,char p[][3],int pp[]); int result(int a,int b,int c); int m; void main() {

int a; m=3;

int pp[3]={0,0,0}; do

{

char p[100][3]={{0}}; /******p[100][3]赋初值,清空******/ a=start(p); count(a,p,pp);

/******计算得分******/ }

while(result(pp[0],pp[1],pp[2])); }

int start(char p[][3]) {

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

/******a为投票人数******/ printf(\"请参加投票的人开始投票\\n\"); getchar();

/******输入时以回车结束******/ for(i=0;iint flag=0;

for(j=0;jscanf(\"%c\ getchar(); /******输入选举投票******/

if(p[i][0]==p[i][1]||p[i][1]==p[i][2]||p[i][0]==p[i][2]) flag=1;

/******判断一张票上是否写有两个相同代号******/ for(j=0;j10

if(p[i][j]!='a'&&p[i][j]!='b'&&p[i][j]!='c') flag=1; }

/******判断是否有a,b,c以外的字母******/ if(flag) {

printf(\"此票无效\\n\"); v++;

for(j=0;jp[i][j]=0; }

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

}

printf(\"作废票数是%d票\\n\ 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'分别代表三个候选人 x y z分别是他们的得分******/ for(i=0;ielse if(p[i][1]=='a') x+=3;

else if(p[i][2]=='a') x+=2; if(p[i][0]=='b') y+=5;

else if(p[i][1]=='b') y+=3;

else if(p[i][2]=='b') y+=2; if(p[i][0]=='c') z+=5;

else if(p[i][1]=='c') z+=3;

else if(p[i][2]=='c') z+=2;

11

if(p[i][0]=='0')

continue; }

pp[0]=x; pp[1]=y;

pp[2]=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; max=x; k='a'; if(maxif(max==x&&max==y||max==x&&max==z||max==y&&max==z) {

printf(\"请重新投票\\n\");

/******若最高票数有两人相同,提示重新投票******/ l=1; }

if(m==3)

printf(\"三位候选人得分:\\n\"); else

printf(\"两位候选人得分:\\n\"); if(l)

m=2;

if(x>0) printf(\"a:%d\\n\

if(y>0) printf(\"b:%d\\n\

if(z>0)

12

printf(\"c:%d\\n\ if(!l)

printf(\"祝贺%c当选冠军\\n\

/******输出最后结果******/

return l; }

7.程序运行结果

1、主函数运行,输入选票信息

3、 统计选票,输出结果

13

8.编程中遇到的困难及解决方法

在编程的过程中,很容易出现一个问题,就时少大括号“}”的问题。这是,error只有一个,但是错误的地方很多,且都在括号处。按照计算机所指出的错误位置寻找是不容易找出错误的。直到整个程序看了一遍后才会发现是一个大括号的问题。通常少的是“{”或者“}”,错误位置会出现在缺少括号位置之后的其他大括号出现的地方。只要这种情况发生后,往前找是否有大括号缺失就可以将问题很快解决了。

在帮同学修改程序的过程中,也遇到过一个问题。在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下声明。

9.总结心得及良好建议

此次实习为期一周,我学到了很多,也知道了很多的不足。通过老师的精心指导带领下,我不仅获得了很多新知识,还好好复习了一下以前学的知识。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。

C语言课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C

14

语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。

我所编的虽然只是一个小程序,但是每一步的编的过程,让我懂得很多。重温一下C语言,因为过了计算机二级,因而编程比较容易懂,但是通过练习,发现理论与实际的差距。编程从一开始全部编到一个main函数中到,最后逐个分块,到添加功能,一点一点的进步让我很欣喜,对编程的兴趣也更加浓厚。

此次实习,不仅学到了有关c语言的知识,还学到了一些有关c++方面的知识,动手能力也得到了历练,是很好的一次机会!

10.致谢

在C语言的实习过程中,让我巩固了C语言的基础知识,以前从来没有这样编过完整的程序,实习让我有这样的一个机会,自己编写程序。我觉得自己说学的东西不多,但是可以将它们运用出来。在实习过程中,首先我要感谢我的老师,一个是带我走进C语言大门的曹老师,因为她,我开始喜欢C语言,把所学知识掌握牢固。同时,在这次实习中,邵老师对我的帮助对我最难忘。题目本身是很简单的,在老师的教学风格影响下,我在编写完最初程序后,有自己添加了很多功能。

总之,我真诚的感谢在这次实习中给过我帮助的人!

15

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务