当前位置:文档之家› 河南科技大学C语言课程设计设计报告 含源代码

河南科技大学C语言课程设计设计报告 含源代码

河南科技大学C语言课程设计设计报告 含源代码
河南科技大学C语言课程设计设计报告 含源代码

设计报告一、综合训练的任务及要求

任务:C语言综合训练是为了提高学生综合使用本学期我们所学的C语言知识编写大型程序的能力,了解大型程序设计的开发步骤,以上机为主,每个学生按照要求使用C 语言设计一个大型程序,并提供相关的设计文档和源程序,从网站提交。

要求:已知在磁盘上有一个文本文件(),此文件存放了一组学生的成绩信息,按照如下格式存放:

1001 stuname1 89

1002 stuname2 78

1003 stuname3 60

……

1100 stuname100 87

请按照如下要求编写程序:

a.定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域;

b.将文本文件的内容读入到结构体数组中;

c.显示成绩最高的人的学号、姓名和成绩(如果有相同的人要全部显示);

d.显示平均成绩、高于、低于和等于平均成绩的人数;

e.显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百比分;

f.将以上显示的信息存放到文件中。

二、程序实现的功能、算法描述和程序实现的流程图

程序的功能:

a.将指定文本文件的内容读入到程序定义的结构体数组中;

b.显示成绩最高的人的学号、姓名和成绩(如果有相同的人全部显示);

c.显示平均成绩、高于、低于和等于平均成绩的人数;

d.显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百分比;

e.将以上显示的信息存放到指定文件中。

算法描述:

S1:定义一个结构体类型struct student数组student[100],结构体类型struct student含有int num、char name[20]、float score三个域;定义全局整型变量i,score_max,sum,more_than,equal,less_than,A,B,C,D,E;

定义全局浮点型变量ave

S2:以”r”的方式打开文本文件

S3:将文本文件的内容读入到结构体数组student[100]中

S4:score_max=student[0].score

S5:i=1

S6:若student[i].score>score_max执行S7;否则,执行S8

S7:score_max=student[i].score

S8:i=i+1

S9:若i<100,返回S6;否则,执行S10

S10:输出所有student[i].score=score_max的student[i]的成员student[i].num、student[i].name和student[i].score到屏幕;以”w”

的方式打开文本文件,输出所有student[i].score=score_max的student[i]的成员student[i].num、student[i].name和student[i].score到文本文件,然后关闭文本文件

S11:sum=0

S12:i=0

S13:sum=sum+student[i].score

S14:i=i+1

S15:若i<100,返回S13;否则,执行S16

S16:ave=sum/100

S17:输出ave到屏幕;以”a”的方式打开文本文件,输出ave到文本文件,然后关闭文本文件

S18:i=0

S19:more_than=0

S20:equal=0

S21:less_than=0

S22:若student[i].score>ave执行S23;否则,执行S24

S23:more_than=more_than+1,执行S27

S24:若student[i].score=ave执行S25;否则,执行S26

S25:equal=equal+1,执行S27

S26:less_than=less_than+1

S27:i=i+1

S28:若i<100,返回S22;否则,执行S29

S29:输出more_than、equal、less_than到屏幕;以”a”的方式打开文本文件,输出more_than、equal、less_than到文本文件,然后关闭文本文件

S30:i=0

S31:A=0

S32:B=0

S33:C=0

S34:D=0

S35:E=0

S36:若90≤student[i].score≤100执行S37;否则,执行S38

S37:A=A+1,执行S46

S38:若80≤student[i].score≤89执行S39;否则,执行S40

S39:B=B+1,执行S46

S40:若70≤student[i].score≤79执行S41;否则,执行S42

S41:C=C+1,执行S46

S42:若60≤student[i].score≤69执行S43;否则,执行S44

S43:D=D+1,执行S46

S44:若0≤student[i].score≤59执行S45

S45:E=E+1

S46:i=i+1

S47:若i<100,返回S36;否则,执行S48

S48:输出A,B,C,D,E和A/100*100“%”, B/100*100“%”,C/100*100“%”, D/100*100“%”, E/100*100“%”到屏幕;以”a”的方式打开文本文件,输出A,B,C,D,E和A/100*100“%”, B/100*100“%”,C/100*100“%”, D/100*100“%”, E/100*100“%”到文本文件,然后关闭文本文件

S49:关闭文本文件,,然后算法结束流程图:

三、程序的调试

调试过程中遇到fread函数使用错误,导致文件读取失败。后改用fscanf函数,解决了文件读取问题。

变量的运用出现了一些问题。最后把多个函数需要用到的需要保存原值的变量设为了全局变量。

