(1)学生成绩管理系统(V3.0 版) 文件 score.txt 中存放若干同学的学号及高数、英语、C 语言 3 门课的成绩,格式如下: 1001 90 80 70 1002 85 78 80 1003 60 70 76 ....... 编写程序 c10-3-1.c,实现如下功能: ① 从 score.txt 中逐个读入每个同学的成绩,用一个函数实现; ② 计算每个同学平均分,用一个函数实现; ③ 成绩按平均分排序,用一个函数实现; ④ 屏幕输出结果并写入文件 score_avg.txt 中,用一个函数实现。 文件 score.txt 中的记录应该为: 学号 高数 英语 C 语言 平均分 1002 85 78 80 81.00 1001 90 80 70 80.00 1003 60 70 76 68.67 ...........
时间: 2024-02-18 16:05:42 浏览: 228
下面是 c10-3-1.c 程序的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 1000 // 最大学生数
// 学生结构体
typedef struct {
char id[10]; // 学号
int scores[3]; // 成绩,依次为高数、英语、C 语言
double average; // 平均分
} Student;
// 从文件中读入学生成绩信息
int read_scores(Student students[]) {
FILE* fp = fopen("score.txt", "r");
if (fp == NULL) {
printf("无法打开文件 score.txt\n");
return -1;
}
int num_students = 0;
while (fscanf(fp, "%s %d %d %d", students[num_students].id,
&students[num_students].scores[0],
&students[num_students].scores[1],
&students[num_students].scores[2]) == 4) {
// 计算平均分
double sum = 0;
for (int i = 0; i < 3; i++) {
sum += students[num_students].scores[i];
}
students[num_students].average = sum / 3;
num_students++;
}
fclose(fp);
return num_students;
}
// 按平均分排序
void sort_scores(Student students[], int num_students) {
for (int i = 0; i < num_students - 1; i++) {
for (int j = i + 1; j < num_students; j++) {
if (students[i].average < students[j].average) {
// 交换两个学生的信息
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
// 屏幕输出结果并写入文件
void output_scores(Student students[], int num_students) {
FILE* fp = fopen("score_avg.txt", "w");
if (fp == NULL) {
printf("无法打开文件 score_avg.txt\n");
return;
}
printf("学号\t高数\t英语\tC语言\t平均分\n");
fprintf(fp, "学号\t高数\t英语\tC语言\t平均分\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t%d\t%d\t%d\t%.2lf\n", students[i].id,
students[i].scores[0], students[i].scores[1],
students[i].scores[2], students[i].average);
fprintf(fp, "%s\t%d\t%d\t%d\t%.2lf\n", students[i].id,
students[i].scores[0], students[i].scores[1],
students[i].scores[2], students[i].average);
}
fclose(fp);
}
int main() {
Student students[MAX_STUDENTS];
int num_students = read_scores(students);
if (num_students < 0) {
return -1;
}
sort_scores(students, num_students);
output_scores(students, num_students);
return 0;
}
```
这个程序主要分为三个部分:
1. 从文件中读入学生成绩信息,计算每个学生的平均分。这个部分使用 `read_scores` 函数实现,该函数返回读入的学生人数。
2. 按平均分排序。这个部分使用 `sort_scores` 函数实现,函数中使用了简单的冒泡排序算法。
3. 屏幕输出结果并写入文件。这个部分使用 `output_scores` 函数实现,函数中依次输出每个学生的学号、3 门课程的成绩和平均分,并将结果写入文件 score_avg.txt 中。
注意,这里使用了结构体 `Student` 来存储每个学生的信息,包括学号、成绩和平均分。同时,使用了 `#define` 定义了最大学生数,可以根据需要进行修改。
阅读全文