《河南科技大学C语言课程设计设计报告.docx》由会员分享,可在线阅读,更多相关《河南科技大学C语言课程设计设计报告.docx(18页珍藏版)》请在三一办公上搜索。
1、河南科技大学C语言课程设计设计报告设 计 报 告 学院:电子信息工程学院 班级:自动化101班 姓名:高贤哲 学号:10104010104 一、综合训练的任务及要求 任务:C语言综合训练是为了提高学生综合使用本学期我们所学的C语言知识编写大型程序的能力,了解大型程序设计的开发步骤,以上机为主,每个学生按照要求使用C语言设计一个大型程序,并提供相关的设计文档和源程序,从网站提交。 要求:已知在磁盘上有一个文本文件,此文件存放了一组学生的成绩信息,按照如下格式存放: 1001 stuname1 89 1002 stuname2 78 1003 stuname3 60 1100 stuname100
2、 87 请按照如下要求编写程序: a定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域; b将文本文件的内容读入到结构体数组中; c显示成绩最高的人的学号、姓名和成绩; d显示平均成绩、高于、低于和等于平均成绩的人数; e显示成绩为优秀、良好、中等、及格、不及格的人数和所占百比分; f将以上显示的信息存放到stuout.txt文件中。 二、程序实现的功能、算法描述和程序实现的流程图 程序的功能: a 将指定文本文件的内容读入到程序定义的结构体数组中; b 显示成绩最高的人的学号、姓名和成绩; c 显示平均成绩、高于、低于和等于平均成绩的人数; d 显示成绩为优秀、良好、中等、及格、第
3、 1 页 ,共 16 页 设 计 报 告 不及格的人数和所占百分比; e 将以上显示的信息存放到指定文件中。 算法描述: S1:定义一个结构体类型struct student数组student100,结构体类型struct student含有int num、char name20、float score三个域;定义全局整型变量i,score_max,sum,more_than,equal,less_than,A,B,C,D,E;定义全局浮点型变量ave S2:以”r”的方式打开文本文件stuin.txt S3:将文本文件stuin.txt的内容读入到结构体数组student100中 S4:sc
4、ore_max=student0.score S5:i=1 S6:若studenti.scorescore_max执行S7;否则,执行S8 S7:score_max=studenti.score S8:i=i+1 S9:若i100,返回S6;否则,执行S10 S10:输出所有studenti.score=score_max的studenti的成员studenti.num、studenti.name和studenti.score到屏幕;以”w” 的方式打开文本文件studenti.score=score_max的stuout.txt,输出所有studenti的成员studenti.num、stu
5、denti.name和studenti.score到文本文件stuout.txt,然后关闭文本文件stuout.txt S11:sum=0 S12:i=0 S13:sum=sum+studenti.score S14:i=i+1 S15:若iave执行S23;否则,执行S24 S23:more_than=more_than+1,执行S27 S24:若studenti.score=ave执行S25;否则,执行S26 S25:equal=equal+1,执行S27 S26:less_than=less_than+1 S27:i=i+1 S28:若i100,返回S22;否则,执行S29 S29:输出
6、more_than、equal、less_than到屏幕;以”a” 的方式打开文本文件stuout.txt,输出more_than、equal、less_than到文本文件stuout.txt,然后关闭文本文件stuout.txt S30:i=0 S31:A=0 S32:B=0 S33:C=0 S34:D=0 S35:E=0 S36:若90studenti.score100执行S37;否则,执行S38 S37:A=A+1,执行S46 S38:若80studenti.score89执行S39;否则,执行S40 S39:B=B+1,执行S46 S40:若70studenti.score79执行S4
7、1;否则,执行S42 S41:C=C+1,执行S46 S42:若60studenti.score69执行S43;否则,执行S44 S43:D=D+1,执行S46 S44:若0studenti.score59执行S45 S45:E=E+1 S46:i=i+1 S47:若i100,返回S36;否则,执行S48 第 3 页 ,共 16 页 设 计 报 告 S48:输出A,B,C,D,E和A/100*100“%”, B/100*100“%” ,C/100*100“%”, D/100*100“%”, E/100*100“%”到屏幕;以”a” 的方式打开文本文件stuout.txt,输出A,B,C,D,E
8、和A/100*100“%”, B/100*100“%” ,C/100*100“%”, D/100*100“%”, E/100*100“%”到文本文件stuout.txt,然后关闭文本文件stuout.txt S49:关闭文本文件stuin.txt,stuout.txt,然后算法结束 流程图: 开始定义一个结构体类型struct student数组student100,结构体类型struct student含有int num、char name20、float score三个域定义全局整型变量i,score_max,sum,more_than,equal,less_than,A,B,C,D,E;
9、定义全局浮点型变量ave主函数开始以”r”的方式打开文本文件stuin.txt是打开错误否将文本文件stuin.txt的内容读入到结构体数组student100中max函数输出“can not open stuin.txt”到屏幕average函数average_compare函数rank函数关闭文本文件stuin.txt主函数结束结束第 4 页 ,共 16 页 设 计 报 告 max函数开始score_max=student0.scorei=1iscore_max是score_max=studenti.scorei=i+1输出“取得最高成绩的学生的信息:”到屏幕i=0否i100是否stude
10、nti.score=score_max是输出studenti.num、studenti.name和studenti.score到屏幕i=i+1save_max函数max函数结束,返回第 5 页 ,共 16 页 设 计 报 告 save_max函数开始以”w”的方式打开文本文件stuout.txt输出“取得最高成绩的学生的信息:”到文本文件stuout.txti=0i100是否否studenti.score=score_max是输出studenti.num、studenti.name和studenti.score到文本文件stuout.txti=i+1关闭文本文件stuout.txtsave_m
11、ax函数结束,返回第 6 页 ,共 16 页 设 计 报 告 average函数开始sum=0i=0i100是否sum=sum+studenti.scorei=i+1ave=sum/100输出ave到屏幕save_average函数average函数结束,返回save_average函数开始以”a”的方式打开文本文件stuout.txt输出ave到文本文件stuout.txt关闭文本文件stuout.txtsave_average函数结束,返回第 7 页 ,共 16 页 设 计 报 告 average_compare函数开始more_than=0equal=0less_than=0i=0iav
12、e是否studenti.score=ave是more_than=more_than+1equal=equal+1否less_than=less_than+1i=i+1输出more_than到屏幕输出equal到屏幕输出less_than到屏幕save_average_compare函数average_compare函数结束,返回第 8 页 ,共 16 页 设 计 报 告 save_average_compare函数开始以”a”的方式打开文本文件stuout.txt输出more_than到文本文件stuout.txt输出equal到文本文件stuout.txt输出less_than到文本文件st
13、uout.txt关闭文本文件stuout.txtsave_average_compare函数结束,返回save_rank函数开始以”a”的方式打开文本文件stuout.txt输出A和A/100*100“%”到文本文件stuout.txt输出B和B/100*100“%”到文本文件stuout.txt输出C和C/100*100“%”到文本文件stuout.txt输出D和D/100*100“%”到文本文件stuout.txt输出E和E/100*100“%”到文本文件stuout.txt关闭文本文件stuout.txtsave_rank函数结束,返回第 9 页 ,共 16 页 设 计 报 告 rank
14、函数开始A=0B=0C=0D=0E=0i=0i100是否否90studenti.score100是否80studenti.score89是70studenti.score79否是否60studenti.score69是A=A+1B=B+1C=C+1D=D+1E=E+1i=i+1输出A和A/100*100“%”到屏幕输出B和B/100*100“%”到屏幕输出C和C/100*100“%”到屏幕输出D和D/100*100“%”到屏幕输出E和E/100*100“%”到屏幕save_rank函数rank函数结束,返回第 10 页 ,共 16 页 设 计 报 告 三、程序的调试 调试过程中遇到fread函
15、数使用错误,导致文件读取失败。后改用fscanf函数,解决了文件读取问题。 变量的运用出现了一些问题。最后把多个函数需要用到的需要保存原值的变量设为了全局变量。 四、课程设计总结与体会 通过这次课程设计,我对循环结构控制、函数调用、结构体、文件操作更加熟悉,对C语言程序设计有了更加深入的认识,锻炼了编写大型程序的能力,了解了大型程序设计的开发步骤。 C语言主体应是由函数调用构成的,应尽可能把相对独立的功能单独用一个函数来编写,这样可以提高程序的可读性,也能降低编写大型程序的难度,减少编程出错的可能性。 第 11 页 ,共 16 页 设 计 报 告 源代码: #include struct st
16、udent int num; char name11; int score; student100; int i,score_max,sum,more_than,equal,less_than,A,B,C,D,E; float ave; void max void save_max 第 12 页 ,共 16 页 void save_max; score_max=student0.score; for(i=0;iscore_max) score_max=studenti.score; printf(取得最高成绩的学生的信息:n); for(i=0;i100;i+) if(studenti.sco
17、re=score_max) printf(%dt%st%dn,studenti.num,studenti.name,studenti.score); printf(n); save_max; 设 计 报 告 FILE *fp2; fp2=fopen(stuout.txt,w); fputs(取得最高成绩的学生的信息:n,fp2); for(i=0;i100;i+) if(studenti.score=score_max) fprintf(fp2,%dt%st%dn,studenti.num,studenti.name,studenti.score); fclose(fp2); void ave
18、rage void save_average 第 13 页 ,共 16 页 void save_average; sum=0; for(i=0;i100;i+) sum+=studenti.score; ave=sum/100.0; printf(平均成绩为:%fnn,ave); save_average; FILE *fp2; fp2=fopen(stuout.txt,a); fputs(n平均成绩为:,fp2); fprintf(fp2,%fnn,ave); fclose(fp2); 设 计 报 告 void average_compare void save_average_compar
19、e 第 14 页 ,共 16 页 void save_average_compare; more_than=0; equal=0; less_than=0; for(i=0;iave) more_than+; else if(studenti.score=ave) equal+; else less_than+; FILE *fp2; fp2=fopen(stuout.txt,a); fprintf(fp2,高于平均成绩的学生人数:%dn,more_than); fprintf(fp2,等于平均成绩的学生人数:%dn,equal); fprintf(fp2,低于平均成绩的学生人数:%dnn,l
20、ess_than); fclose(fp2); 设 计 报 告 void rank void save_rank void save_rank; A=B=C=D=E=0; for(i=0;i=90)&(studenti.score=80)&(studenti.score=70)&(studenti.score=60)&(studenti.score=69) D+; else E+; FILE *fp2; fp2=fopen(stuout.txt,a); fprintf(fp2,取得“优秀”的学生人数:%dt%.1f%n,A,A/100.0*100); 第 15 页 ,共 16 页 设 计 报
21、告 fprintf(fp2,取得“良好”的学生人数:%dt%.1f%n,B,B/100.0*100); fprintf(fp2,取得“中等”的学生人数:%dt%.1f%n,C,C/100.0*100); fprintf(fp2,取得“及格”的学生人数:%dt%.1f%n,D,D/100.0*100); fprintf(fp2,取得“不及格”的学生人数:%dt%.1f%n,E,E/100.0*100); fclose(fp2); void main FILE *fp1; if(fp1=fopen(stuin.txt,r)=NULL) for(i=0;i100;i+) fscanf(fp1,%d%s%d,&studenti.num,studenti.name,&studenti.score); printf(can not open stuin.txtn); exit(0); max; average; average_compare; rank; fclose(fp1); 第 16 页 ,共 16 页