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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

. . . .
设计报告
学院:电子信息工程学院班级:自动化101班XX:高贤哲学号:
一、综合训练的任务及要求
任务:C语言综合训练是为了提高学生综合使用本学期我们所学的C语言知识编写大型程序的能力,了解大型程序设计的开发步骤,以上机为主,每个学生按照要求使用C语言设计一个大型程序,并提供相关的设计文档和源程序,从提交。

要求:已知在磁盘上有一个文本文件(stuin.txt),此文件存放了一组学生的成绩信息,按照如下格式存放:
1001 stuname1 89
1002 stuname2 78
1003 stuname3 60
……
1100 stuname100 87
请按照如下要求编写程序:
a.定义一个结构体类型数组,结构体类型含有学号、XX和成绩三个域;
b.将文本文件的内容读入到结构体数组中;
c.显示成绩最高的人的学号、XX和成绩(如果有相同的人要全部显示);
d.显示平均成绩、高于、低于和等于平均成绩的人数;
e.显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百比分;
f.将以上显示的信息存放到stuout.txt文件中。

二、程序实现的功能、算法描述和程序实现的流程图
程序的功能:
a.将指定文本文件的内容读入到程序定义的结构体数组中;
b.显示成绩最高的人的学号、XX和成绩(如果有相同的人全部显示);
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”的方式打开文本文件stuin.txt
S3:将文本文件stuin.txt的内容读入到结构体数组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”的方式打开文本文件stuout.txt,输出所有student[i].score=score_max的student[i]的成员student[i].num、
stuout.txt
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”的方式打开文本文件stuout.txt,输出ave到文本文件stuout.txt,然后关闭文本文件stuout.txt
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”的方式打开文本文件stuout.txt,输出more_than、equal、less_than到文本文件stuout.txt,然后关闭文本文件stuout.txt
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”的方式打开文本文件stuout.txt,输出A,B,C,D,E和A/100*100“%”,B/100*100“%”,C/100*100“%”,D/100*100“%”,E/100*100“%”到文本文件stuout.txt,然后关闭文本文件stuout.txt S49:关闭文本文件stuin.txt,stuout.txt,然后算法结束
三、程序的调试
调试过程中遇到fread函数使用错误,导致文件读取失败。

后改用fscanf函数,解决了文件读取问题。

变量的运用出现了一些问题。

最后把多个函数需要用到的需要保存原值的变量设为了全局变量。

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

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

源代码:
#include<stdio.h>
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("stuout.txt","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].score);
}
fclose(fp2);
}
void average()
{
void save_average();
sum=0;
for(i=0;i<100;i++)
sum+=student[i].score;
ave=sum/100.0;
printf("平均成绩为:%f\n\n",ave);
save_average();
}
void save_average()
{
FILE *fp2;
fp2=fopen("stuout.txt","a");
fputs("\n平均成绩为:",fp2);
fprintf(fp2,"%f\n\n",ave);
fclose(fp2);
}
void average_pare()
{
void save_average_pare();
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_pare();
}
void save_average_pare()
{
FILE *fp2;
fp2=fopen("stuout.txt","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.0*100);
printf("取得“良好”的学生人数:%d\t%.1f%%\n",B,B/100.0*100);
printf("取得“中等”的学生人数:%d\t%.1f%%\n",C,C/100.0*100);
printf("取得“及格”的学生人数:%d\t%.1f%%\n",D,D/100.0*100);
printf("取得“不及格”的学生人数:%d\t%.1f%%\n",E,E/100.0*100);
save_rank();
}
void save_rank()
{
FILE *fp2;
fp2=fopen("stuout.txt","a");
fprintf(fp2,"取得“优秀”的学生人数:%d\t%.1f%%\n",A,A/100.0*100);
fprintf(fp2,"取得“良好”的学生人数:%d\t%.1f%%\n",B,B/100.0*100);
fprintf(fp2,"取得“中等”的学生人数:%d\t%.1f%%\n",C,C/100.0*100);
fprintf(fp2,"取得“及格”的学生人数:%d\t%.1f%%\n",D,D/100.0*100);
fprintf(fp2,"取得“不及格”的学生人数:%d\t%.1f%%\n",E,E/100.0*100);
fclose(fp2);
}
void main()
{
FILE *fp1;
if((fp1=fopen("stuin.txt","r"))==NULL)
{
printf("can not open stuin.txt\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_pare();
rank();
fclose(fp1);
}。

相关文档
最新文档