四、课程设计总结与体会

通过这次课程设计,我对循环结构控制、函数调用、结构体、文件操作更加熟悉,对C语言程序设计有了更加深入的认识,锻炼了编写大型程序的能力,了解了大型程序设计的开发步骤。

C语言主体应是由函数调用构成的,应尽可能把相对独立的功能单独用一个函数来编写,这样可以提高程序的可读性,也能降低编写大型程序的难度,减少编程出错的可能性。

源代码:

#include<>

struct student

{

int num;

char name[11];

int score;

}student[100];

int i,score_max,sum,more_than,equal,less_than,A,B,C,D,E;

float ave;

void max()

{

void save_max();

score_max=student[0].score;

for(i=0;i<100;i++)

if(student[i].score>score_max)

score_max=student[i].score;

printf("取得最高成绩的学生的信息:\n");

for(i=0;i<100;i++)

if(student[i].score==score_max)

{

printf("%d\t%s\t%d\n",student[i].num,student[i].name,student[i].score);

}

printf("\n");

save_max();

}

void save_max()

{

FILE *fp2;

fp2=fopen("","w");

fputs("取得最高成绩的学生的信息:\n",fp2);

for(i=0;i<100;i++)

if(student[i].score==score_max)

{

fprintf(fp2,"%d\t%s\t%d\n",student[i].num,student[i].name,student[i].scor e);

}

fclose(fp2);

}

void average()

{

void save_average();

sum=0;

for(i=0;i<100;i++)

sum+=student[i].score;

ave=sum/;

printf("平均成绩为:%f\n\n",ave);

save_average();

}

void save_average()

{

FILE *fp2;

fp2=fopen("","a");

fputs("\n平均成绩为:",fp2);

fprintf(fp2,"%f\n\n",ave);

fclose(fp2);

}

void average_compare()

{

void save_average_compare();

more_than=0;

equal=0;

less_than=0;

for(i=0;i<100;i++)

{

if(student[i].score>ave)

more_than++;

else if(student[i].score==ave)

equal++;

else less_than++;

}

printf("高于平均成绩的学生人数:%d\n",more_than);

printf("等于于平均成绩的学生人数:%d\n",equal);

printf("低于平均成绩的学生人数:%d\n\n",less_than);

save_average_compare();

}

void save_average_compare()

{

FILE *fp2;

fp2=fopen("","a");

fprintf(fp2,"高于平均成绩的学生人数:%d\n",more_than);

fprintf(fp2,"等于平均成绩的学生人数:%d\n",equal);

fprintf(fp2,"低于平均成绩的学生人数:%d\n\n",less_than);

fclose(fp2);

}

void rank()

{

void save_rank();

A=B=C=D=E=0;

for(i=0;i<100;i++)

{

if((student[i].score>=90)&&(student[i].score<=100))

A++;

else if((student[i].score>=80)&&(student[i].score<=89)) B++;

else if((student[i].score>=70)&&(student[i].score<=79)) C++;

else if((student[i].score>=60)&&(student[i].score<=69)) D++;

else E++;

}

printf("取得“优秀”的学生人数:%d\t%.1f%%\n",A,A/*100);

printf("取得“良好”的学生人数:%d\t%.1f%%\n",B,B/*100);

printf("取得“中等”的学生人数:%d\t%.1f%%\n",C,C/*100);

printf("取得“及格”的学生人数:%d\t%.1f%%\n",D,D/*100);

printf("取得“不及格”的学生人数:%d\t%.1f%%\n",E,E/*100);

save_rank();

}

void save_rank()

{

FILE *fp2;

fp2=fopen("","a");

fprintf(fp2,"取得“优秀”的学生人数:%d\t%.1f%%\n",A,A/*100);

fprintf(fp2,"取得“良好”的学生人数:%d\t%.1f%%\n",B,B/*100);

fprintf(fp2,"取得“中等”的学生人数:%d\t%.1f%%\n",C,C/*100);

fprintf(fp2,"取得“及格”的学生人数:%d\t%.1f%%\n",D,D/*100);

fprintf(fp2,"取得“不及格”的学生人数:%d\t%.1f%%\n",E,E/*100);

fclose(fp2);

}

void main()

{

FILE *fp1;

if((fp1=fopen("","r"))==NULL)

{

printf("can not open \n");

exit(0);

}

for(i=0;i<100;i++)

fscanf(fp1,"%d%s%d",&student[i].num,student[i].name,&student[i].score);

max();

average();

average_compare();

rank();

fclose(fp1);

}

相关主题
文本预览
相关文档 最新文档