C语言课程设计-投票程序系统设计
课程设计评语错误!未定义书签。 目录1 1. 课程论文题目2 2. 程序设计思路2 3. 功能模块图3 4. 数据结构设计3 5. 算法设计3 6. 程序代码7 7. 程序运行结果11 8. 编程中遇到的困难及解决方法12 9. 总结心得及良好建议12 致谢12 1. 课程论文题目 投票程序 [要求] 设有代号为 a , b,,的二个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分 别记分5, 3, 2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。 注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投 票”,否则显示三位候选人得分并输入“祝贺X当选冠军”。 例如:投票人数:5 请参加投票的人开始投票: abc cab caa此票无效 cba bca 三位候选人得分: a: 12 b: 13 c: 15 祝贺c当选冠军 [提示] 数据结构可用结构体数组,结构体成员包括代号、得分。或者采用二维数组,行方向对应 一张投票,列方向对应各候选人得分。 2. 程序设计思路 根据题目要求,首先要输入投票者人数,再输入投票者的选票,而选票不是都有效,若同 一张票上写有两个相同的代号,则此票无效,所以要将有效的选票选出来,然后对选票进行 统计得分,最终来比较得分,若有得分相同,则重新来选,最后得分最多的获胜,最终成为 足球先生。 但是此程序还不够完善,可以增加以下程序,增强其功能: 1. 记录废票数目,以便废票太多,影响选举公正。 2. 若出现a, b, c以外的投票,应当将该票记为无效。 3. 若出现最终前两名得分相同,应该还可以运行程序,使其重新投票,重新计票,直至最 后选出足球先生。 3. 功能模块图 输入选票信息:输入对足球先生候选人的选票 输出结果:输出最后足球先生的获得者 统计选票:对选票进行统计 4. 数据结构设计 要输入投票人数,将其定义为re,选票信息可以用一个p[100]⑶的数组来存放,re来控 制投票信息数组的彳丁数。 最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的 目的。 每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现 a/b .-c 以外的 投票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。 判断完毕后,若出现废票,就将其中的票府赋值为0。 返回投票人数re,留到后续函数使用。 5. 算法设计 1、主函数: 主函数只提供输入、处理和输出部分函数调用: 【程序】 #include #include int start(char p[]⑶);/****输入函数****/ 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[l] ,pp[2])); /*****若m=2循环,直至选出足球先生*****/ } 2、各功能模块设计 (1) 输入模块 【分析】 要输入投票人数,将其定义为re,选票信息可以用一个p[100][3]的数组来存放,re来控制 投票信息数组的行数。 最开始定义一个全局变量m=3,来表示候选者人数。这样来控制数列数,达到控制输入的 目的。 每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现 aTbTJ以外的投 票结果,如果出现这种情况,就将票作废,并记录作废票数。定义变量v记录作废票数。判 断完毕后,若出现废票,就将其中的票府赋值为 0為 返回投票人数re,留到后续函数使用。 【程序】 int start(char p[][3]) int re,i,j,v=O; printfC请输入投票人数\n“); scanf(“ %d“ , printf(“请参加投票的人开始投票\n”); getchar(); /******输入时以回车结束******/ for(i=0;i