歌星大奖赛Word格式文档下载.docx
《歌星大奖赛Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《歌星大奖赛Word格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。
![歌星大奖赛Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/a4f5142c-3870-43a6-886b-170e71dc299f/a4f5142c-3870-43a6-886b-170e71dc299f1.gif)
第四部分:
程序设计数据、运行结果
第五部分:
程序的优缺点
第六部分:
附录(源程序)
课程设计编号、名称、内容
编号:
二十一题
名称:
内容:
【要求】
(1)在歌星大奖赛中,有十个评委为参赛的选手打分,分数为1~100分。
选手最后得分为:
去掉一个最高分和一个最低分后其余8个分数的平均植。
请编写一个程序实现。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。
【提示】
一、需求分析
这个问题的第一个要求算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
第二个要求为了考虑效率,要用到排序技术。
程序总体设计思路
由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。
老师给我安排的是21题的《歌星大奖赛》,在编写本程序的过程中,首先我借助购买的指导材料,了解了一些目标程序运行的次序与界面的操作方法,然后按照题目的具体要求进行思考和设计。
在将整个程序的设计思路整理清楚后。
我的具体设计思路如下:
程序的要求是根据十个评委对歌手的打分情况,求出这个歌手的平均成绩和最公平及最不公平的裁判。
首先,我先考虑到程序的数据输入,可以用scanf函数来解决,并将输入的数据存放于数组中。
随后对存放在数组中的数据进行排序,这步为执行找出最不公平的裁判提高了效率,只需将排好序的数组的首尾分值与平均值进行比较即可。
将排好序的数组中间的八个数求平均值即为此歌手的成绩,可见排序法可大大的简化程序。
接下来是最后一个任务就是找最公平的裁判,此过程我使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。
为了更好的使用界面操作,我还设置了每输入完一组数据并得到结果后,或接着输入下组数据或按0跳出界面。
整个程序的设计思路到此结束。
程序功能划分、图示及流程图
【功能模块划分及其流程图】
本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这6个部分来完成。
这6个部分依次是:
1.分数的输入部分;
2.对分数进行的排序部分;
3.计算平均值的部分;
4.找出最不公平裁判部分;
5.找出最公平裁判部分;
6.数据的输出部分
总体设计:
歌星大奖赛评分系统
分数输入
分数排序
计算平均分
找出最不公平评委
找出最公平评委
数据输出
系统功能模块图
程序设计数据、运行结果
本程序是一款应用软件,故数据设计、程序运行结果应在程序的运用中得以体现,现在通过一个程序的运用事例来对数据设计、程序运行结果进行演示与实现:
【软件运用举例】
程序开始界面如下:
输入评委对任意歌手的打分,输入完毕后程序如下菜单界面:
输入完毕后,按[Enter]健,程序运行界面如下:
此程序显示了裁判对歌手的平均分数,以及根据裁判们打分与平均分数间的差距判断出的最公平和最不公平裁判的位置及打分!
为了验证程序的准确性及公平与不公平裁判出现在每个裁判上的几率,再次输入几位歌手的打分
输入输入完毕后,按[Enter]健,程序运行界面如下:
接着又输入一组数据后运行如下:
当出现最高分的裁判和最低分的裁判各不止一个时,输入数据后程序界面的运行如下:
程序的优缺点
【程序的优点】
算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。
[算法上的优点]主要体现在以下三点:
1.程序采用main主函数方式设计,程序的主体的功能大都由该功能完成。
程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。
2.程序对数据的读写采用了scanf函数,此数据的读取与存贮方式有利于磁盘数据的加密,即无法用记事本等程序对数据文件进行正常读取,即有助于数据的保护与加密。
另外,对磁盘文本数据的修改有多种方式,通过对比发现,本程序采用scanf函数一次性把所有修改过的结构体数组写入文本文件的修改方式,不仅克服了本次程序设计中文本文件不能顺利准确读取的难点,而且相较于传统的fprintf()函数的写入方式与创建临时交换文件的写入方式,写入效率明显提高。
3.程序执行使用for语句,C语言中的for语句使用是最为灵活的。
不仅可以用于循环次数已确定的情况,而且可以用于循环次数不确定而值给出循环结束条件的情况,他完全可以代替while语句!
有助于相应功能准确高效运行。
当然,在程序的编试过程中,遇到了非常多的困难,感觉到了很大的压力。
程序是在边看书、边查资料、想老师请教询问、长期思考与设计、调试、试验的基础上编写出来的,在编写程序的过程中,得到了许多的锻炼,编程的思维也得以塑造。
[功能上的优点]
主要体现在以下三点:
1.简洁明了的程序菜单。
程序主要采用了四组层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。
2.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。
程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。
3.程序采用先对裁判分数进行排序,再将排序后首尾的分数直接与平均值进行比较,得出最差裁判。
即方便的让用户能看懂程序,又提高了计算的效率,减少了运算的次数.再如每次评判结果操作结束后,均会提示是否返回主菜单,并提示是否再进行类似输入操作,这样给用户带来了操作的方便,大大提高了评选的管理效率。
【程序的缺点】
主要表现在以下三点:
1.程序虽然经过多次精简,但仅仅是形式上、小范围的精简,仍未得到本质上的精简,即未找到更加简单、更加高效、更加合理、更小占用的资源的算法。
2.程序仍然存在不合理的地方,例如程序某些部分输入错误会导致程序中止或转向其他功能模块,即程序建议用户注意提示,进行合理的准确的输入,这样更有利于管理工作。
3.程序功能仍然不够完善。
例如程序不能根据多组数据的输入判断出总的最公平和最不公平的裁判。
附录(原程序)
#include<
stdio.h>
math.h>
conio.h>
stdlib.h>
structtest
{
intnum;
floats;
};
voidmain()
inti,j,k,bad,good;
doublets,sum=0,min,aver=0,tm[10];
structtestdata[10],*p[10],*temp;
do{
sum=0;
aver=0;
printf("
Input10sorces------input0(exit)\n"
);
for(i=0;
i<
10;
i++)
{data[i].num=i+1;
scanf("
%f"
&
data[i].s);
/*分数的输入部分*/
if(data[0].s==0)exit(0);
}
i++)tm[i]=data[i].s;
i++)p[i]=&
data[i];
9;
{k=i;
for(j=i+1;
j<
j++)
if(tm[k]<
tm[j])
k=j;
if(k!
=i)
{ts=tm[i];
tm[i]=tm[k];
tm[k]=ts;
temp=p[i];
p[i]=p[k];
p[k]=temp;
}/*对输入分值进行排序*/
for(i=1;
sum+=p[i]->
s;
aver=sum/8;
/*计算平均值的部分*/
printf("
\n-----------------\n"
Theaveris:
%.1f\n"
aver);
-----------------\n"
(fabs(p[0]->
s-aver)>
fabs(p[9]->
s-aver))?
(bad=0):
(bad=9);
/*通过绝对差值判断与平均值相差最大的裁判*/
min=fabs(p[5]->
s-aver);
good=5;
/*暂定第六个为最公平裁判*/
for(i=4;
i>
0;
i--)
{if((fabs(p[i]->
s-aver))<
=min)
{min=fabs(p[i]->
good=i;
elsebreak;
/*用拆半法先将前半部分与min比较*/
for(i=6;
/*用拆半法先将后半部分与min比较*/
printf("
Theworstpingweiis%dandthesorceis%.1f\n"
p[bad]->
num,p[bad]->
s);
/*打印出最不公平裁判和其分数*/
Thebestpingweiis%dandthesorceis%.1f\n"
p[good]->
num,p[good]->
/*打印出最公平裁判和其分数*/
\n----------------------------------\n"
Nextone:
"
/*打印出下一位*/
}while
(1);
}
实习心得:
通过这次程序设计,我通过自己编写程序,从二十几个错误和几十个警告开始修改,其中的酸甜苦辣只有自己亲身经历了才能体会到,有些错误实在不会修改,只能看这电脑发愣。
有时甚至想放弃,可是最后还是坚持下来了,当看到自己把程序条好时,看着自己编写的程序,心理无比欣慰,因为这是自己亲手编写的第一个程序,是对自己这学期C语言的检验与肯定。
在这24学时的课中,我学到了很多,我想我不是最好的,但我努力了,付出了,我觉得很满足。