《2012年C语言课程设计实习报告(共11页).doc》由会员分享,可在线阅读,更多相关《2012年C语言课程设计实习报告(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上C语言课程设计实习报告班 级:学生姓名:序 号: 21 指导老师:陈老师/刘老师日 期: 2012.2目 录专心-专注-专业一、程序分析与设计(标题四号宋体加黑,正文五号宋体,行间距固定值18,首行缩进2字符)1、先用记事本编辑文件cj.txt存储一个班学习成绩。然后在C环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。2、利用循环使每个学生的三门功课的成绩相加,然后再把和除以三就得到了平均成绩。接着用冒泡法利用平均分的高低排出名次。最后用fprintf将每个学生的信息写入到mc.txt文件。3、利用fo
2、r语句下的printf语句把每个同学的信息在屏幕上显示出来。每名同学之间用分割线分开,作为每个学生的成绩条。4、利用for语句配合if嵌套语句计算出每科每个分数段的学生人数。在for语句中计算出每科的全班总成绩,再把总分除以三十七算出每科的平均分。最后用printf语句把结果按格式输出。5、利用for语句和if、printf语句配合找出不及格的学生的序号及该科成绩。6、利用for语句和if语句配合再利用逻辑或和逻辑且找出优等生的信息,并用printf语句在屏幕上显示出来。7、把以上几点分别定义五个函数,再定义一个菜单函数,利用switch语句和goto配合,完成输入进行运行。二、流程图1计算平
3、均分并排名 for i=0 to 37 stui.total=stui. math +stui.engl +stui.phys stui.ave=stui.total/3.0 打印出各个学生的每门课的成绩,平均分 for i=0 to 37 for j=0 to 37 stuj.avestui.ave 真 假 stui.mc+ 打印出各个学生的每门课的成绩,平均分,名次 2求个分数段的人数for i=0 to i37 stui.math60真 假math_60+ stui.math=69 真 假 math60_69+ stui.math=79 真 假 math70_79+ stui.math=
4、89 真 假 math80_89+ math_90+同理求出英语和物理在这个分数段的人数打印出不及格人的序号,不及格科目,分数3不及格人数for i=0 to i37 stui.math60 stui.engl60 stui.phys60真 假 真 假 真 假输出 输出 输出stui.id, stui.id, stui.id, 数学, 英语, 物理,stui.math stui. engl stui. phys 4优秀人数 for i=0 to i90|stui.ave85&(stui.math=100|stui.engl=100|stui.phys=100)|(stui.math95&stu
5、i.engl95|stui.math95&stui.phys95|stui.engl95&stui.phys95)&(stui.mc=1&stui.mc60&stui.engl60&stui.phys60) 真 假 输出 stui.id,stui.name,stui.math,stui.engl,stui.phys,stui.total,stui.ave,stui.mc三、源程序清单(此部分采用小五号宋体,行间距固定值14)#include#includestruct studentint id;char name9;int math;int engl;int phys;int total;f
6、loat ave;int mc; stu37;struct student*p=&stu0;/-mc-void mc()int i; printf(读取文件结果如下:n); printf(%8s %8s %8s %8s %8sn, 序号,姓名,数学,英语,物理); for(i=0;i37;i+) printf(%8d %8s %8d %8d %8dn,pi.id, pi.name,pi.math,pi.engl,pi.phys); for(i=0;i37;i+) pi.total= pi.math+pi.engl+pi.phys; pi.ave=pi.total/3.0; pi.mc=1; f
7、or(i=0;i37;i+) for(int j=0;jpi.ave) pi.mc+; printf(-MC-n); printf(%8s %8s %8s %8s %8s %8s %8s %6sn,序号,姓名,数学,英语,物理,总分,平均分,名次); for(i=0;i37;i+) printf(%8d %8s %8d %8d %8d %8d %8.3f %6dn,pi.id, pi.name,pi.math,pi.engl,pi.phys,pi.total,pi.ave,pi.mc); FILE* fp1; fp1=fopen(D:mc.txt,w); fprintf(fp1,%8s %8s
8、 %8s %8s %8s %8s %8s %6sn, 序号,姓名,数学,英语,物理 ,总分,平均分,名次); for(i=0;i37;i+) fprintf(fp1,%8d %8s %8d %8d %8d %8d %8.3f %6dn, pi.id,pi.name,pi.math,pi.engl,pi.phys,pi.total,pi.ave,pi.mc); /-cjt-void cjt()int i;for(i=0;i37;i+) pi.total= pi.math+pi.engl+pi.phys; pi.ave=pi.total/3.0; pi.mc=1; for(i=0;i37;i+)
9、for(int j=0;jpi.ave) pi.mc+; printf(%8s %8s %8s %8s %8s %8s %8s %6sn, 序号,姓名,数学,英语,物理 ,总分,平均分,名次); for(i=0;i37;i+) printf(%8d %8s %8d %8d %8d %8d %8.3f %6dn, stui.id,stui.name,stui.math,stui.engl,stui.phys,stui.total,stui.ave,stui.mc); printf(-n); FILE* fp5; fp5=fopen(D:cjt.txt,w); for(i=0;i37;i+) fp
10、rintf(fp5,%8d %8s %8d %8d %8d %8d %8.3f %6dn, stui.id,stui.name,stui.math,stui.engl,stui.phys,stui.total,stui.ave,stui.mc); fprintf(fp5,-n); /-fsd-void fsd()int total_math=0;int math_60=0;int math60_69=0;int math70_79=0;int math80_89=0;int math_90=0; int i;for(i=0;i37;i+)total_math+=stui.math; if(st
11、ui.math60) math_60+; else if(stui.math=69) math60_69+; else if(stui.math=79) math70_79+; else if(stui.math=89) math80_89+;else math_90+;float ave_math=total_math/37.0;int total_engl=0;int engl_60=0;int engl60_69=0;int engl70_79=0;int engl80_89=0;int engl_90=0;for(i=0;i37;i+)total_engl+=stui.engl; if
12、(stui.engl60) engl_60+; else if(stui.engl=69) engl60_69+; else if(stui.engl=79) engl70_79+; else if(stui.engl=89) engl80_89+;else engl_90+; float ave_engl=total_engl/37.0; int total_phys=0;int phys_60=0;int phys60_69=0;int phys70_79=0;int phys80_89=0;int phys_90=0;for(i=0;i37;i+)total_phys+=stui.phy
13、s; if(stui.phys60) phys_60+; else if(stui.phys=69) phys60_69+; else if(stui.phys=79) phys70_79+; else if(stui.phys=89) phys80_89+;else phys_90+;float ave_phys=total_phys/37.0;printf(-分数段统计结果文件-n); printf(%8s %8s %8s %8sn,分数段,C语言,英语,数学); printf(%8s %8d %8d %8dn,90,math_90,engl_90,phys_90); printf(%8s
14、 %8.3f %8.3f %8.3fn,平均成绩,ave_math,ave_engl,ave_phys);FILE* fp2; fp2=fopen(D:fsd.txt,w); fprintf(fp2,%8s %8s %8s %8sn,分数段,C语言,英语,数学); fprintf(fp2,%8s %8d %8d %8dn,90,math_90,engl_90,phys_90); fprintf(fp2,%8s %8.3f %8.3f %8.3fn,平均成绩,ave_math,ave_engl,ave_phys);/-bjg- void bjg() int i; printf(-打印不及格学生名
15、单-n); printf(%8s %8s %8sn,序号,不及格课程,该课程成绩); for(i=0;i37;i+) if(stui.math60)printf(%8d %8s %8dn,stui.id, 数学,stui.math);if(stui.engl60)printf(%8d %8s %8dn, stui.id, 英语,stui.engl);if(stui.phys60)printf(%8d %8s %8dn, stui.id,物理,stui.phys); FILE* fp3; fp3=fopen(D:bjg.txt,w); for(i=0;i37;i+) if(stui.math60
16、) fprintf(fp3,%8d %8s %8dn,stui.id, 数学,stui.math); if(stui.engl60) fprintf(fp3,%8d %8s %8dn, stui.id, 英语,stui.engl); if(stui.phys60) fprintf(fp3,%8d %8s %8dn, stui.id,物理,stui.phys); /-yds- void yds() int i; printf(优等生名单n); printf(%8s %8s %8s %8s %8s %8s %8s %6sn, 序号,姓名,数学,英语,物理 ,总分,平均分,名次); for(i=0;
17、i90|stui.ave85&(stui.math=100|stui.engl=100|stui.phys=100)|(stui.math95&stui.engl95|stui.math95&stui.phys95|stui.engl95&stui.phys95)&(stui.mc=1&stui.mc60&stui.engl60&stui.phys60)printf(%8d %8s %8d %8d %8d %8d %8.3f %6dn, stui.id,stui.name,stui.math,stui.engl, stui.phys,stui.total,stui.ave,stui.mc);
18、FILE* fp4; fp4=fopen(D:yds.txt,w);for(i=0;i90|stui.ave85&(stui.math=100|stui.engl=100|stui.phys=100)|(stui.math95&stui.engl95|stui.math95&stui.phys95|stui.engl95&stui.phys95)&(stui.mc=1&stui.mc60&stui.engl60&stui.phys60)fprintf(fp4,%8d %8s %8d %8d %8d %8d %8.3f %6dn, stui.id,stui.name,stui.math,stui
19、.engl, stui.phys,stui.total,stui.ave,stui.mc); /-menu-void menu()int i;void mc(); void cjt(); void bjg(); void yds();lop_1: printf(*1:计算平均分并排名*n); printf(*2:统计分数段*n); printf(*3:打印成绩条*n); printf(*4:打印不及格学生信息*n); printf(*5:打印优等生名单*n); printf(*6:退出*n); scanf(%d,&i); switch(i) case 1:mc(); goto lop_1; c
20、ase 2:fsd();goto lop_1; case 3:cjt();goto lop_1; case 4:bjg();goto lop_1; case 5:yds();goto lop_1; case 6:exit(0); /-main-void main() FILE* fp; fp=fopen(D:cj.txt,r); for(int i=0;i37;i+) fscanf(fp,%d %s %d %d %d,&stui.id,stui.name,&stui.math,&stui.engl,&stui.phys); menu();/-MC- 四、调试过程在程序运行的过程中,出现了很多的
21、错误。有很复杂的问题,也不乏许多低级的错误。1、在读取文件时,一开始总是出现乱码,后来才发现原始数据的第一行时空格,删除后就可以正确读取了。2、一开始我忘记了定义的函数也需要加“”,导致运行时出现了很多的错误,后来再查书才发现了症结所在。3、在编写代码时,经常忽略中英文的切换,导致代码中出现了大量的中文标点,严重影响了程序的运行。4、在编辑fsd函数时,采用了大量的if语句,一开始只使用两端的成绩利用逻辑且编辑判定条件,后来才想起来可以用if语句的嵌套语句。五、程序有待改进的地方1、在编辑程序时,定义了大量的变量,是程序看上去有些混乱。需要减少部分变量。2、在程序中使用了大量的printf语句,应考虑是否可以使用for语句将其简化。3、在编辑时,有大量的重复语句,严重影响了成绩的简洁性。六、本次实习的收获和建议收获:通过本次实习,让我了解了理论与事实的差距,同时也提高了我的C语言基础,为今后的工作打下了坚实的基础。在编辑时,必须注意一些小的细节。让我意识到自己在学习生活中经常不注意小节,忽略一些自以为可有可无的事情,这是非常错误的。使我深深的知道,细节决定成败。还有,通过实习,锻炼了我的耐心。编程是一个很耗功夫的工作,必须有足够的耐心,才能完成全部工作。建议:应多出一些题目,让我们自主选择题目作答。附录(此部分采用小五号宋体,行间距固定值14)1、原始数据cj.txt
限制150内