C语言编写一个录入和修改学生信息的程序,包含学生姓名、学号、各科成绩并按课程排序显示学生信息
时间: 2024-04-03 12:34:27 浏览: 284
好的,下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SUBJECTS 5 // 最多支持 5 科目
struct student {
char name[20];
char id[15];
float scores[MAX_SUBJECTS];
};
int main() {
struct student stu[100];
int n, m, i, j, k;
char choice;
float temp;
printf("请输入学生人数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第 %d 个学生的姓名和学号:", i + 1);
scanf("%s %s", stu[i].name, stu[i].id);
for (j = 0; j < MAX_SUBJECTS; j++) {
printf("请输入 %s 的第 %d 科成绩:", stu[i].name, j + 1);
scanf("%f", &stu[i].scores[j]);
}
}
for (;;) { // 无限循环,直到用户选择退出
printf("\n请选择要进行的操作:\n");
printf("1. 显示所有学生信息\n");
printf("2. 修改学生成绩\n");
printf("3. 退出程序\n");
fflush(stdin); // 刷新输入缓冲区,避免影响下一次输入
scanf("%c", &choice);
switch (choice) {
case '1':
// 冒泡排序,按照第一科成绩从高到低排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (stu[j].scores[0] < stu[j + 1].scores[0]) {
struct student temp_stu = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp_stu;
}
}
}
printf("\n学生信息如下:\n");
for (i = 0; i < n; i++) {
printf("姓名:%s,学号:%s,成绩:", stu[i].name, stu[i].id);
for (j = 0; j < MAX_SUBJECTS; j++) {
printf("%.2f ", stu[i].scores[j]);
}
printf("\n");
}
break;
case '2':
printf("\n请输入要修改成绩的学生姓名和科目序号:");
scanf("%s %d", stu[n].name, &m);
for (i = 0; i < n; i++) {
if (strcmp(stu[i].name, stu[n].name) == 0) {
printf("请输入新的成绩:");
scanf("%f", &temp);
stu[i].scores[m - 1] = temp;
printf("修改成功!\n");
break;
}
}
if (i == n) {
printf("没有找到该学生!\n");
}
break;
case '3':
printf("\n谢谢使用!\n");
return 0;
default:
printf("\n输入有误,请重新输入!\n");
}
}
}
```
代码中使用了一个结构体 `struct student` 来存储每一个学生的信息,包括姓名、学号和各科成绩。首先,用户需要输入学生人数和每个学生的信息,然后进入一个无限循环,用户可以选择显示所有学生信息、修改学生成绩或退出程序。如果用户选择显示所有学生信息,程序会按照第一科成绩从高到低排序后输出所有学生的信息;如果用户选择修改学生成绩,程序会要求输入要修改成绩的学生姓名和科目序号,然后修改对应学生和科目的成绩。
需要注意的是,用户输入选择操作时,需要用 `fflush(stdin)` 刷新输入缓冲区,避免影响下一次输入。同时,为了避免用户输入错误的操作,可以使用 `default` 分支来提示用户重新输入。
阅读全文
相关推荐















