编写简单学生成绩管理程序。
题目要求:
1、键盘输入以下数据(学号、姓名、3门专业课成绩)
2、计算专业课平均成绩,将原始数据和计算出的平均成绩存放在studentScore.dat文件中
3、将该文件中的数据读取至相应的结构体数组并在显示器上输出
在纸上写好之后上机发现有很多小错误,浪费了很多订正时间,特此记录。
#include <stdio.h>
#define M 2 //学生人数
#define N 3
struct Student{
int sno;
char sname[10];
float score[N];
float aver;
};
int main(){
Student students[M],students_1[M];
float aver;
printf("请依次输入每位学生的学号、姓名、以及三门专业课的成绩:\n");
for(int i = 0; i < M ;i++){
printf("请输入第%d位同学的信息:\n", i+1);
scanf("%d%s%f%f%f",&students[i].sno, students[i].sname, &students[i].score[0],
&students[i].score[1], &students[i].score[2]);
}
FILE *fp = fopen("./studentScore.dat", "w");
if(fp == NULL){
perror("file open failed!");
return 0;
}
for(int i = 0; i < M ;i++){
aver = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3;
fprintf(fp, "%d %s %f %f %f %f\n",
students[i].sno, students[i].sname, students[i].score[0],
students[i].score[1], students[i].score[2], aver);
}
fclose(fp);
FILE *fp_1 = fopen("./studentScore.dat", "r");
if(fp == NULL){
perror("file open failed!");
return 0;
}
if(!feof(fp_1)){
for(int i = 0; i < M ;i++){
fscanf(fp_1, "%d %s %f %f %f %f\n",
&students_1[i].sno, students_1[i].sname, &students_1[i].score[0],
&students_1[i].score[1], &students_1[i].score[2], &students_1[i].aver);
}
}
for(int i = 0; i < M ;i++){
printf("学号:%d 姓名:%s 专业课成绩1:%f 成绩2:%f 成绩3:%f 平均分:%f\n",
students_1[i].sno, students_1[i].sname, students_1[i].score[0],
students_1[i].score[1], students_1[i].score[2], students_1[i].aver);
}
fclose(fp_1);
return 0;
}