请完成以下功能的代码 (1)假设每个同学【学号为 9122001--9122100】有三门成绩 请随机生成 100 个同学成绩(成绩要求在 10-100 之间) (2) 将 100 个同学的学号成绩以二进制的形式保存在文件 b.dat 中。 (3) 再次从 b.dat 文件中依次读出各学生成绩,如果发现有学生成绩<60 分,则将该科目 成绩改为 0,保存回去,并打印该学生成绩,用C语言实现
时间: 2024-02-06 10:11:59 浏览: 140
以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_STUDENTS 100
#define ID_START 9122001
#define ID_END 9122100
#define SCORE_MIN 10
#define SCORE_MAX 100
int main() {
// 生成学生信息
srand(time(NULL));
unsigned int students[NUM_STUDENTS][4];
for (int i = 0; i < NUM_STUDENTS; i++) {
unsigned int id = ID_START + i;
unsigned int score1 = (unsigned int)((float)(rand()) / RAND_MAX * (SCORE_MAX - SCORE_MIN) + SCORE_MIN);
unsigned int score2 = (unsigned int)((float)(rand()) / RAND_MAX * (SCORE_MAX - SCORE_MIN) + SCORE_MIN);
unsigned int score3 = (unsigned int)((float)(rand()) / RAND_MAX * (SCORE_MAX - SCORE_MIN) + SCORE_MIN);
students[i][0] = id;
students[i][1] = score1;
students[i][2] = score2;
students[i][3] = score3;
}
// 将学生信息写入文件
FILE *fp = fopen("b.dat", "wb");
fwrite(students, sizeof(unsigned int), NUM_STUDENTS * 4, fp);
fclose(fp);
// 从文件中读取学生信息并修改低于 60 分的成绩
fp = fopen("b.dat", "rb");
fread(students, sizeof(unsigned int), NUM_STUDENTS * 4, fp);
for (int i = 0; i < NUM_STUDENTS; i++) {
unsigned int id = students[i][0];
unsigned int score1 = students[i][1];
unsigned int score2 = students[i][2];
unsigned int score3 = students[i][3];
if (score1 < 60) {
score1 = 0;
students[i][1] = score1;
}
if (score2 < 60) {
score2 = 0;
students[i][2] = score2;
}
if (score3 < 60) {
score3 = 0;
students[i][3] = score3;
}
printf("%d %d %d %d\n", id, score1, score2, score3);
}
fclose(fp);
// 将修改后的学生信息写回文件
fp = fopen("b.dat", "wb");
fwrite(students, sizeof(unsigned int), NUM_STUDENTS * 4, fp);
fclose(fp);
return 0;
}
```
以上代码随机生成了 100 个学生的成绩并保存在二进制文件中,然后再从文件中读取成绩并修改低于 60 分的成绩,最后将修改后的成绩写回文件并打印输出。注意在二进制文件中保存时要使用 `fwrite` 和 `fread` 函数。
阅读全文