投票程序设计—C语言课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
投票程序
1.题目与要求:
题目要求
设有代号为’a’,’b’,’c’的三个个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。请注意;若同一张票上写有两个相同代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三个候选者得分并输出“祝贺X当选冠军!”。
例如:投票人数:5
输入投票内容:
a b c
c a b
c b a
c a a 该票无效!
c b a
三位候选人得分:
a: 12
b: 13
c: 15
祝贺c当选冠军!
1.1问题提出与要求:
需求分析
本程序中要求候选人有编号和得票数,且每张选票上要同时写上三个候选人的编号,最终输出谁是获胜者。因此可以用结构体来存储候选人的信息。唱票中要求相对应的编号分别记分为5、3、2,因此在记分程序中可以用一个条件表达式来进行统计得分。统计结果中若前两名有相同的得票数则要求重新投票。为此要求把三个侯选人的总得分进行比较,则可以用一个判断语句来判断,简单明了。
数据结构可用结构体数组,结构体成员包括代号、得分。或者采用二维数组,行方向对应一张投票,列方向对应各候选人得分。
2.功能实现设计:
2.1总体设计——程序流程图
流程图:
2.2详细设计:
<1>程序源代码:
#include
main()
{
int finish=0,first,seccond,i,scores[3],num;
char s1,s2,s3;
printf("*************************************************** ****\n");
printf("*****Welcome to use footballman voting programe! ******\n");
printf("*************************************************** ****\n");
while(finish==0) /*****输入模块*****/
{
for(i=0;i<3;i++) scores[i]=0;
printf("请输入投票人数: \n"); /*****有多少人投票*****/
scanf("%d",&num); /*****输入投票人数
*****/
getchar();
printf("请输入投票内容(选择您所需的abc候选人次序): \n"); /*****选票的内容*****/
for(i=0;i { scanf("%c %c %c",&s1,&s2,&s3); /*****输入投票内容 *****/ getchar(); if(s1==s2||s1==s3||s2==s3) printf("该票无效!\n"); /*****该票无效 *****/ if(s1!=s2 && s1!=s3 && s2!=s3 && (s1>='a' && s1<='c') && (s2>='a' && s2<='c') && (s3>='a' && s3<='c'))/***** 统计模块*****/ { scores[s1-'a']+=5; scores[s2-'a']+=3; scores[s3-'a']+=2; } } printf("Voting results:\n"); /*****输出模块 *****/ printf("a: %d\n",scores[0]); /*****结果输出*****/ printf("b: %d\n",scores[1]); printf("c: %d\n",scores[2]); first=0; seccond=1; for(i=0;i<3;i++) { if(scores[i]>scores[first]) { seccond=first; first=i; } else if(scores[i]>scores[seccond]) seccond=i; } if(scores[first]!=scores[seccond]) { printf("祝贺 %c 当选冠军!\n",first+'a'); finish=1; } else printf("请重新投票!\n"); } return 0; } <2>启动程序: 编译、链接、运行: 输入投票人数:5 输入投票内容: a b c c a b c a a 该票无效! c b a c b a 成功运行!3.知识点集锦: 什么是结构化程序设计?比较其与对象化程序设计的区别。 答:结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,像这种结构和风格的程序是不允许出现的。结构程序设计就是一种进行程序设计的原则和方法,按照这种原则和方法可设计出结构清晰、容易理解、容易修改、容易验证的程序。即:结构化程序设计是按照一定的原则与原理,组织和编写正确且易读的程序的软件技术。结构化程序设计的目标在于使程序具有一个合理结构,以保证和验证程序的正确性,从而开发出正确、合理的程序。 结构化的分析方法的基本思路是自顶向下逐层分解。分解和抽象是人们控制问题复杂性的两种基本手段。它强调程序的功能,以函数为中心,分层逐步展开程序设计。而面向对象程序设计强调程序的分层分类概念,它以抽象为基础描述问题解决的大体思想,再以此为基础,进行对象的定义与对象的展示。面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。它把编程问题视为一个数据集合,数据相对于从功能入手的结构化程序而言,具有很强的稳定性。前者首先关心的是功能,而后者关心的是要