歌星大奖赛.docx
《歌星大奖赛.docx》由会员分享,可在线阅读,更多相关《歌星大奖赛.docx(18页珍藏版)》请在冰点文库上搜索。
歌星大奖赛
中国地质大学
本科生课程论文封面
课程名称计算机高级语言课程设计(C)
教师姓名翁正平
本科生姓名
本科生学号
本科生专业
所在院系
类别:
本科生
日期:
课程设计评语
对课程论文的评语:
平时成绩:
课程论文成绩:
总成绩:
评阅人签名:
注:
1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目录
课程设计评语2
目录3
1.题目要求4
2.需求分析4
3.总体设计4
4.数据结构设计6
5.详细设计6
6.程序代码8
7.程序运行结果10
8.编程中遇到的困难及解决方法15
9.总结16
10.致谢17
参考文献18
1.题目要求
【要求】
在歌星大奖赛中,有十个评委为参赛的选手打分,分数为1~100分。
选手最后得分为:
去掉一个最高分和一个最低分后其余8个分数的平均植。
请编写一个程序实现。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。
【提示】
这个问题的第一个要求算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
第二个要求为了考虑效率,要用到排序技术。
2.需求分析
根据题目要求,由于裁判打分是存放在文件中的,所以要提供文件的输入,输出等操作;在程序中需要浏览裁判的打分,以及去掉一个最高分和一个最低分后其余8个分数的平均值,同时还要找出最公平的裁判和最不公平的裁判.当然,该程序可以多次使用,也就是说可以多次评分.
3.总体设计
由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。
在编写本程序的过程中,首先我借助c语言程序设计与学习指导,了解了一些目标程序运行的次序与界面的操作方法,通过看c程序设计,我了解了结构体变量的有关知识。
然后按照题目的具体要求进行思考和设计。
因为老师教给我们许多作图的方法及截图的方法,再加上前期实习时老师交给的一些C的思路和方法,我很快便将整个程序的设计思路整理清楚。
具体的设计思路如下:
程序的要求是根据十个评委对歌手的打分情况,求出这个歌手的平均成绩和最公平及最不公平的裁判。
首先,我先考虑到程序的数据输入,可以用scanf函数来解决,并将输入的数据存放于数组中。
随后对存放在数组中的数据进行排序,这步为执行找出最不公平的裁判提高了效率,只需将排好序的数组的首尾分值与平均值进行比较即可。
将排好序的数组中间的八个数求平均值即为此歌手的成绩,可见排序法可大大的简化程序。
接下来是最后一个任务就是找最公平的裁判,此过程我使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。
为了方便管理员更好的使用界面操作,我还设置了每输入完一组数据并得到结果后,或接着输入下组数据或按0跳出界面。
整个程序的设计思路到此结束.
【功能模块划分及其流程图】
本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这6个部分来完成。
这6个部分依次是:
(1).分数的输入部分;
(2).对分数进行的排序部分;
(3).计算平均值的部分;
(4).找出最不公平裁判部分;
(5).找出最公平裁判部分;
(6).数据的输出部分
4.数据结构设计
对全局变量、结构体数据结构声明
#include
#include
#include
structtest
{
intnum;
floats;
};
分别定义了整形,浮点形,以及结构体类型。
inti,j,k,bad,good;
floatts,sum=0,min,aver=0,tm[10];
structtestdata[10],*p[10],*temp;
5.详细设计
(1).分数的输入部分.运用了for循环语句和数据数组进行对分数进行输入存储.
for(i=0;i<10;i++)
{data[i].num=i+1;
scanf("%f",&data[i].s)
if(data[0].s==0)exit(0);
}
(2).对分数进行的排序部分.运用了for循环语句和if语句对输入的分数进行排序.
for(i=0;i<10;i++)tm[i]=data[i].s;
for(i=0;i<10;i++)p[i]=&data[i];
for(i=0;i<9;i++)
{k=i;
for(j=i+1;j<10;j++)
if(tm[k]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;
}
(3).计算平均值的部分
for(i=1;i<9;i++)
sum+=p[i]->s;
aver=sum/8;
(4).使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判
printf("\n-----------------\n");
printf("Theaveris:
%.1f\n",aver);
printf("-----------------\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]->s-aver);good=i;}
elsebreak;
}
for(i=6;i<9;i++)
{
if((fabs(p[i]->s-aver))<=min)
{min=fabs(p[i]->s-aver);good=i;}
elsebreak;
}
(5)输出最公平裁判和最不公平的裁判.
printf("Theworst评委is%dandthesorceis%.1f\n",
p[bad]->num,p[bad]->s);
printf("Thebest评委is%dandthesorceis%.1f\n",
p[good]->num,p[good]->s);
6.程序代码
#include
#include
#include
structtest
{
intnum;
floats;
};
voidmain()
{
inti,j,k,bad,good;
floatts,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);
}
for(i=0;i<10;i++)tm[i]=data[i].s;
for(i=0;i<10;i++)p[i]=&data[i];
for(i=0;i<9;i++)
{k=i;
for(j=i+1;j<10;j++)
if(tm[k]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;i<9;i++)
sum+=p[i]->s;
aver=sum/8;
/*计算平均值的部分*/
printf("\n-----------------\n");
printf("Theaveris:
%.1f\n",aver);
printf("-----------------\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]->s-aver);good=i;}
elsebreak;
}
/*用拆半法先将前半部分与min比较*/
for(i=6;i<9;i++)
{if((fabs(p[i]->s-aver))<=min)
{min=fabs(p[i]->s-aver);good=i;}
elsebreak;
}
/*用拆半法先将后半部分与min比较*/
printf("Theworst评委is%dandthesorceis%.1f\n",
p[bad]->num,p[bad]->s);
/*打印出最不公平裁判和其分数*/
printf("Thebest评委is%dandthesorceis%.1f\n",
p[good]->num,p[good]->s);
/*打印出最公平裁判和其分数*/
printf("\n----------------------------------\n");
printf("Nextone:
");/*打印出下一位*/
}while
(1);
/*getch();*/
return0;
}
7.程序运行结果
举例说明:
(程序开始界面如下)
管理员输入评委对任意歌手的打分,输入完毕后程序如下菜单界面:
管理员输入完毕后,按[Enter]健,程序运行界面如下
:
此程序显示了裁判对歌手的平均分数,以及根据裁判们打分与平均分数间的差距判断出的最公平和最不公平裁判的位置及打分!
为了向李明验证程序的准确性及公平与不公平裁判出现在每个裁判上的几率,管理员又输入了几位歌手的打分
管理员输入完毕后,按[Enter]健,程序运行界面如下:
接着又输入一组数据后运行如下:
当出现最高分的裁判和最低分的裁判各不止一个时,输入数据后程序界面的运行如下:
8.编程中遇到的困难及解决方法
虽然这个程序相对比较简单,但是在编写过程中还有许多不懂的地方,比如在用结构体时那部分,我们才刚学,不大明白,不太熟悉.但是经过老师的指点和多次阅读课本我掌握了他..最大问题也就是这了。
。
。
在刚刚学习C语言时,我感到自己总是在一些细节的地方出问题。
经常在语句的结尾少“;”,有时又会出现忘记定义变量的情况。
而这些都是因为我对C语言语法规则掌握不熟练导致的。
在编程的过程中,很容易出现一个问题,就时少大括号“}”的问题。
这是,error只有一个,但是错误的地方很多,且都在括号处。
按照计算机所指出的错误位置寻找是不容易找出错误的。
直到整个程序看了一遍后才会发现是一个大括号的问题。
通常少的是“{”或着“}”,错误位置会出现在缺少括号位置之后的其他大括号出现的地方。
只要这种情况发生后,往前找是否有大括号缺失就可以将问题很快解决了。
在帮同学修改程序的过程中,也遇到过一个问题。
在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。
我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下声明。
最后有一个小问题,就是运行时要将颜色选成白色和黑色。
不然就会打印不出来。
我也因此又重复制作了一次。
9.总结
通过这次的C语言上机实习,我收获颇丰。
这次的实习使我了解到了编写一个程序的不易。
哪怕很简单的程序也需要下很大的心思来思考,需要考虑到各个方面的问题。
但是当最后程序运行成功的那一刻,我也感受到了很强的成就感。
上机实习是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
历时7天的《C语言程序设计》已经结束了,在这5天编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。
首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这5天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点。
其次,在5天编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。
再次,通过5天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便。
第四,在5天的实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查。
第五过天的实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成,我的程序设计也弄好了。
第六通过天的实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。
10.致谢
在C语言的实习过程中,让我巩固了C语言的基础知识,以前从来没有这样编过完整的程序,实习让我有这样的一个机会,自己独立编写程序。
我觉得自己说学的东西不多,但是可以将它们运用出来。
在实习过程中,首先我要感谢刘文中老师,是她带我走进C语言大门,因为她,我开始喜欢C语言,把所学知识掌握牢固。
同时,在这次实习中,翁正平老师对我的帮助对我最难忘。
在老师的教学风格影响下,我在编写完最初程序后,有自己添加了很多功能。
翁老师也给过我其他发展的建议,在此,我要感谢他。
最后,我还要感谢给我帮助的同学,在一些程序问题上,我和同学交流经验,学到了很多在书本上学不到的东西。
总之,我真诚的感谢在这次实习中给过我帮助的人。
参考文献
[1]谭浩强.C程序设计(第四版)[M].北京:
清华大学出版社,2010.
[2]张冬梅,刘远兴,陈晶,王媛妮。
C语言课程设计与学习指导。
中国铁道出版社,2008。
[3]张宝森.c语言程序设计实验与实训.北京:
科学出版社,2005.
[4]王贺艳.c语言程序设计综合实训.北京:
科学出版社,2007.
[5]郑军红.c语言程序设计上机指导与综合练习.武汉:
武汉大学出版社,2008.
[6]杨开城.c语言程序设计教程,实验与练习.北京:
人民邮电出版社,2005.
[7]谭浩强.c语言程序设计题解与上机指导.北京:
清华大学出版社,2000.
[8]何兴恒,c程序设计实践指导书.武汉:
中国地质大学出版社,2004.
[9]杨彩霞..c语言程序设计实验指导与习题解答.北京:
中国铁道出版社,2006.
[10]谭浩强著.c程序设计教程,北京:
清华大学出版社,2007.
………………