编制学生课程信息管理程序\n个班的学生(不超过50人),每个学生的数据包括学号、姓名、五门课(英语、高数马哲、计算机、电子技术)的成绩,要求从键盘输入此数据,按总分队高到低的顺序保存到cj.dat 中(
时间: 2023-12-17 09:05:55 浏览: 99
好的,我明白了您的要求。这是一个比较典型的学生信息管理程序的需求。您需要一个程序来输入每个学生的数据,并按照总分从高到低的顺序保存到一个文件中。以下是实现该需求的基本步骤:
1.定义一个包含学号、姓名和五门课程成绩的结构体。
2.创建一个数组来保存所有学生的信息,数组大小为50。
3.从键盘输入学生的数据,将其存储到数组中。
4.计算每个学生的总分,并将其存储到结构体中。
5.使用快速排序算法将学生按总分从高到低排序。
6.将排序后的学生信息保存到文件中。
下面是程序的示例代码,您可以根据需要进行修改和优化。
```
#include <stdio.h>
#include <stdlib.h>
#define N 50
#define M 5
typedef struct {
int id;
char name[20];
int score[M];
int total_score;
} student;
void input_student_data(student *s);
void sort_student_data(student *s, int n);
void save_student_data(student *s, int n);
int main()
{
student s[N];
int n;
printf("请输入学生总数(不超过50人):");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("\n请输入第%d个学生的信息:\n", i+1);
input_student_data(&s[i]);
}
sort_student_data(s, n);
save_student_data(s, n);
printf("\n学生信息已保存到文件cj.dat中!\n");
return 0;
}
void input_student_data(student *s)
{
printf("请输入学生的学号:");
scanf("%d", &s->id);
printf("请输入学生的姓名:");
scanf("%s", s->name);
printf("请输入学生的五门课成绩:\n");
for (int i = 0; i < M; i++) {
printf("%c: ", 'A'+i);
scanf("%d", &s->score[i]);
s->total_score += s->score[i];
}
}
void sort_student_data(student *s, int n)
{
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (s[i].total_score < s[j].total_score) {
student t = s[i];
s[i] = s[j];
s[j] = t;
}
}
}
}
void save_student_data(student *s, int n)
{
FILE *fp = fopen("cj.dat", "w");
for (int i = 0; i < n; i++) {
fprintf(fp, "%d %s ", s[i].id, s[i].name);
for (int j = 0; j < M; j++) {
fprintf(fp, "%d ", s[i].score[j]);
}
fprintf(fp, "%d\n", s[i].total_score);
}
fclose(fp);
}
```
在运行程序时,您可以按照以下提示输入每个学生的信息:
```
请输入学生的学号:001
请输入学生的姓名:张三
请输入学生的五门课成绩:
A: 80
B: 90
C: 70
D: 85
E: 95
请输入第2个学生的信息:
请输入学生的学号:002
请输入学生的姓名:李四
请输入学生的五门课成绩:
A: 85
B: 75
C: 90
D: 80
E: 85
...
```
程序运行结束后,您可以在当前目录下找到一个名为cj.dat的文件,该文件包含按总分从高到低排序后的学生信息。每行表示一个学生的数据,以空格分隔,依次为学号、姓名、五门课程成绩和总分。
阅读全文