1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩 2.从键盘输入10个学生的以上内容,存入文件stud.txt,关闭文件 3.打开stud.txt文件,将数据读出,查看是否正确写入,关闭文件。 4.打开文件stud.txt文件,读出数据,将10个学生按照平均分数从高到低进行排序, 分别将结果输出到屏幕上和另一文件studsort.txt中。
时间: 2024-02-27 08:52:00 浏览: 141
好的,这是一个关于 C 语言程序综合实习的具体问题,下面是我的回答:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 10
#define MAX_NAME_LENGTH 20
// 定义学生结构体
typedef struct {
char id[10];
char name[MAX_NAME_LENGTH];
int score[3];
float average_score;
} Student;
// 定义比较函数,用于排序
int cmp(const void *a, const void *b) {
Student *x = (Student *)a;
Student *y = (Student *)b;
if (x->average_score > y->average_score) {
return -1;
} else if (x->average_score < y->average_score) {
return 1;
} else {
return 0;
}
}
int main() {
// 定义学生数组
Student students[MAX_STUDENTS];
// 从键盘输入10个学生信息
printf("请输入10个学生的学号,姓名,三门课的成绩:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
scanf("%s %s %d %d %d", students[i].id, students[i].name, &students[i].score[0], &students[i].score[1], &students[i].score[2]);
students[i].average_score = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3.0;
}
// 将学生信息存入文件stud.txt
FILE *fp;
fp = fopen("stud.txt", "w");
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
for (int i = 0; i < MAX_STUDENTS; i++) {
fprintf(fp, "%s %s %d %d %d\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2]);
}
fclose(fp);
// 从文件stud.txt中读出学生信息,查看是否正确写入
fp = fopen("stud.txt", "r");
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("从文件中读出的学生信息为:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
fscanf(fp, "%s %s %d %d %d", students[i].id, students[i].name, &students[i].score[0], &students[i].score[1], &students[i].score[2]);
students[i].average_score = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3.0;
printf("%s %s %d %d %d\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2]);
}
fclose(fp);
// 按平均分数从高到低排序
qsort(students, MAX_STUDENTS, sizeof(Student), cmp);
// 输出排序结果到屏幕和文件studsort.txt
fp = fopen("studsort.txt", "w");
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("按平均分数从高到低排序的结果为:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
printf("%s %s %d %d %d %.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].average_score);
fprintf(fp, "%s %s %d %d %d %.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].average_score);
}
fclose(fp);
return 0;
}
```
上面的代码实现了以下功能:
1. 定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,并计算每个学生的平均分数。
2. 从键盘输入10个学生的信息,并将这些信息存入文件`stud.txt`中。
3. 从文件`stud.txt`中读出学生信息,查看是否正确写入。
4. 按平均分数从高到低排序学生信息,并将结果分别输出到屏幕和另一文件`studsort.txt`中。
阅读全文