学生的记录由学号、姓名、专业组成,根据班级人数,将学生记录存放在结构体数组中。由于部分同学转专业,学生记录发生了变化。请编程实现根据学号查询学生记录并修改专业(可能不止一人转专业),分别输出转专业和未转专业的学生记录。要求:班级人数、学生记录由键盘输入。
时间: 2024-03-16 12:42:41 浏览: 66
运用结构体数组与输入函数进行存放学生的学号姓名等数据
4星 · 用户满意度95%
以下是C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 50 // 最大学生数
#define MAX_NAME_LENGTH 20 // 姓名最大长度
#define MAX_MAJOR_LENGTH 50 // 专业最大长度
// 定义学生结构体
typedef struct {
char id[10]; // 学号
char name[MAX_NAME_LENGTH]; // 姓名
char major[MAX_MAJOR_LENGTH]; // 专业
} Student;
int main() {
int n; // 班级人数
Student students[MAX_STUDENT_NUM]; // 学生记录
printf("请输入班级人数:");
scanf("%d", &n);
// 输入学生记录
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、专业,用空格隔开:", i + 1);
scanf("%s %s %s", students[i].id, students[i].name, students[i].major);
}
// 查询并修改学生记录
char id[10], major[MAX_MAJOR_LENGTH];
printf("请输入要修改专业的学生学号:");
scanf("%s", id);
int count = 0; // 记录转专业学生数
for (int i = 0; i < n; i++) {
if (strcmp(students[i].id, id) == 0) { // 学号匹配,修改专业
printf("请输入新专业:");
scanf("%s", major);
strcpy(students[i].major, major);
count++;
}
}
// 输出转专业学生记录
printf("转专业学生记录:\n");
for (int i = 0; i < n; i++) {
if (strcmp(students[i].id, id) == 0 && strcmp(students[i].major, major) != 0) { // 学号匹配且专业不同
printf("%s %s %s\n", students[i].id, students[i].name, students[i].major);
}
}
// 输出未转专业学生记录
printf("未转专业学生记录:\n");
for (int i = 0; i < n; i++) {
if (strcmp(students[i].id, id) != 0 || (strcmp(students[i].id, id) == 0 && strcmp(students[i].major, major) == 0)) { // 学号不匹配或学号匹配但专业相同
printf("%s %s %s\n", students[i].id, students[i].name, students[i].major);
}
}
if (count == 0) { // 学号不存在
printf("学号不存在!");
}
return 0;
}
```
首先定义了一个`Student`结构体来表示学生记录,包含学号、姓名和专业三个字段。在`main`函数中,先从键盘输入班级人数和学生记录,然后输入要修改专业的学生学号,并遍历学生记录进行查询和修改。最后输出转专业和未转专业的学生记录。
在遍历学生记录时,通过`strcmp`函数进行学号匹配。如果学号匹配,则修改专业,并记录转专业学生数。然后分别输出转专业和未转专业的学生记录。需要注意的是,当学号不存在时,需要输出错误信息。
阅读全文