资源描述
投票程序设计
精品文档
C语言课程设计
题目:5 投票程序
姓名:钱庆翔
年级:2014级
专业:电气工程及其自动化
收集于网络,如有侵权请联系管理员删除
目录
第一章 问题及分析 1
1.1、题目 1
1.2、问题提出与要求 2
需求分析 2
第二章 功能实现设计 3
2.1总体设计——程序流程图 3
2.2、程序设计 6
2.3、程序结果 9
第三章 反思总结 9
3.1、知识积累 9
3.2、实习总结 11
1.多看代码 11
2.要自己动手 11
3.关于养成良好的编程习惯 12
第一章 问题及分析
1.1、题目
设有代码号X、Y、Z的3个候选人竞选先进工作者,记分方法如下:投票者在选票上对他们的编号填写顺序记分为5.3.2时,如投票为4时,输入投票内容为(1)XYZ;(2)ZXY;(3)ZYX;(4)YZX;候选人等分为X:12;Y:13;Z:15,则Z为年度先进工作者。请编程序从键盘上输入人数及投票结果,统计他们的得分,并输出那位是年度先进工作者。要求投票者在选票上对他们的编号的填写顺序分可自行设定,同一张票上写有两个相同代码视为无效票。
例如:投票人数:4
输入投票内容:
X Y Z
Z X Y
Z Y X
Y Z X
三位候选人得分:
X: 12
Y: 13
Z: 15
祝贺Z当选年度先进工作者!
1.2、问题提出与要求
需求分析
本程序中要求候选人有编号和得票数,且每张选票上要同时写上三个候选人的编号,最终输出谁是获胜者。因此可以用结构体来存储候选人的信息。唱票中要求相对应的编号分别记分为5、3、2,因此在记分程序中可以用一个条件表达式来进行统计得分。统计结果中若前两名有相同的得票数则要求重新投票。为此要求把三个侯选人的总得分进行比较,则可以用一个判断语句来判断,简单明了。
数据结构可用结构体数组,结构体成员包括代号、得分。或者采用二维数组,行方向对应一张投票,列方向对应各候选人得分。
第二章 功能实现设计
2.1总体设计——程序流程图
流程图:开始
输入投票人数及投票内容
统计相应候选人的票数并排序
选票编号重复?
判断前两名
总票数是否相等
结束
重新投票
否
是
是
否
输出投票结果及获胜者
定义结构体与相关变量
该票无效
2.2、程序分析
1) 结构体定义
struct houxuanren
{
int id;
int point;
}
2) 输入投票结果
printf("请输入投票总人数\n");
scanf("%d",&k);
printf("请输入投票内容\n");
getchar();
3) 判断选票中是否有重复
if(a!=b&&a!=c&&b!=c)
{
hxr[0].point+=(a=='x'?5:(b=='x'?3:(c=='x'?2:0)));
hxr[1].point+=(a=='y'?5:(b=='y'?3:(c=='y'?2:0)));
hxr[2].point+=(a=='z'?5:(b=='z'?3:(c=='z'?2:0)));
printf(" point: %d %d %d\n",hxr[0].point,hxr[1].point,hxr[2].point);
continue;
4) 统计相应候选人的票数
for(i=0;i<3;i++)
{
if(temp<hxr[i].point)
{
temp=hxr[i].point;
j='x'+i;
}
printf(" %c point %d\n",'x'+hxr[i].id,hxr[i].point);
}
5) 判断前两名总票数是否相等,并输出结果
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("祝贺 %c\n年度先进工作者",j);
}
getch();
}
2.3、程序设计
如下
#include<stdio.h>
#include<conio.h>
struct houxuanren
{
int id;
int point;
}
main()
{
int i=0,j=0,k,temp=0;
char a,b,c;
struct houxuanren hxr[3];
for(i=0;i<3;i++)
{
hxr[i].id=i;
hxr[i].point=0;
}
printf("请输入投票总人数\n");
scanf("%d",&k);
printf("请输入投票内容\n");
getchar();
for(i=1;i<=k;i++)
{
scanf("%c%c%c",&a,&b,&c);
getchar();
if(a!=b&&a!=c&&b!=c)
{
hxr[0].point+=(a=='x'?5:(b=='x'?3:(c=='x'?2:0)));
hxr[1].point+=(a=='y'?5:(b=='y'?3:(c=='y'?2:0)));
hxr[2].point+=(a=='z'?5:(b=='z'?3:(c=='z'?2:0)));
printf(" point: %d %d %d\n",hxr[0].point,hxr[1].point,hxr[2].point);
continue;
}
printf("投票无效\n");
}
for(i=0;i<3;i++)
{
if(temp<hxr[i].point)
{
temp=hxr[i].point;
j='x'+i;
}
printf(" %c point %d\n",'x'+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("祝贺 %c\n年度先进工作者",j);
}
getch();
}
2.3、程序结果
第三章 反思总结
3.1、知识积累
什么是结构化程序设计?比较其与对象化程序设计的区别。
答:结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,像这种结构和风格的程序是不允许出现的。结构程序设计就是一种进行程序设计的原则和方法,按照这种原则和方法可设计出结构清晰、容易理解、容易修改、容易验证的程序。即:结构化程序设计是按照一定的原则与原理,组织和编写正确且易读的程序的软件技术。结构化程序设计的目标在于使程序具有一个合理结构,以保证和验证程序的正确性,从而开发出正确、合理的程序。
结构化的分析方法的基本思路是自顶向下逐层分解。分解和抽象是人们控制问题复杂性的两种基本手段。它强调程序的功能,以函数为中心,分层逐步展开程序设计。而面向对象程序设计强调程序的分层分类概念,它以抽象为基础描述问题解决的大体思想,再以此为基础,进行对象的定义与对象的展示。面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。它把编程问题视为一个数据集合,数据相对于从功能入手的结构化程序而言,具有很强的稳定性。前者首先关心的是功能,而后者关心的是要处理的数据。
3.2、学习总结
通过一学期的C语言程序设计学习,我认识到了自己在C语言方面的不足。我自己温习了C语言,更是对C语言有了更新的认识,更为深层次的认识。以下几点是我在实习期间的心得和体会。
1) 多看代码
在有一定基础以后一定要多看别人的代码。就例如第四章的庖丁解牛和第五章的举一反三,注意代码中的算法和数据结构。毕竟学C之后的关口就是算法和数据结构。提到数据结构,指针是其中重要的一环(不过这些很多在我的实习报告中没有用到),绝大多数的数据结构是建立在指针之上的,如链表、队列、树、图等等,所以只有学好指针才能真正学好C。别的方面也要关注一下,诸如变量的命名、库函数的用法等等。有些库函数是经常用到的。对于这些函数的用法就要牢牢记住。
2) 要自己动手
编程序是个实干的活,光说不练不行。刚开始学的时候可以多练习书上的习题。对于自己不明白的地方,自己编个小程序实验一下是最好的方法,能给自己留下深刻的印象。自己动手的过程中要不断纠正自己不好的编程习惯和认识错误。有一定的基础以后可以尝试编一些经典的案例程序。学习程序设计,虽然开始接触的无非是变量、函数、条件语句、循环语句等基本概念,这些在课堂上都能听懂,但要真正能进行编程运用,需要在深入理解这些概念的基础上应用,只简单的学习语法还是远远不够的。结构,而是吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。通过第四章的庖丁解牛和第五章的举一反三,让我学会了如何面对大程序时着手处理,如何去小心查错,通过不断的错误纠正,让我更深层次的了解到程序的逻辑严密性。
3) 关于养成良好的编程习惯
1、在比较复杂的代码后面要有注释;2、注意语句的嵌套不能过长;3、注意语句的选择。并不是分支语句就用if循环就用while、for。在适当的情况下switch和do while语句也是要用的。在某些时候,switch语句比if语句更加精练明了,而do while比while少一个循环。
通过短暂的一学期C语言实习,让我收获了知识,收获了快乐!
松开的记忆,飘落的莫名的尘埃,像起伏的微风,拂过脑海,留下一份情愁。一条街,没有那些人,那些身影,却能来回徘徊穿梭。街,行走时,纵然漫长,漫长,有时只为听一颗流动的心的呓语。沉默,倔强,回望,忘记,记住,一切像断了的弦,有时希望生活简单就好,有时却又莫名的颓废其中。
有些路,只能一个人走;有些事,只能一个人去经历。粗读加缪、萨特的存在主义,它告诉我,人就是非理性的存在。光秃秃的枝桠、清寂的清晨、流动的阳光,飘落于心,或快意,或寂寥,映照心境,然而,有时却只属于那一刻。总之,一切只是心情。
人生的画面一幅幅地剪辑,最后拼凑出的是一张五彩斑斓的水彩画,有艳丽的火红色,凝重的墨黑以及一抹忧郁的天蓝色。人的记忆很奇特,那些曾经的过往,就像一幅幅的背景图,只有一个瞬间,却没有以前或以后。比如,只能记得某个瞬间的微笑,只能在记忆的痕迹寻觅某时刻骑着单车穿过路口拐角的瞬间,却都不知晓为何微笑,为何穿过街角。
一切,有时荒诞得像一场莫名情景剧。然而,这就是生活。
曾经的梦,曾经的痛,曾经的歌,曾经的热情相拥,曾经的璀璨星空。
也许,多年以后,再也见不到的那些人,和着记忆的碎片飘荡而来,曾经伴着我们走过春华秋实。天空蔚蓝,杜鹃纷飞,飞过季节,曾经萍水相逢,欢聚一堂,蓦然回首,唯歌声飘留。让人忆起《米拉波桥》里的诗句:夜幕降临,钟声悠悠,时光已逝,唯我独留。
人在天涯,绵绵的思绪随着微风飘浮,从布满礁石的心灵海滩上穿过千山万水,来到游荡的身躯里,刻下一篇篇笺章。而这,或许在多年以后,当再次翻动时,原以为什么都已改变,
松开的记忆,飘落的莫名的尘埃,像起伏的微风,拂过脑海,留下一份情愁。一条街,没有那些人,那些身影,却能来回徘徊穿梭。街,行走时,纵然漫长,漫长,有时只为听一颗流动的心的呓语。沉默,倔强,回望,忘记,记住,一切像断了的弦,有时希望生活简单就好,有时却又莫名的颓废其中。
有些路,只能一个人走;有些事,只能一个人去经历。粗读加缪、萨特的存在主义,它告诉我,人就是非理性的存在。光秃秃的枝桠、清寂的清晨、流动的阳光,飘落于心,或快意,或寂寥,映照心境,然而,有时却只属于那一刻。总之,一切只是心情。
人生的画面一幅幅地剪辑,最后拼凑出的是一张五彩斑斓的水彩画,有艳丽的火红色,凝重的墨黑以及一抹忧郁的天蓝色。人的记忆很奇特,那些曾经的过往,就像一幅幅的背景图,只有一个瞬间,却没有以前或以后。比如,只能记得某个瞬间的微笑,只能在记忆的痕迹寻觅某时刻骑着单车穿过路口拐角的瞬间,却都不知晓为何微笑,为何穿过街角。
一切,有时荒诞得像一场莫名情景剧。然而,这就是生活。
曾经的梦,曾经的痛,曾经的歌,曾经的热情相拥,曾经的璀璨星空。
也许,多年以后,再也见不到的那些人,和着记忆的碎片飘荡而来,曾经伴着我们走过春华秋实。天空蔚蓝,杜鹃纷飞,飞过季节,曾经萍水相逢,欢聚一堂,蓦然回首,唯歌声飘留。让人忆起《米拉波桥》里的诗句:夜幕降临,钟声悠悠,时光已逝,唯我独留。
人在天涯,绵绵的思绪随着微风飘浮,从布满礁石的心灵海滩上穿过千山万水,来到游荡的身躯里,刻下一篇篇笺章。而这,或许在多年以后,当再次翻动时,原以为什么都已改变,
松开的记忆,飘落的莫名的尘埃,像起伏的微风,拂过脑海,留下一份情愁。一条街,没有那些人,那些身影,却能来回徘徊穿梭。街,行走时,纵然漫长,漫长,有时只为听一颗流动的心的呓语。沉默,倔强,回望,忘记,记住,一切像断了的弦,有时希望生活简单就好,有时却又莫名的颓废其中。
有些路,只能一个人走;有些事,只能一个人去经历。粗读加缪、萨特的存在主义,它告诉我,人就是非理性的存在。光秃秃的枝桠、清寂的清晨、流动的阳光,飘落于心,或快意,或寂寥,映照心境,然而,有时却只属于那一刻。总之,一切只是心情。
人生的画面一幅幅地剪辑,最后拼凑出的是一张五彩斑斓的水彩画,有艳丽的火红色,凝重的墨黑以及一抹忧郁的天蓝色。人的记忆很奇特,那些曾经的过往,就像一幅幅的背景图,只有一个瞬间,却没有以前或以后。比如,只能记得某个瞬间的微笑,只能在记忆的痕迹寻觅某时刻骑着单车穿过路口拐角的瞬间,却都不知晓为何微笑,为何穿过街角。
一切,有时荒诞得像一场莫名情景剧。然而,这就是生活。
曾经的梦,曾经的痛,曾经的歌,曾经的热情相拥,曾经的璀璨星空。
也许,多年以后,再也见不到的那些人,和着记忆的碎片飘荡而来,曾经伴着我们走过春华秋实。天空蔚蓝,杜鹃纷飞,飞过季节,曾经萍水相逢,欢聚一堂,蓦然回首,唯歌声飘留。让人忆起《米拉波桥》里的诗句:夜幕降临,钟声悠悠,时光已逝,唯我独留。
人在天涯,绵绵的思绪随着微风飘浮,从布满礁石的心灵海滩上穿过千山万水,来到游荡的身躯里,刻下一篇篇笺章。而这,或许在多年以后,当再次翻动时,原以为什么都已改变,
松开的记忆,飘落的莫名的尘埃,像起伏的微风,拂过脑海,留下一份情愁。一条街,没有那些人,那些身影,却能来回徘徊穿梭。街,行走时,纵然漫长,漫长,有时只为听一颗流动的心的呓语。沉默,倔强,回望,忘记,记住,一切像断了的弦,有时希望生活简单就好,有时却又莫名的颓废其中。
有些路,只能一个人走;有些事,只能一个人去经历。粗读加缪、萨特的存在主义,它告诉我,人就是非理性的存在。光秃秃的枝桠、清寂的清晨、流动的阳光,飘落于心,或快意,或寂寥,映照心境,然而,有时却只属于那一刻。总之,一切只是心情。
人生的画面一幅幅地剪辑,最后拼凑出的是一张五彩斑斓的水彩画,有艳丽的火红色,凝重的墨黑以及一抹忧郁的天蓝色。人的记忆很奇特,那些曾经的过往,就像一幅幅的背景图,只有一个瞬间,却没有以前或以后。比如,只能记得某个瞬间的微笑,只能在记忆的痕迹寻觅某时刻骑着单车穿过路口拐角的瞬间,却都不知晓为何微笑,为何穿过街角。
一切,有时荒诞得像一场莫名情景剧。然而,这就是生活。
曾经的梦,曾经的痛,曾经的歌,曾经的热情相拥,曾经的璀璨星空。
也许,多年以后,再也见不到的那些人,和着记忆的碎片飘荡而来,曾经伴着我们走过春华秋实。天空蔚蓝,杜鹃纷飞,飞过季节,曾经萍水相逢,欢聚一堂,蓦然回首,唯歌声飘留。让人忆起《米拉波桥》里的诗句:夜幕降临,钟声悠悠,时光已逝,唯我独留。
人在天涯,绵绵的思绪随着微风飘浮,从布满礁石的心灵海滩上穿过千山万水,来到游荡的身躯里,刻下一篇篇笺章。而这,或许在多年以后,当再次翻动时,原以为什么都已改变,
展开阅读全文