C语言课程设计报告—投票程序足球先生
前言
编程实践是学习程序设计语言中的一个重要环节,许多同学在学习了课程设计这门课程后往往来不及消化以及应用所学知识。为了提高同学程序设计能力,强化同学们的理论应用于实际的能力,提高分析问题与解决问题的能力,故开设程序设计的课程使同学们的程序设计能力上一个新的台阶。
设计题目:投票程序——足球先生投票
一、程序要求
设有代号为 a,b,c,的三个足球先生候选人,根据投票者在选票上对他们的编号的填写顺序分别记分为5、3、2。请编程从键盘上输入投票人数和投票结果。统计他们的得分,并输出哪位当选为足球先生。(注意:若一张选票中有两个相同的代号,该选票作废;若最终前两名得分相同则要重新投票。)
二、设计分析
本程序中要求候选人有编号和得票数,且每张选票上要同时写上三个候选人的编号,最终输出谁是获胜者。因此可以用结构体来存储候选人的信息。唱票中要求相对应的编号分别记分为5、3、2,因此在记分程序中可以用一个条件表达式来进行统计得分。统计结果中若前两名有相同的得票数则要求重新投票。为此要求把三个后选人的总得分进行比较,则可以用一个判断语句来判断,简单明了。
三、程序设计总思路
定义结构体存放候选人的信息,包括编号和得分。输入投票总人数和投票结果,然后根据人数和投票结果进行统计得分,把选票中有相同编号的去掉,只统计没有相同编号的票数。然后对最终的分数进行比较,若存在前两名的得分情况一样,则需要重新投票,否则输出谁是获胜者。结构体定义为
struct houxuanren{
int id;
int point;
}hxr[3];
唱票情况的数据结构:
if(x!=y&&x!=z&&y!=z) //判断输入的投票中不能有重复的编号//
{hxr[0].point+=(x=='a'?5:(y=='a'?3:(z=='a'?2:0))); //第一个候选人的得分情况和算法//
hxr[1].point+=(x=='b'?5:(y=='b'?3:(z=='b'?2:0))); //第二个候选人的得分情况和算法//
hxr[2].point+=(x=='c'?5:(y=='c'?3:(z=='c'?2:0))); //第三个候选人的得分情况和算法//
比较总得分与是否要进行重新投票的数据结构为:
for(i=0;i<3;i++)
{ if(temp
{temp=hxr[i].point;
j='a'+i;
}
printf("people %c point %d\n",'a'+hxr[i].id,hxr[i].point);
} if(((hxr[0].point==hxr[1].point)&&hxr[0].point>hxr[2].point&&hxr[1].point>hxr[2].point)||( (hxr[0].point==hxr[2].point)&&hxr[0].point>hxr[1].point&&hxr[2].point>hxr[1].point)||((hxr[1].point==hxr[2].point)&&hxr[1].point>hxr[0].point&&hxr[2].point>hxr[0].point))
printf("重新投票\n"); //若有前两名得分相同进行重新投票//
else{
printf("获胜者是 people %c\n",j);
}
getch();
}
主函数设计流程:
具体的算法有:
if(x!=y&&x!=z&&y!=z)//判断选票情况,每张选票中的号码不能有相同的候选人号码否则作废//
{ hxr[0].point+=(x=='a'?5:(y=='a'?3:(z=='a'?2:0))); //第一个候选人的得分情况和算法//
hxr[1].point+=(x=='b'?5:(y=='b'?3:(z=='b'?2:0))); //第二个候选人的得分情况和算法//
hxr[2].point+=(x=='c'?5:(y=='c'?3:(z=='c'?2:0))); //第三个候选人的得分情况和算法//
printf(" point: %d %d %d\n",hxr[0].point,hxr[1].point,hxr[2].point);
continue;
若第一个选票对应为abc则对应的候选人分别得分为5,3,2。依次类推。
输入数据显示的结果如下:
图A 图B 图C
图A中输入了数据显示出谁是获胜者;图B中前两名的得分相同显示重新投票;图C中有不含B的投票但满足题意。图A和图B输入的规范的数据,图C输入中含不规范的数据但不影响结果。
后记
C语言程序是一种