C语言课程实践-实践2实验报告.doc_第1页
C语言课程实践-实践2实验报告.doc_第2页
C语言课程实践-实践2实验报告.doc_第3页
C语言课程实践-实践2实验报告.doc_第4页
C语言课程实践-实践2实验报告.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告(实践2)1. 程序源代码1.学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下:分数段 学生人数图形=90 4() *#include #include void main()int score30;int number_all = 0; /输入的学生人数int number_fail = 0; /不及格学生人数int number_ave = 0; /平均分及平均分之上的学生人数int i;float average; /平均分float sum; /所有学生分数总计int percent; /学生在不同分数段的百分比int number_60_69 = 0; /60-69分学生人数int number_70_79 = 0; /70-79分学生人数int number_80_89 = 0; /80-89分学生人数int number_90_100 = 0; /90-100分学生人数/程序1第1问for(i=0; i100) printf(您输入的分数应在不能超多100分,请您重新输入!);i-;continue;number_all+;if (scorei 0) number_all-;break;for(i=0,sum=0; inumber_all; i+)sum=scorei+sum;average=sum/number_all;for(i=0; inumber_all; i+)if (scorei = 60 & scorei= 70 & scorei= 80 & scorei=89)number_80_89+;elsenumber_90_100+; printf(不及格学生的人数是%d人nn,number_fail);/程序1第2问for(i=0; i=average)number_ave+;printf(平均分及平均分之上的学生序号是%d号n,i+1); printf(平均分及平均分之上的学生人数是%d人nn,number_ave);/程序1第3问 printf(分数段 学生人数图形n);printf( 60 %2d(%2d%) ,int(number_fail),100*number_fail/number_all);for(i=1;i=number_fail;i+)printf(*); printf(n 60-69 %2d(%2d%) ,int(number_60_69),100*number_60_69/number_all);for(i=1;i=number_60_69;i+)printf(*);printf(n 70-79 %2d(%2d%) ,int(number_70_79),100*number_70_79/number_all);for(i=1;i=number_70_79;i+)printf(*);printf(n 80-89 %2d(%2d%) ,int(number_80_89),100*number_80_89/number_all);for(i=1;i=number_80_89;i+)printf(*);printf(n 90-100 %2d(%2d%) ,int(number_90_100),100*number_90_100/number_all);for(i=1;i=number_90_100;i+)printf(*);printf(n);2. 成绩排名次(二维数组)某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。#include #include void main()int score306;int number_all = 0; /输入的学生人数int i,j;/程序2第1问printf(同时输入三个成绩,请用空格分开,输入三个负数成绩则输入完毕n);for(i=0;i3;i+)printf(请输入第%d个学生数学(MT)、英语(EN)和物理(PH)的成绩:,i+1);for(j=0;j100) printf(您输入的分数应在不能超多100分,请您重新输入!); j-; continue;number_all+; if (scoreij 0) number_all-; break;for(i=0;inumber_all;i+) scorei3=0;for(j=0;j3;j+)scorei3=scoreij+scorei3; for(i=0; inumber_all; i+) scorei4=scorei3/3; printf(%d号学生总分是%d,平均分是%dn,i+1,scorei3,scorei4);/程序2第2问 for(i=0;inumber_all;i+) scorei5=number_all; for(j=0;jscorej3) scorei5-;printf(nn);for(j=0;jnumber_all;j+)for(i=0;inumber_all;i+)if(scorei5=j+1)printf(第%d名学生是%d号n,j+1,i+1); /程序2第3问printf(nn-名次表-n); printf(名次 学生编号 数学(MT) 英语(EN) 物理(PH) 总分 平均分n);for(j=0;jnumber_all;j+)for(i=0;i0)printf(编号为%d的学生,排名:%d,数学(MT):%d,英语(EN):%d,物理(PH):%d,总分:%d平均分:%d,i,scorei-15,scorei-10,scorei-11,scorei-12,scorei-13,scorei-14);elsebreak;2. 遇到的问题及解决方法问题1:(第一题)如何实现“当输入成绩为负值时,输入结束”功能?解决方法:如果仅仅让成绩为负数退出循环,可以在if语句中加入break语句,但此题还需在循环中得到输入的人数,不得不引用number_all,因此要合理安排循环语句中的编程顺序。问题2:(第一题)“以直方图方式统计各分数段的学生人数及所占的百分比”功能如何实现?解决办法:由于输出呈表格形式,因此采用逐行输出数据,在输出类型上选用整型输出,并用“%2d”进行对齐,以免造成“*”统计图不能对齐的问题。问题3:(第二题)“二维数组”的定义?解决办法:查看第一题,二维数组可以定义为“score303” ,但是在后面的题目中,将要存放总分、平均分、名词数组,因此声明数组为“score306” ,可方便数据输出和计算。问题4:(第二题)“按总分成绩由高到低排出成绩的名次”功能的实现?解决办法:如果仅对总分进行排序输出是非常容易的,但是要想输出名次同时又输出该总分对应的学生编号就比较困难了,最后通过对比数据输出名词解决问题,而不采用排序法。因为排序法是把数据交换,不符合输出要求。3. 总结(心得体会)这是“C语言课程实践”的第二次实践,题目比上一次实践要难,由于通过上次实践,已经会使用Microsoft Visual C+ 6.0这个编译软件,因此一上来便开始编程序。同样,两个程序的问题,都是有简单变得困难,再由困难变简单。在编第一个程序时,输出平均分就发现了问题,到底时以整型输出还是以实型输出,由于一开始声明的变量时整型,如果用实型输出则损失数据。第二个程序中的输出名次问题也非常棘手,思考了很久才得以解决,首先我毫无顾虑的使用冒泡排序法,但发现数组中的数据交换排序后,便把总分对应的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论