C语言课程设计 歌星大奖赛报告.docx
- 文档编号:6187689
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:151.98KB
C语言课程设计 歌星大奖赛报告.docx
《C语言课程设计 歌星大奖赛报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 歌星大奖赛报告.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课程设计歌星大奖赛报告
C语言课程设计报告
学院:
专业:
班级:
学号:
姓名:
指导老师:
第一部分:
序言.......................
第一部分:
序言
课程设计是学习程序设计语言中的一个重要环节。
为提高学生程序设计能力,课程设计共安排两个实践环节:
上机实习和课程设计。
其中上机实习与课堂教学同步进行,主要是检验课堂教学内容,初步掌握程序设计的基本方法和调试技能;课程设计是在课堂学习结束后,集中安排一次60学时上机集中强化训练,使学生的程序设计能力再上一个台阶。
最后,以报告形式形成此次课程设计的最终成果。
第一部分为上机实习。
安排了VisualC++环境下的课堂实习内容。
具体内容包括VisualC++集成环境的使用;课堂实验指导内容,共分八个实验,学生在每次上机实习前需事先阅读并熟悉相关实验内容。
具体进度可由任课教师统一安排。
由于统一安排的上机时间有限,部分实验内容可由学生在课后自由上机时间完成。
第二部分是课程设计。
本部分内容共分为四个单元,其中第一个单元为温故而知新,在巩固以学内容的基础上,复习课程设计和上机调试的基本方法。
第二个单元为庖丁解牛,通过学习一个综合程序的设计与编写,使学生能够在较短时间内掌握综合程序设计的基本步骤和方法。
第三个单元为举一反三,在第二个单元的基础上以教材案例的指导下学会构建程序的框架以及部分常用算法代码的书写。
第四个单元为熟能生巧,在前三个单元系统学习的基础上,动手完成一两个程序的完整设计与编写。
第二部分:
课程设计名称及题目要求
题目名称:
歌星大奖赛
【要求】
(1)在歌星大奖赛中,有十个评委为参赛的选手打分,分数为1~100分。
选手最后得分为:
去掉一个最高分和一个最低分后其余8个分数的平均植。
请编写一个程序实现。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。
【提示】
一、需求分析
这个问题的第一个要求算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
第二个要求为了考虑效率,要用到排序技术。
第三部分:
程序总体设计思路
对于我所做的题目,我是采用根据目标程序运行的过程的方法来编写的。
此种方法较为简单明了,容易理解接受,属常规思维,但是不够精简,有进一步改进的空间。
我所做的是21题:
《歌星大奖赛》。
首先我学习了《C语言课程设计与学习指导》的相关内容,再在以前所学C语言和C++的基础上,以及在老师的指导、同学的帮助指正下,借助购买的指导材料,了解了一些目标程序运行的次序与界面的操作方法后,我按照题目的具体要求进行了思考和设计,具体设计思路为:
程序的要求是根据十个评委对歌手的打分情况,求出这个歌手的平均成绩和最公平及最不公平的裁判。
首先,我先考虑到程序的数据输入,可以用scanf函数来解决,并将输入的数据存放于数组中。
随后对存放在数组中的数据进行排序,这步为执行找出最不公平的裁判提高了效率,只需将排好序的数组的首尾分值与平均值进行比较即可。
将排好序的数组中间的八个数求平均值即为此歌手的成绩,可见排序法可大大的简化程序。
接下来是最后一个任务就是找最公平的裁判,此部分我接受了同学的建议,使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。
为了方便管理员更好的使用界面操作,我还设置了每输入完一组数据并得到结果后,或接着输入下组数据或按0跳出界面。
整个程序的设计思路到此结束。
第四部分:
详细设计和流程图
【功能模块划分及其流程图】
本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这6个部分来完成。
这6个部分依次是:
1.分数的输入部分;
采用数组和指针,将10个裁判对于同一个选手的打分分别输入并存放于指针所指的地址中,以便后面调用和输出。
2.对分数进行的排序部分;
将输入的10个分数按照从低到高的顺序排成一列,以便方便接下来计算选手得分,以及找出最公平和最不公平裁判。
3.计算平均值的部分;
将排序好的分数去掉第一个和最后一个,再将剩下8个求和之后除以8,便是选手的最终得分。
4.找出最不公平裁判部分;
使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最不公平的裁判,再将之与后半部分的进行比较,得出最终的最不公平的裁判。
5.找出最公平裁判部分;
使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。
6.数据的输出部分
总体设计:
歌星大奖赛评分系统
分数输入
分数排序
计算平均分
找出最不公平评委
找出最公平评委
数据输出
主函数流程图:
N
[程序]
#include
#include
#include
structtest
{
intnum;
floats;
};
voidmain()
{
inti,j,k,bad,good;
floatts,sum=0,min,average=0,tm[10];
structtesta[10],*p[10],*temp;
do{
sum=0;average=0;
printf("Input10sorces------input0(exit)\n");
for(i=0;i<10;i++)
{a[i].num=i+1;
scanf("%f",&a[i].s);
/*分数的输入部分*/
if(a[0].s==0)exit(0);
}
for(i=0;i<10;i++)tm[i]=a[i].s;
for(i=0;i<10;i++)p[i]=&a[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; average=sum/8; /*计算平均值的部分*/ printf("\n-----------------\n"); printf("Theaverageis: %.1f\n",average); printf("-----------------\n"); (fabs(p[0]->s-average)>fabs(p[9]->s-average))? (bad=0): (bad=9); /*通过绝对差值判断与平均值相差最大的裁判*/ min=fabs(p[5]->s-average); good=5; /*暂定第六个为最公平裁判*/ for(i=4;i>0;i--) {if((fabs(p[i]->s-average))<=min) {min=fabs(p[i]->s-average);good=i;} elsebreak; } /*用拆半法先将前半部分与min比较*/ for(i=6;i<9;i++) {if((fabs(p[i]->s-average))<=min) {min=fabs(p[i]->s-average);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("下一选手得分: "); /*打印出下一位*/ }while (1); /*getch();*/ return0; } 第五部分: 上机操作及程序运行结果 本程序是一款应用软件,故数据设计、程序运行结果应在程序的运用中得以体现,现在通过一个程序的运用事例来对数据设计、程序运行结果进行演示与实现: 现在假设要求某一选手的得分情况,,则在下面所示的界面里输入10位裁判对于该选手的打分: 输入10位裁判对于该选手的打分,如下面界面所示: 输入输入完毕后,按[Enter]健回车,程序运行界面如下: 此程序显示了歌手的最后得分,以及根据裁判们打分与最后得分之间的差距判断出的最公平和最不公平裁判的位置及打分! 为了验证程序的准确性及公平与不公平裁判出现在每个裁判上的几率,又输入了几位歌手的打分,如下所示: 输入输入完毕后,按[Enter]健回车,程序运行界面如下: 接着又输入一组数据后运行如下: 当出现最高分的裁判和最低分的裁判各不止一个时,输入数据后程序界面的运行如下: 第六部分: 结束语 一: 程序的优缺点; 算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。 [算法上的优点]主要体现在以下三点: 1.程序采用main主函数方式设计,程序的主体的功能大都由该功能完成。 程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。 2.程序执行使用for语句,C语言中的for语句使用是最为灵活的,而他完全可以代替while语句! 有助于相应功能准确高效运行。 3.程序对数据的读写采用了scanf函数,此数据的读取与存贮方式有利于磁盘数据的加密,即无法用记事本等程序对数据文件进行正常读取,有助于数据的保护与加密。 另外,本程序采用scanf函数一次性把所有修改过的结构体数组写入文本文件的修改方式,不仅克服了本次程序设计中文本文件不能顺利准确读取的难点,而且相较于传统的fprintf()函数的写入方式与创建临时交换文件的写入方式,写入效率明显提高。 [功能上的优点] 主要体现在以下三点: 1.简洁明了的程序菜单。 2.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑句,而且提示明确,具有较强的明确的指导作用。 3.程序采用先对裁判分数进行排序,再将排序后首尾的分数直接与平均值进行比较,得出最差裁判。 【程序的缺点】 主要表现在以下四点: 1.程序虽然经过多次精简,但仅仅是形式上、小范围的精简,仍未得到本质上的精简,未找到更加简单、更加高效、更加合理、更小占用的资源的算法。 2.程序仍然存在不合理的地方,仍需进一步改进。 3.程序功能仍然不够完善。 二: 收获与体会; 为了编写这个程序我用了很多天时间,克服了非常多的困难,感觉到了很大的压力。 程序是在边看书、边查资料、询问、长期思考与设计、调试、试验的基础上编写出来的,在编写程序的过程中,得到了许多的锻炼,编程的思维也得以塑造。 有的地方我自己编不出来,多亏了同学的帮忙与指导。 第二部分的折半法我原本没有采用,可是总是编不出来,最后不得已只有采用这个方法。 这次课程设计让我收获很多,首先以前学的C知识得到了加强与巩固;其次收获了很多新知识,编程的方法、思路以及思维模式等;最后,通过此次课程设计,我发现了自己仍然存在很多的不足,基础知识大的并不扎实,需要进一步学习和复习巩固。 感谢老师一个多星期以来对我们的指导以及辛勤的工作与付出! 第七部分: 附录(原程序) #include #include #include structtest { intnum; floats; }; voidmain() { inti,j,k,bad,good; floatts,sum=0,min,average=0,tm[10]; structtesta[10],*p[10],*temp; do{ sum=0;average=0; printf("Input10sorces------input0(exit)\n"); for(i=0;i<10;i++) {a[i].num=i+1; scanf("%f",&a[i].s); /*分数的输入部分*/ if(a[0].s==0)exit(0); } for(i=0;i<10;i++)tm[i]=a[i].s; for(i=0;i<10;i++)p[i]=&a[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; average=sum/8; /*计算平均值的部分*/ printf("\n-----------------\n"); printf("Theaverageis: %.1f\n",average); printf("-----------------\n"); (fabs(p[0]->s-average)>fabs(p[9]->s-average))? (bad=0): (bad=9); /*通过绝对差值判断与平均值相差最大的裁判*/ min=fabs(p[5]->s-average); good=5; /*暂定第六个为最公平裁判*/ for(i=4;i>0;i--) {if((fabs(p[i]->s-average))<=min) {min=fabs(p[i]->s-average);good=i;} elsebreak; } /*用拆半法先将前半部分与min比较*/ for(i=6;i<9;i++) {if((fabs(p[i]->s-average))<=min) {min=fabs(p[i]->s-average);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("下一选手得分: "); /*打印出下一位*/ }while (1); /*getch();*/ return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计 歌星大奖赛报告 语言 课程设计 歌星 大奖赛 报告