有10个学生,每个学生的数据包括学号、姓名、3门功课的成绩。从键盘输入10个学生的数据,要求按平均成绩降序显示出所有学生的数据(包括学号、姓名、3门课成绩、平均成绩),并将其写入文本文件result.txt中。用C语言编写程序
时间: 2023-12-15 16:21:09 浏览: 75
好的,以下是C语言的程序代码。请注意,为了方便起见,我将所有学生的数据都存储在一个结构体数组中,并使用冒泡排序算法对学生数据进行排序。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 10
#define MAX_NAME_LENGTH 20
typedef struct {
int id;
char name[MAX_NAME_LENGTH];
float grades[3];
float average;
} Student;
void bubbleSort(Student students[], int n) {
int i, j;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (students[j].average < students[j+1].average) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
}
int main() {
Student students[MAX_STUDENTS];
int i, j;
// 获取学生数据
for (i = 0; i < MAX_STUDENTS; i++) {
printf("请输入第%d个学生的学号、姓名、3门课成绩:\n", i+1);
scanf("%d %s %f %f %f", &students[i].id, students[i].name, &students[i].grades[0], &students[i].grades[1], &students[i].grades[2]);
// 计算平均成绩
students[i].average = (students[i].grades[0] + students[i].grades[1] + students[i].grades[2]) / 3.0;
}
// 对学生数据按平均成绩进行排序
bubbleSort(students, MAX_STUDENTS);
// 输出学生数据并写入文本文件
FILE *fp = fopen("result.txt", "w");
fprintf(fp, "学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for (i = 0; i < MAX_STUDENTS; i++) {
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", students[i].id, students[i].name, students[i].grades[0], students[i].grades[1], students[i].grades[2], students[i].average);
fprintf(fp, "%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", students[i].id, students[i].name, students[i].grades[0], students[i].grades[1], students[i].grades[2], students[i].average);
}
fclose(fp);
return 0;
}
```
在上面的代码中,我们首先定义了一个名为Student的结构体,其中包含了学生的学号、姓名、3门课程成绩和平均成绩。然后定义了一个bubbleSort函数,用于对学生数据按平均成绩进行排序。接着在主函数中获取学生数据,计算平均成绩,对学生数据进行排序,并将排序后的学生数据输出到控制台和文本文件中。最后在程序结束前关闭文件指针。
阅读全文