定义一个学生结构(包含学号、姓名、年龄成员),输入5个学生的数据,将这些学生数据保存到文件stu.txt中,最后按照年龄从大到小排序在屏幕上输出。
时间: 2024-04-23 15:25:19 浏览: 116
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息 学生信息包括学号、姓名、成绩
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char id[20];
char name[20];
int age;
} Student;
int main() {
// 输入5个学生的数据
Student students[5];
for (int i = 0; i < 5; i++) {
printf("请输入第%d个学生的学号、姓名、年龄,用空格分隔:", i + 1);
scanf("%s %s %d", students[i].id, students[i].name, &students[i].age);
}
// 将学生数据保存到文件stu.txt中
FILE *fp;
fp = fopen("stu.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
fprintf(fp, "%s %s %d\n", students[i].id, students[i].name, students[i].age);
}
fclose(fp);
// 从文件stu.txt中读取学生数据并排序
fp = fopen("stu.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
Student temp;
Student sorted[5];
int count = 0;
while (fscanf(fp, "%s %s %d", temp.id, temp.name, &temp.age) != EOF) {
sorted[count] = temp;
count++;
}
fclose(fp);
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (sorted[i].age < sorted[j].age) {
temp = sorted[i];
sorted[i] = sorted[j];
sorted[j] = temp;
}
}
}
// 按照年龄从大到小排序在屏幕上输出
printf("按照年龄从大到小排序的学生信息如下:\n");
for (int i = 0; i < 5; i++) {
printf("学号:%s,姓名:%s,年龄:%d\n", sorted[i].id, sorted[i].name, sorted[i].age);
}
return 0;
}
```
注意,此处假设学号和姓名最多不超过20个字符。如果需要更多,可以修改结构体定义中的数组大小。
阅读全文