用c语言编写:有10个学生,每个学生的数据包括学号、姓名、3门功课的成绩。从键盘输入10个学生的数据,要求按平均成绩降序显示出所有学生的数据(包括学号、姓名、3门课成绩、平均成绩),并将其写入文本文件result.txt中。
时间: 2023-12-15 19:44:14 浏览: 80
好的,这是一个基本的排序和文件操作问题,我可以为您提供一个C语言的解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char id[20];
char name[20];
float score1;
float score2;
float score3;
float avg_score;
} Student;
int main() {
// 定义一个学生数组,用于存储所有学生数据
Student students[10];
// 从键盘输入10个学生的数据
for (int i = 0; i < 10; i++) {
printf("请输入学生%d的学号:", i+1);
scanf("%s", students[i].id);
printf("请输入学生%d的姓名:", i+1);
scanf("%s", students[i].name);
printf("请输入学生%d的第一门课成绩:", i+1);
scanf("%f", &students[i].score1);
printf("请输入学生%d的第二门课成绩:", i+1);
scanf("%f", &students[i].score2);
printf("请输入学生%d的第三门课成绩:", i+1);
scanf("%f", &students[i].score3);
students[i].avg_score = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
}
// 按平均成绩降序排序
for (int i = 0; i < 9; i++) {
for (int j = i+1; j < 10; j++) {
if (students[i].avg_score < students[j].avg_score) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 将所有学生数据写入文件result.txt中
FILE *fp = fopen("result.txt", "w");
if (fp == NULL) {
printf("打开文件失败!");
return 0;
}
for (int i = 0; i < 10; i++) {
fprintf(fp, "学号:%s 姓名:%s 第一门课成绩:%.2f 第二门课成绩:%.2f 第三门课成绩:%.2f 平均成绩:%.2f\n", students[i].id, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].avg_score);
}
fclose(fp);
// 在控制台输出所有学生数据
for (int i = 0; i < 10; i++) {
printf("学号:%s 姓名:%s 第一门课成绩:%.2f 第二门课成绩:%.2f 第三门课成绩:%.2f 平均成绩:%.2f\n", students[i].id, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].avg_score);
}
return 0;
}
```
这段代码中,我们首先定义了一个`Student`结构体,用于存储每个学生的数据。然后通过循环从键盘输入10个学生的数据,将每个学生的数据存储到一个数组中,并计算每个学生的平均成绩。接着使用冒泡排序算法按平均成绩降序排序。最后,我们将所有学生数据写入文件`result.txt`中,并在控制台输出所有学生数据。
阅读全文