《综合程序实验(共7页).doc》由会员分享,可在线阅读,更多相关《综合程序实验(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上综合程序实验实验者姓名:何彦辉 学号: 实验日期:2012/6/9一、 实验题目学生信息管理程序二、 实验的目的和要求有一个班级的学生(不超过50人),每个学生的数据包括学号、姓名、五门课(英语、高数、马哲、计算机、电子技术)的成绩,从键盘输入此数据,要求按总分从高到低的顺序保存到cj.dat中,并按按学号大小从小到大排序打印出没门课的成绩,以及总分最高分的学生的数据(包括学号、姓名、各门课的成绩、平均分数)。要求:用input函数输入学生数据,用printscore(x)函数打印出课程x的成绩表;用max函数找出最高分数数据;最高分的学生在主函数中输出。三、程序设计
2、思路、流程图1、程序设计思路: 定义结构体数组来存放学生信息。用input函数输入学生数据 ,for循环输入学生数据。再编写printscore(x)函数打印出课程x的成绩表,其中用了冒泡排序法对学号的排序,还用了if语句对分数范围的判断,来统计人数以及计算比例,在输出统计结果。用max函数找出最高分数数据,用for语句遍历一遍,晒筛选出最高分成绩的学生数据,再返回结构体函数值。文件的打开以及输入数据到文件中再关闭,其中用了for语句对文件的输出,使用了函数fprintf,fopen,fclose等。最后用main函数调用这些函数,再在main函数里输出最高成绩的学生数据即完成。2、程序流程图
3、:for(i=0;in;i+)返回最高分的学生结构体数组 所有的学生的总分大于第一个学生的总分YN进行交换下标输出某科的全班平均分以及每个分数段的人数以及比例 for(k=0;k5;k+)计算每个分数段的比例for(i=0;in;i+)算出总成绩以及每个分数段的人数输出某个科目的数据 for (i=0;in;i+))for(j=0;j stuj yn前一项与后一项交换 计算总成绩赋值给结构体存放以及平均值存放到结构体stu中 scanf()输入学生数据赋值给结构体数组stu,数据的输入n-s图直到i大于n(学生人数)输入数据,并排序:对其中一门课程的成绩输出,并进行了统计: for(i=0;i
4、n;i+)输出某个科目的数据for(i=0;in;i+)算出总成绩以及每个分数段的人数 for(k=0;k5;k+)计算每个分数段的比例输出某科的全班平均分以及每个分数段的人数以及比例筛选最高分的成绩的学生数据:for(i=0;in;i+) 所有的学生的总分大于第一个学生的总分YN进行交换下标返回最高分的学生结构体数组四、关键部分的源代码定义结构体:struct Studentlong int num;char name20;float grade5;float aver;float total;对最高分的输出:max_stu=Max(p,n);printf(n);printf(输出最高分的学
5、生数据:n学号 姓名 英语 高数 马哲 计算机 电子技术n);printf(%-10d%8s%6.2f%6.2f%6.2f%6.2f%6.2fn,max_stu.num,max_stu.name,max_stu.grade0,max_stu.grade1,max_stu.grade2,max_stu.grade3,max_stu.grade4);输入的关键for循环输入学生数据:for(i=0;iN;i+) scanf(%d %s %f %f %f %f %f,&stui.num,stui.name,&stui.grade0,&stui.grade1,&stui.grade2,&stui.gr
6、ade3,&stui.grade4);stui.total=stui.grade0+stui.grade1+stui.grade2+stui.grade3+stui.grade4;stui.aver=stui.total/5.0;冒泡排序算法:使用了两次;一次是对学号的排序,另一次是对总成绩的排序:for (i=0;iN;i+)for(j=0;jstuj.total)t=stuj;stuj=stuj+1;stuj+1=t;文件的打开以及输入数据到文件中在关闭的程序代码:fp=fopen(cj.dat,w+);for(i=0;inum,p-name);for(j=0;jgradej);fputs
7、(n,fp);fclose(fp);如下是对其中一门课程的成绩输出,并进行了统计:其实可以用一个函数把这些代码包含在里面,之后再调用五次就可以完成五门课的成绩表输出了.但由于程序已经写好了,不怎么想改动。就免了,其实改过了也很方便,用个一个形参输入即可控制哪一门的输出。此处在源程序代码中copy了五次。printf(课程名称:英语n);print1();for(i=0;i3;i+)printf(%-10ld%5s%8.2fn,stui.num,stui.name,stui.grade0);print2();for(i=0;i=90) rs0+=1;if(stui.grade0=80&stui.
8、grade0=70&stui.grade0=60&stui.grade070) rs3+=1;if(stui.grade060) rs4+=1;for(k=0;k5;k+)blk=100.0*rsk/n;printf(90100分(优):%4d占%6.2f%n,rs0,bl0);printf(8089分(良):%4d占%6.2f%n,rs1,bl1);printf(7079分(中):%4d占%6.2f%n,rs2,bl2);printf(6069分(及格):%4d占%6.2f%n,rs3,bl3);printf(059分(不及格):%4d占%6.2f%n,rs4,bl4);筛选最高分的成绩的学
9、生数据:for(i=0;iN;i+)if(stuk.totalstui.total)k=i;return stuk;五、实验运行结果的典型画面六、实验总结这个实验真有点难,算法不难,很简单,但是格式的要求等等以及语法会经常出错,这个程序我调试了好久,终于完成了。很高兴,不仅因为程序完成了,更是因为从中学会了很多,有很多以前不太注意的,现在大部分发现了。在今后的进一步学习中应该会有更大的进步。坚信!其中一个选择排序导致了无限循环最终什么也没输出,后来单步调试了挺久知道(因为过程中有许多问题),之后采用了冒泡排序法,同时也知道了什么地方错误,想用另一种做法试试。指针的使用应该特别小心。变量在过程中的改变后记得要在次赋值为零。专心-专注-专业