用c语言写在文件 Filein.txt 中存在两组数据,每组数据分若干行,每行包含学号(无符号整型)及课程成绩(非 负小数)。当学号为 0时,表示该组数据结束。每组数据中学号无重复。请编程读入该文件,按学号对成绩进行合并,并按学号从小到大输出合并后的数据。输出:按学号从小到大顺序输出的合并结果。每行输出两项数据,分别为学生的学号和成绩,中间用空格分隔。合并的规则为同学号的成绩相加。
时间: 2024-02-22 21:57:49 浏览: 68
好的,以下是一个用C语言实现读取文件、按学号进行成绩合并并输出的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
char *line = NULL;
size_t len = 0;
ssize_t read;
int id;
float score;
float score_dict[100] = {0}; // 定义一个数组,用于存储学号和成绩
fp = fopen("Filein.txt", "r"); // 打开文件
if (fp == NULL) {
printf("Failed to open the file.\n");
exit(EXIT_FAILURE);
}
while ((read = getline(&line, &len, fp)) != -1) { // 逐行读取文件内容
sscanf(line, "%d %f", &id, &score); // 解析学号和成绩
if (id == 0) { // 如果学号为0,则表示一组数据结束,输出结果并清空数组
for (int i = 1; i <= 99; i++) {
if (score_dict[i] != 0) {
printf("%d %.1f\n", i, score_dict[i]);
score_dict[i] = 0;
}
}
} else {
score_dict[id] += score; // 否则,将学号和成绩累加到数组中
}
}
fclose(fp); // 关闭文件
if (line) {
free(line);
}
exit(EXIT_SUCCESS);
}
```
这段代码首先定义了一个长度为100的浮点数数组`score_dict`,用于存储学号和成绩。然后打开文件并逐行读取文件内容,使用`sscanf`函数解析每行内容中的学号和成绩。如果学号为0,则表示一组数据结束,遍历数组并输出结果,然后将数组清空;否则,将学号和成绩累加到数组中。最后,关闭文件并释放内存。
阅读全文