假设有3个学生,每个学生有4门课程的成绩,通过键盘输入这3个学生的有关数据,主要包括有学号、姓名以及4门课程成绩,如表1所示。现要求计算每个学生的总分和平均分,同时把每个学生的数据(学号、姓名、4门课程成绩、总分及平均分)存放在硬盘文件studdata1.dat中。
时间: 2023-12-15 12:00:53 浏览: 60
好的,以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_STU_NUM 3
#define MAX_COURSE_NUM 4
// 学生结构体
typedef struct {
int id;
char name[MAX_NAME_LEN];
int scores[MAX_COURSE_NUM];
int total_score;
float avg_score;
} Student;
int main() {
Student students[MAX_STU_NUM];
int i, j;
// 输入学生数据
for (i = 0; i < MAX_STU_NUM; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("4门课程成绩:");
for (j = 0; j < MAX_COURSE_NUM; j++) {
scanf("%d", &students[i].scores[j]);
}
}
// 计算每个学生的总分和平均分
for (i = 0; i < MAX_STU_NUM; i++) {
students[i].total_score = 0;
for (j = 0; j < MAX_COURSE_NUM; j++) {
students[i].total_score += students[i].scores[j];
}
students[i].avg_score = (float)students[i].total_score / MAX_COURSE_NUM;
}
// 将学生数据写入文件studdata1.dat中
FILE *fp = fopen("studdata1.dat", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
fwrite(students, sizeof(Student), MAX_STU_NUM, fp);
fclose(fp);
// 从文件studdata1.dat中读取学生数据并显示
Student students_read[MAX_STU_NUM];
fp = fopen("studdata1.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
fread(students_read, sizeof(Student), MAX_STU_NUM, fp);
fclose(fp);
printf("学号\t姓名\t课程1\t课程2\t课程3\t课程4\t总分\t平均分\n");
for (i = 0; i < MAX_STU_NUM; i++) {
printf("%d\t%s\t", students_read[i].id, students_read[i].name);
for (j = 0; j < MAX_COURSE_NUM; j++) {
printf("%d\t", students_read[i].scores[j]);
}
printf("%d\t%.2f\n", students_read[i].total_score, students_read[i].avg_score);
}
return 0;
}
```
运行后,程序会先通过键盘输入学生数据,然后计算每个学生的总分和平均分,并将每个学生的数据写入文件studdata1.dat中。最后,程序会从文件studdata1.dat中读取学生数据并显示在屏幕上。注意,在学生姓名的输入过程中,如果学生姓名超过了最大长度MAX_NAME_LEN,会导致输入失败。
阅读全文