1、C语言课设实习报告C语言课程设计实习报告目 录一、程序分析与设计 1二、流程图 2三、源程序清单 6四、调试过程 9五、程序有待改进的地方 10六、本次实习的收获和建议 10附录 11一、程序分析与设计1、先用记事本编辑文件stu1.dat存储一个班学习成绩。然后在C环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。2、利用循环使每个学生的三门功课的成绩相加,然后再把和除以三就得到了平均成绩。接着用冒泡法利用平均分的高低排出名次。最后用fprintf将每个学生的信息写入到stu2.dat文件。3.计算各科成绩的分数段时,用到for
2、循环if条件,事先定义各分数段人数变量,并赋值为0.如果符合各分数段符合if条件变量+自增。再用fprintf将分数段的信息写入到stu2.dat文件。4.在屏幕上打印学生的成绩,用printf函数for循环即可打出每个学生的成绩。格式对齐用n换行t制表符。5打印不及格学生的信息,不及格应满足stui.score=90 B均成绩=85且至少一科为100 C均分=85且至少有两科=95 D均分排名前三名。满足着四个条件中的任一个且每门功课及格以上,即为优秀。即可表示为:( 满足A| 满足B | 满足C | 满足D )&( 各科成绩=60 )A即为stui.aver=90 B即为stui.aver
3、=85&(stui.score0=100|stui.score1=100|stui.score2=100)C即为stui.aver=85&( a | b | c )a为英语 C语言都=95 即为(stui.score0=95&stui.score1=95)b为英语 高数都=95 即为(stui.score0=95&stui.score2=95)c为C语言 高数都=95 即为(stui.score1=95&stui.score2=95)D即为 stui.rank=60 即可表示为(stui.score0=60&stui.score1=60&stui.score2=60)用逻辑运算符&及|if e
4、lse if语句即可实现程序。二、流程图void main() /主函数void duwenjian() /读入文件函数void xiewenjian() /向文件写出函数void gekepingjun() /求各科平均分void pingjunScore() /每学生三门功课平均分void RankStudent() /学生排名void fengshuduan() /各科分数段void Print() /向屏幕打印学生成绩条void printbujige() /向屏幕打印不及格学生信息void printyoudenStudent() / 向屏幕打印优等生信息各个函数流程图如下: 设计思
5、路void main() void duwenjian()主函数 读入文件voidxiewenjian() 写文件 void gekepingjun() 求各科平均分函数 void pingjunScore() 三门功课平均分 void RankStudent() 学生排名 void fengshuduan() 各分数段人数 void printbujige() 打印不及格信息void Print() 打印各科成绩 void printyoudenStudent() 优等生三、源程序清单#include#include#define N 15struct student int num; ch
6、ar name20; int score3; float aver; int rank;stuN;int E1=0,E2=0,E3=0,E4=0,E5=0,C1=0,C2=0,C3=0,C4=0,C5=0,M1=0,M2=0,M3=0,M4=0,M5=0;float averEnglish=0,averClanguage=0,averMath=0;void duwenjian();void xiewenjian();void gekepingjun();void pingjunScore();void RankStudent();void fengshuduan();void Print();
7、void printbujige();void printyoudenStudent();void main() int i;int k; duwenjian();/读入文件 pingjunScore();/各学生平均分 gekepingjun();/各科平均分 RankStudent();/排名 fengshuduan();/算分数段 xiewenjian();/写文件 printf(输入1 2 3 n1打印学生成绩 2打印不及格信息 3打印优等生 n); for(k=0;k+) scanf(%d,&i); if(i=1)Print();/屏幕上打印学生成绩 else if(i=2) pri
8、ntbujige();/打印不及格信息 else if(i=3) printyoudenStudent();/打印优等生 else(i!=1&i!=2&i!=3); printf(请输入1 2 3n); void duwenjian() FILE *fp; int i; if(fp=fopen(E:xiaoqiang.txt,r)=NULL) printf(can not open the file!n); exit(0); for(i=0;iN;i+) fscanf(fp,%d%s%d%d%d,&stui.num,&stui.name ,&stui.score0,&stui.score1,&
9、stui.score2 ); fclose(fp);void xiewenjian() FILE *fp; int i; if(fp=fopen(stu1.txt,w)=NULL) printf(can not open the file!n); exit(0); fprintf(fp,学号 姓名 英语 C语言 高数 平均分 名次n); for(i=0;iN;i+) fprintf(fp,%dt%st%dt%dt%dt%5.2ft%dn,stui.num ,stui.name ,stui.score0,stui.score1,stui.score2,stui.aver,stui.rank );
10、 fprintf(fp,n); fprintf(fp,分数段t英语tC语言t高数n);fprintf(fp,=90t%dt%dt%dn,E5,C5,M5); fprintf(fp,平均分 %5.3ft%5.3ft%5.3ft,averEnglish,averClanguage,averMath); fclose(fp);void pingjunScore() int i; for(i=0;iN;i+) stui.aver=(stui.score0+stui.score1+stui.score2)/3.0 ;void gekepingjun() int i; for(i=0;iN;i+) ave
11、rEnglish=stui.score0+averEnglish; averClanguage=stui.score1+averClanguage; averMath=stui.score2+averMath; averEnglish=averEnglish/N; averClanguage=averClanguage/N; averMath=averMath/N;void fengshuduan() int i; for(i=0;iN;i+) if(stui.score060) E1+; if(stui.score0=60) E2+; if(stui.score0=70) E3+; if(s
12、tui.score0=80) E4+; if(stui.score0=90) E5+; if(stui.score160) C1+; if(stui.score1=60) C2+; if(stui.score1=70) C3+; if(stui.score1=80) C4+; if(stui.score1=90) C5+; if(stui.score260) M1+; if(stui.score2=60) M2+; if(stui.score2=70) M3+; if(stui.score2=80) M4+; if(stui.score2=90) M5+; void RankStudent()
13、 int i,j; for(i=0;iN;i+) stui.rank=1; for(j=0;jN;j+) if(stui.averstuj.aver) stui.rank+; void Print() int i; printf(每名学生的成绩:nn); for(i=0;iN;i+) printf(学号%dt姓名 %st英语 %d tC语言 %d t高数 %dn,stui.num,stui.name,stui.score0,stui.score1,stui.score2);void printbujige() int i; printf(n不及格学生:n); for(i=0;iN;i+) if
14、(stui.score060|stui.score160|stui.score260 ) printf(学号%dt姓名 %st不及格课程及成绩: ,stui.num,stui.name); if(stui.score060)printf( 英语%dt,stui.score0); if(stui.score160)printf(C语言%dt,stui.score1); if(stui.score260)printf( 高数%dt,stui.score2); printf(n); void printyoudenStudent()int i;printf(n优秀学生的名单n);for(i=0;i=
15、90)|(stui.aver=85)&(stui.score0=100|stui.score1=100|stui.score2=100)&(stui.score0=60&stui.score1=60&stui.score2=60) printf(学号%dt姓名 %st英语%dtC语言%d 高数%dt 平均分%5.2ft名次%dn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.aver,stui.rank);else if(stui.rank=60&stui.score1=60&stui.score2=60) printf
16、(学号%dt姓名 %st英语%dtC语言%d 高数%dt 平均分%5.2ft名次%dn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.aver,stui.rank);else if(stui.aver=85)&(stui.score0=95&stui.score1=95)|(stui.score1=95&stui.score2=95)|(stui.score0=95&stui.score2=95)&(stui.score0=60&stui.score1=60&stui.score2=60) printf(学号%dt姓名
17、%st英语%dtC语言%d 高数%dt 平均分%5.2ft名次%dn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.aver,stui.rank);四、调试过程1.在程序运行的过程中,出现了很多的错误。有很复杂的问题,也不乏许多低级的错误。在写入文件的时候,首先我用的是fwrite,而在读入文件的时候用的是fread,后来才发现这两个语句都只是对二进制的文件进行操作,实际上我们要用到的fscanf、fprintf这两个语句。2.在程序运行后开始写出文件结果中出现乱码,原来是原文本文件中添加了汉字的标注,在读入文件程序中f
18、scanf不能识别,故写出乱码。删除汉字符标注后写出的文件即为正确的信息。3.在分数段函数的编写中开始只在该函数中定义了各分数段人数的局部变量,而在后面的fprintf printf函数输出结果时却不能利用该定义的变量。正确的做法是在main函数中定义全局变量,这样才能使其他函数也能利用该定义的变量。4.在编写优等生的函数中,由于优等生要求满足的条件较多。编写的各段代码很乱。后来仔细分析了各个需要满足的条件之间的逻辑关系,利用逻辑关系实现了程序,但仍较为繁琐。在该程序中又出先多重括号不匹配的错误。由于没有弄情if语句的嵌套,在连续用了三个if 和printf语句,结果使有些学生的信息连续打出了
19、几次。在改为else if语句后即得出正确结果。5在程序调试过程中没有利用设置断点的方法,使错误查找较困难。五、程序有待改进的地方1.在程序编写时用了较多if语句的嵌套使程序的可读性降低。2.在编写分数段函数时在main函数中定义了较多的变量,占用了较多的内存空间,应当适当优化。3.程序运行后要求分别打印出三项内容学生成绩,不及格学生,优等生信息可以用switch语句编写一个菜单选项,这样比通过用if语句更显简单。通过在界面上输入相应的字符,让需要打印出信息。六、本次实习的收获和建议1.通过这次实习第一次编写了较多程序,通过函数调用将各个函数模块联系起来,来组成较大的程序,实现其功能。这使我感
20、到结构化编写程序的重要性。只有通过结构化的程序设计将各部分小功能组合起来,才能编写出功能较强的大程序。2.在这次上机调试调试过程中,我学会了用设置断点的方法查找程序中出现的错误,这样使得程序的错误查找更为容易。进一步对VC+的编程环境有所了解,对上机调试有了更深入的认识。3.在编写程序的各段函数中,感到自己对书上的一些内容理解和掌握的不够。对一些长用的语句特点记忆不清,结果使程序的编写较为困难。应加深对课本的理解。4.通过本次实习我感到一个编程者应有认真仔细的态度,只有认真仔细才能查找出程序中的错误,有所提高。附录1、 原始数据xiaoqiang.tst2. 生成文件stu1.tst3、运行结果 输入1按enter键 输入2按enter键输入3按enter键 输入4按enter键
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1