学生的记录由学号、姓名、专业组成,根据班级人数,将学生记录存放在结构体数组中。由于部分同学转专业,学生记录发生了变化。请编程实现根据学号查询学生记录并修改专业(可能不止一人转专业),分别输出转专业和未转专业的学生记录。要求:班级人数、学生记录由键盘输入。
时间: 2024-03-26 14:39:50 浏览: 103
可以按照以下方式实现该程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数目
#define MAX_NAME_LEN 20 // 最长姓名长度
#define MAX_MAJOR_LEN 20 // 最长专业名称长度
// 定义学生结构体
struct Student {
int id; // 学号
char name[MAX_NAME_LEN]; // 姓名
char major[MAX_MAJOR_LEN]; // 专业
};
// 定义学生数组
struct Student students[MAX_STUDENT_NUM];
// 从键盘输入学生信息
void input_students(int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息(学号、姓名、专业):", i + 1);
scanf("%d %s %s", &students[i].id, students[i].name, students[i].major);
}
}
// 根据学号查找学生并修改专业
void modify_major(int n, int id) {
int count = 0; // 统计转专业的学生数目
printf("转专业的学生记录:\n");
for (int i = 0; i < n; i++) {
if (students[i].id == id) {
printf("%d %s %s\n", students[i].id, students[i].name, students[i].major);
printf("请输入新专业:");
scanf("%s", students[i].major);
count++;
}
}
if (count == 0) {
printf("未找到该学号的学生记录。\n");
} else {
printf("未转专业的学生记录:\n");
for (int i = 0; i < n; i++) {
if (students[i].id != id) {
printf("%d %s %s\n", students[i].id, students[i].name, students[i].major);
}
}
}
}
int main() {
int n; // 班级人数
int id; // 待修改专业的学生学号
printf("请输入班级人数:");
scanf("%d", &n);
input_students(n);
printf("请输入要修改专业的学生学号:");
scanf("%d", &id);
modify_major(n, id);
return 0;
}
```
在该程序中,我们首先定义了一个学生结构体,并定义了一个学生数组。然后通过 `input_students` 函数从键盘输入学生信息。接着,我们通过 `modify_major` 函数根据学号查找学生并修改专业。在该函数中,我们首先遍历整个学生数组,查找出学号为 `id` 的学生,并修改其专业。同时,我们记录转专业的学生数目,以判断是否有学生转专业。最后,我们遍历学生数组,输出未转专业的学生记录。
在 `main` 函数中,我们从键盘输入班级人数和待修改专业的学生学号,并调用 `modify_major` 函数进行查找和修改。
阅读全文