中国地质大学 C语言实习报告 (1500字)_中国地质大学实习报告
中国地质大学 C语言实习报告 (1500字)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“中国地质大学实习报告”。
中国地质大学(武汉)
计算机高级语言课程设计(实习报告
姓名: 实习题目: 班级: 学号:学院:专业:资源勘查工程(油气方向)
指导老师:2012年1月15日 c)目录
一、题目名称、要求----------------------5
五、程序运行过程截图及分析---12
六、总结---------------19
一、题目名称、要求
歌星大奖赛
(1)在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分,选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分差距最大)的评委。
提示:这个问题的第一个要求算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。第二个要求为了考虑效率,要用到排序技术。
二、需求分析
根据题目要求,程序中所求为分数的平均值(去掉最大最小值)及所有分数中和平均值差距最大和最小的数的顺位。易知需要用到比较数据大小,并在一组数据中求得最大、最小值。第二问要求得出与平均分差距最大、最小的数据,也可以理解为求第一问中各数据与平均值差的绝对值的最大、最小值。并提供提示、输入、输出、显示、纠错等操作。根据情况的不同,还应该提供可以使数据多次录入的循环部分。
三、程序总体设计思路
一、总体设计:
整个程序最开始是数据输入,可用scanf函数实现,输入的数据可存放在数组中,然后解决题目中的第一问,即求平均值,先寻找所输入的数据的最大值和最小值,这一步通过设的变量max及变量min的逐渐变动即可实现,接着减去max和min的值之后平均数aver就可得到。然后是寻找数据中和平均值差距最大和最小的数,同样是通过max和min变量(此时max和min重新赋值,出于阅读性考虑变量尽可能减少),数据与平均值的差距大小可通过差值的平均值体现,然后求得差值平均值的最大、最小值及其相应的位置,就可解决第二问。
整个程序中的输入模块负责接收数据,数据处理模块(1)和数据处理模块(2)分别负责第一问求平均值和第二问求最公平和最不公平的评委,最后输出模块输出处理后的结果。
二、程序各部分功能划分
程序可以划分为5个部分,通过各个部分的合作即可完成要求:
1、成绩输入部分。
2、求得最大、最小值部分。
3、求平均值部分。
4、求得最公平、最不公平数据及其位次部分。
5、结果输出部分。
图示:
四、程序各模块作用及详细设计
一、程序各功能模块设计:
(1)开始部分:
#include #include void main(){ do{ float a[10],max=0.0,min=100.0,aver=0.0;int i,m,n;/*定义需要使用的变量*/ 该部分是程序的开头,说明了需要调用的系统文件,stdio.h和math.h均是使程序可顺利运算必需的内容。而max、min均为定义的变量,定义为float型是考虑到评分或平均分不一定是整数。其中为了程序的简洁,max、min及aver会赋两次值,实际上可以不这样做而多定义两个变量。其中的do while语句使得程序可以重复执行,也即多组数据的录入和处理得以实现,do while语句的执行条件在main函数的末尾,条件为1,即无限循环,当需要跳出程序时直接关闭对话框即可。
(2)数据输入模块: for(i=0;i
图示:
(3)数据处理模块1 if(a[i]100.0){ printf(error!n);/*数据只能在1到100之间*/ i--;} if(maxa[i])min=a[i];aver+=a[i];/*此时aver为所有数据之和*/ } aver=(aver-max-min)/8;/*第一个循环结束,aver重新赋值,此时aver为平均值*/ 第一个数据处理模块解决了第一问的要求,即求得去掉一个最高分和去掉一个最低分后其余8个分数的平均值。由于题目要求分数为1~100分,程序中添加了一个判定部分,只有当分数处于1到100之间时循环才能继续,否则提示“error!”。此处的aver赋了两次值,是出于程序可读性的原因,尽量减少变量的数量。图示:
(4)数据处理模块 2 max=fabs(a[0]-aver);/*max此时为a[0]与平均值之差的绝对值*/ m=0;min=fabs(a[0]-aver);/*min此时为a[0]与平均值之差的绝对值*/ n=0;for(i=1;i
值差距最大的分数*/ m=i;/*max对应的数据在数组中的位置*/ } if(min>fabs(a[i]-aver)){ min=fabs(a[i]-aver);/*逐一比较得出当前与
平均值差距最小的分数*/ n=i;/* min对应的数据在数组中的位置*/ } } 第二个数据处理模块解决的是题目的第二问,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。首先对max和min重新赋值,使两者均等于第一个分数与平均数之差的绝对值,然后开始循环。因为本质上求最公平与最不公平的分数等价于求平均值差值最大与最小的数,将分数转化为其余平均值之差的绝对值(如a[i]转为fabs(a[i]-aver)),然后求最值,其余步骤与第一个数据处理模块一样。需要注意的是此模块中m和n的赋值均为当前i值,而数组中i的数值并不等于实际上分数的排序,所以最后输出时不能直接输出m和n。
图示:
(5)结束部分
printf(average=%fn,aver);printf(最公平的评委是第%d位,分数为%fn,n+1,a[n]);/*n为该数据在数组中的位置,n+1是该评委的顺次*/ printf(最不公平的评委是%d位,分数为%fn,m+1,a[m]);/*m为该数据在数组中的位置,m+1是该评委的顺次*/ } while(1); } 此为程序的结尾,printf函数输出所需的结果,分别为去掉一个最高分和一个最低分后的其余分数的平均值,及最公平和最不公平的评委的顺位和分数。分数可能不是整数,所以均以float输出,评委的顺位则以整形输出,输出n+1和m+1的原因是数组中的位置并不是实际上的位次。while(1)为do语句的判定句,使得程序无限循环,由此可以无限次输入分数并处理,实现多组分数的录入。
图示:
五、程序运行过程截图及分析
一、程序运行各阶段截图及分析
(1)程序开始阶段:
出现提示“请输入第1个分数”,此时输入分数并回车即输入第一个数据。
(2)数据输入阶段:
阶段(1)时输入98并回车,程序即可录入第一个数据并出现“请输入第二个分数”,以此类推:
输入第2个分数为75并回车,出现提示“请输入第3个分数”。继续输入85、100、65、87、94、86、82,此时一共输入了9个分数,程序依次出现提示并录入数据,最后出现提示“请输入第10个分数”。
第10个数据键入85,此时所有分数都已输入,但第10个数据计算机还没有接收,数据处理模块还没有开始。
(3)数据处理阶段
数据输入完毕后截图如下:
然后按下回车键,数据即可处理完毕:
答案直接出现在分数列的下方,依次是平均分86.5、最公平评委的位次6和分数87、最不公平的评委位次5及分数65。
一次处理后的截图为:
此时可以继续输入下一组数据,第一个分数为
如果数据输入错误,则会提示error!并提醒重新输入该数据
程序两次运行完整截图:
运算完成后,计算机会继续循环,直到关闭对话框为止。
六、总结
一、程序现有优点
(1)算法简单有效
程序中所有的循环体均使用for语句,for语句较while和do while语句更加简洁灵活,完全可以替代上述语句是程序简单有效地进行。
(2)程序精炼,可读性强
由于各个变量在程序中都多次赋值,有效地减少了程序中的变量数量,非常精炼而且通俗易懂,采用的语句和编排方式也都增强了这一特点。最终使程序维持在一个非常短而又有效的水平上。
(3)有效防止数据错误
程序中有专门的模块来防止输入错误,当输入的数据小于1或大于100时,会提示error!并再次提示输入该数据,避免了由于一次输错而导致整个程序终止的情况。
(4)菜单简单明了,提示语言人性化
程序中的菜单均为中文输出,且多为祈使句,具有较强的指导作用。层次分明并且通俗易懂,没有操作上的困难。有利于用户顺利、准确地看懂程序并进行操作,提高了管理效率。
(2)考虑了多组数据输入的情况
程序考虑了多组10个分数的输入和处理,不仅足以满足题目要求,而且考虑到了有多组分数等待处理的情况,处理完一组后不需要重新运行程序。
二、程序现有缺点
(1)程序依然不够精炼
程序虽然已经足够短小,但是只是表面上小范围精简,并没有在本质上提高效率和减小资源占用。
(2)操作界面太单调
虽然提示语言非常人性化,但是由于dos界面本身的问题导致菜单太单调,表达方式很单一。
三、程序改进思路
(1)算法的精炼以及界面的优化
限于c语言的功能和面向dos的特性,两点都不太可能有大的改进,可以将程序移植到vc++等平台以实现优化。
四、c语言实习心得体会
c语言实习的数天里,我们在专业老师的带领下进行了c语言程序实习。在这之前,我们已经学习了c语言这门课程将近一个学期,通过学习和复习已经有了一定程度的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,比如文件、指针等等,运用起来的时候还是感到很棘手。由于时间的关系,实习老师并没有太详细地讲解,只是在不懂的时候单个辅导,这样也更有效率一些。
上机是学习程序设计语言必不可少的实习环节,特别是c语言灵活多变的特点,更需要通过编程的实习来真正掌握它。通过这次实习,我们主要收获了:
(1)熟悉程序开发、学习c语言相关软件的操作方法
平时的学习我们只是简单了解了c语言的阅读,并且大多集中在最简单的基础问题上,设计大量操作和编译的部分几乎不会接触。通过这次实习我们大大熟悉了编写一个程序所需要的经过和步骤,在亲身编写的过程中,大大加深了诸如数组、指针等等的实际应用。虽然在以往也有上机实习课,但是往往不足以熟悉整本书的内容,这次的实习课也很好的弥补了这一点,我们基本都已经很好地掌握了c语言相关软件的使用方法。
(2)在编译过程中磨练了心性
完成程序的编写,决不意味着万事大吉。很多情况下自认为编写好的程序在实际操作过程中会出现很多这样那样的问题,error和warning动辄十几甚至几十。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试有时非常的枯燥,长期调试却没有效果,像个无头苍蝇一样乱撞,对于我们这些初学者来说,有时候一个消耗几个小时时间的小小错误,老师一眼就看出错误所在,这无疑是锻炼人耐心的事情。
通过这次为数不多的几天计算机实习学习,我们了解了一些很多c语言的知识,理解巩固了我们c语言的认识,从长远来说,这对我们将来到社会工作都将会有莫大的帮助。同时它让我知道,只要有足够的耐心,牢固的基础知识,任何东西都不会太难。
七、附录(完整程序)
#include #include void main(){ do{ float a[10],max=0.0,min=100.0,aver=0.0;int i,m,n;for(i=0;i100.0){ printf(error!n);i--;} if(maxa[i])min=a[i];aver+=a[i];} aver=(aver-max-min)/8;max=fabs(a[0]-aver);m=0;min=fabs(a[0]-aver);n=0;for(i=1;ifabs(a[i]-aver)){ min=fabs(a[i]-aver);n=i;} } printf(average=%fn,aver);printf(最公平的评委是第%d位,分数为%fn,n+1,a[n]);printf(第%d位,分数为%fn,m+1,a[m]);}
最不公平的评委是 while(1);}
刀豆文库小编为你整合推荐7篇C语言实习报告,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......
目 录一、前言„„„„„„„„„„„„„„„„„„„„„„„„„2二、引言„„„„„„„„„„„„„„„„„„„„„„„„„2 2.1系统开发工具„„„„„„„„„„......
新疆昌吉学院《C语言程序设计》 教学实习报告部门:信息技术分院专业:计算机应用技术 班级:2010高职应用姓名: 指导教师: 《C语言程序设计》教学实习报告2010高职应用班一、实习时......
C 语 言 实 验 报 告资源勘查工程0901班XXXXXXXXXXX 2011年11月09日C语言实验报告一.实验目地: 1. 了解C语言表示逻辑量的方法;2. 学会正确使用逻辑运算符和逻辑表达式; 3. 结合程......
实习报告1,从1到100面积,面积大于100跳出(周一上午)#include #define pai 3.14164 宏定义一个pai main() 主函数 { int r,i; 定义数据类型 float s; 定义数据类型 for(i=1;ii......
