C语言课程设计C语言投票程序.docx
《C语言课程设计C语言投票程序.docx》由会员分享,可在线阅读,更多相关《C语言课程设计C语言投票程序.docx(17页珍藏版)》请在冰豆网上搜索。
C语言课程设计C语言投票程序
C程序设计实习报告
题目:
C语言投票程序
学院:
专业:
姓名:
班级学号
指导教师:
2010年07月17日
一、课程设计题目描述与要求……………………………………3
二、需求与个人设计思想……………………………………4
三、流程图……………………………………5
四、我的程序设计(源程序)……………………………………6
程序运行情况……………………………………8
五、总结与修改……………………………………9
关于程序实行……………………………………9
问题及可能的解决方法……………………………………9
修改后程序运行情况……………………………………12
修改后的程序优点……………………………………13
心得与体会……………………………………15
C语言投票程序
一、课程设计题目描述与要求
要求:
设有代号为a、b、c的足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5、3、2。
请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。
注意:
若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则先是三个候选者得分并输出“祝贺X当选冠军!
”。
例如:
投票人数:
5
输入投票内容:
abc
cab
caa该票无效!
cba
bca
三位候选人得分:
a:
12
b:
13
c:
15
祝贺c当选冠军!
提示:
数据结构可用结构体数组,结构体成员包括代号、得分。
或者采用二维数组,行方向对应一张投票,列方向
二、需求与个人设计思想
【需求】
此程序意在评出得分最高的“足球先生”,要求编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。
【个人设计思想】
通过结构体数组structcandidateCadt[3]来存储三位候选人的基本信息:
代号、得分。
在用一个一维数组来存储投票内容——代表投票内容(顺序),通过循环语句while,for和一个没有参数的getchar函数(字符输入函数)从终端输入投票内容,处理后得到最终三位候选人得分,比较得到最终结果,评出得分最高的一名候选人,即为“足球先生”。
在过程中,当遇到一张选票上写有两个代号相同时应显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则先是三个候选者得分并输出“祝贺X当选冠军!
”。
三、流程图
1、整体流程图
图7—1
2、主函数流程图:
图7—2
四、我的程序设计(源程序)
#include
structcandidate//定义结构体
{
charname;//名字
intscore;//分数
};
structcandidateCadt[3]={{'a',0},{'b',0},{'c',0}};
voidmain()
{
inti,j,num;
charvote[3],s;
printf("请问共有多少人投票?
\n");
scanf("%d",&num);
while(num--)
{
for(i=0;i<3;i++)
{
s=getchar();
while(s!
='a'&&s!
='b'&&s!
='c')
s=getchar();
vote[i]=s;
}
if(vote[0]+vote[1]+vote[2]!
='a'+'b'+'c')//判断选票上是否有重复代码
{
printf("该票无效!
\n");
continue;
}
else
for(j=0;j<3;j++)
{
if(vote[0]==Cadt[j].name)
Cadt[j].score+=5;
if(vote[1]==Cadt[j].name)
Cadt[j].score+=3;
if(vote[2]==Cadt[j].name)
Cadt[j].score+=2;
}
}
printf("三位候选人得分:
\n");
for(j=0;j<3;j++)
printf("%c:
%d\n",Cadt[j].name,Cadt[j].score);
if(Cadt[0].score==Cadt[1].score||Cadt[1].score==Cadt[2].score||Cadt[2].score==Cadt[0].score)
printf("pleasevoteagaine.\n");
else
if(Cadt[0].scoreCadt[0].name=Cadt[1].name;
if(Cadt[0].scoreCadt[0].name=Cadt[2].name;
printf("祝贺%c当选冠军.\n",Cadt[0].name);
}
程序运行情况如下:
(1)当遇到一张选票上写有两个代号相同时成功显示“该票无效”:
图7—3
(2)显示最终结果:
图7—4
五、总结与修改
暑假期间,通过八天的C语言程序设计实习,我重新温习了C语言,更是对C语言有了更新的认识,更为深层次的认识。
以下几点是我在实习期间遇到的问题及心得体会。
【关于程序实行】
程序运行情况的截图如图7—3,7—4所示,图中显示有投票人数、投票的内容、候选人最后的得分情况以及最终冠军的获得者,系统运行情况较好,但仍存在一些不足,例如:
没有控制开始结束的语句,程序没有很好的体现模块化等。
在以后的程序设计中要特别注意这次遇到的问题,改进不足,探索新颖的思路,力求将程序设计完美化。
【问题及可能的解决方法】
程序中最大的不足是模块化没有很好的发挥其作用,个人觉得可以通过调用函数来弥补这一不足。
至于开始结束语句地解决,可以增加一个输出语句来解决。
还有一个问题是,源代码中没有注释语句,虽然这次设计的程序比较简单没用到注释,但以后设计中一定要注意这方面。
【修改后程序】
#include
#include
structcandidate//定义结构体
{
charname;//名字
intscore;//选票得分
};
structcandidateCadt[3]={{'a',0},{'b',0},{'c',0}};
voidthanks()
{
printf("thankyou!
\n");
}
voidfootball()
{
inti,j,num;
charvote[3],s;
printf("请问共有多少人投票?
\n");
scanf("%d",&num);
while(num--)
{
for(i=0;i<3;i++)
{
s=getchar();
while(s!
='a'&&s!
='b'&&s!
='c')
s=getchar();
vote[i]=s;
}
if(vote[0]+vote[1]+vote[2]!
='a'+'b'+'c')//判断选票是否有重复代号
{
printf("该票无效!
\n");
continue;
}
else
for(j=0;j<3;j++)
{
if(vote[0]==Cadt[j].name)
Cadt[j].score+=5;
if(vote[1]==Cadt[j].name)
Cadt[j].score+=3;
if(vote[2]==Cadt[j].name)
Cadt[j].score+=2;
}
}
printf("三位候选人得分:
\n");
for(j=0;j<3;j++)
printf("%c:
%d\n",Cadt[j].name,Cadt[j].score);
if(Cadt[0].score==Cadt[1].score||Cadt[1].score==Cadt[2].score||Cadt[2].score==Cadt[0].score)
printf("pleasevoteagaine.\n");
else
if(Cadt[0].scoreCadt[0].name=Cadt[1].name;
if(Cadt[0].scoreCadt[0].name=Cadt[2].name;
printf("祝贺%c当选冠军!
\n",Cadt[0].name);
}
intmain()
{
intID,ture=0;
printf("\n****************************此程序为足球先生投票程序****************************\n");
while
(1)
{
printf("请选择是否继续:
1为继续,2为退出;\n");
scanf("%d",&ID);
getchar();
switch(ID)
{
case1:
football();break;
case2:
thanks();break;
default:
ture=1;break;
}
if(ture!
=1)printf("**********************************谢谢您的参与**********************************\n");
printf("\n");
if(ture)break;
getchar();
printf("\n请按任何键继续......\n");
getchar();
}
return0;
}
修改后程序运行情况:
图7—5
图7—6
【修改后的程序优点】
程序被修改后更好地实现了模块化:
(1)主函数
图7—7
(2)thanks函数
图7—8
(3)football函数
图7—9
【心得与体会】
c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要,于是学校组织我们进行了为期八天的实习。
在这八天里,我们在老师的带领下进行了暑期c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
实习前两天由于对所学的知识忘记了不少,编的程序中有很多错误,而且很多找不出原因所在,也就是说完成程序的编写,并不意味着万事大吉。
原本认为万无一失的程序,实际上机运行时却不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
经过几天对书上知识如:
数组、结构体数组、循环语句(for\while)、if语句等的复习以及老师的耐心辅导,不仅重拾以前所学知识而且对c语言有了更深层次的理解。
当看到自己设计出来的程序运行成功时,感觉很欣慰的同时更痛下决心,以后一定要多看c语言源程序。
特别时要注意程序中的算法与数据结构,毕竟学c的关口就是算法和数据结构。
别的方面也要关注一下,诸如变量的命名、库函数的用法、结构体的定义等等。
有些库函数是经常用到的。
对于这些库函数的用法一定要牢牢记住。
只是看是不行的,编程序是个实干的活。
一个c语言程序从编辑、编译、连接到运行,光说不练不行。
刚开始学的时候可以多练习书上的习题。
对于自己不明白的地方,自己编个小程序实验一下是最好的方法,能给自己留下深刻的印象。
自己动手的过程中要不断纠正自己不好的编程习惯和认识错误。
有一定的基础以后可以尝试编一些经典的案例程序。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理、程序的添加修改、程序错误检查中用到的屏蔽操作、程序的调试等基本操作,更多的还是要靠自己努力。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习,可以概括为学习语法规定、掌握程序设计方法、提高程序处理能力,而这些都必须通过充分的实际上机操作才能完成。
通过多次上机练习,我对于语法知识有了感性的认识,加深了对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差。
所以学习c语言不能只停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
所以,这次实习对于c语言初学者的我意义非凡,通过它我学到了很多在书上学不到的知识。
关于养成良好的编程习惯方面1、在比较复杂的代码后面要有注释;2、注意语句的嵌套不能过长;3、注意语句的选择。
分支语句注意if循环和while、for的使用。
通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,对我们将来其他编程学习将会有莫大的帮助。
同时它让我知道,“功夫不负有心人”,只要我努力,我就一定能做到。