下面是一个简单的C语言程序,实现了您所描述的学生信息示意性检索程序。请注意,为了保持代码简洁明了,这里使用了基本的C语言功能,并没有包含复杂的错误处理或数据验证。
```c
#include
#include
#include
// 定义学生结构体
typedef struct Student {
int id;
char sex;
int age;
char class[30];
struct Student *next;
} Student;
// 定义全局变量
Student *head = NULL;
// 创建新节点
Student* createStudent(int id, char sex, int age, char class[]) {
Student *newStudent = (Student*)malloc(sizeof(Student));
if (!newStudent) {
return NULL;
}
newStudent->id = id;
newStudent->sex = sex;
newStudent->age = age;
strcpy(newStudent->class, class);
newStudent->next = NULL;
return newStudent;
}
// 学生信息的初始化(链表的创建)
void initializeStudents() {
int numStudents;
printf("请输入班级的学生人数: ");
scanf("%d", &numStudents);
for (int i = 0; i < numStudents; i++) {
int id;
char sex;
int age;
char class[30];
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号: ");
scanf("%d", &id);
printf("性别: ");
scanf(" %c", &sex); // 注意%c前有一个空格,用于读取输入缓冲区中的换行符
printf("年龄: ");
scanf("%d", &age);
printf("班级: ");
scanf(" %29[^\n]", class); // 读取字符串,防止溢出,且忽略换行符
Student *newStudent = createStudent(id, sex, age, class);
if (head == NULL) {
head = newStudent;
} else {
Student *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newStudent;
}
}
}
// 插入学生
void insertStudent() {
int id;
char sex;
int age;
char class[30];
printf("请输入要插入的学生的信息:\n");
printf("学号: ");
scanf("%d", &id);
printf("性别: ");
scanf(" %c", &sex);
printf("年龄: ");
scanf("%d", &age);
printf("班级: ");
scanf(" %29[^\n]", class);
Student *newStudent = createStudent(id, sex, age, class);
newStudent->next = head;
head = newStudent;
}
// 删除学生(按学号删除)
void deleteStudent() {
int id;
printf("请输入要删除的学生学号: ");
scanf("%d", &id);
Student *prev = NULL;
Student *current = head;
while (current != NULL && current->id != id) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("未找到该学生。\n");
} else {
if (prev == NULL) {
head = current->next;
} else {
prev->next = current->next;
}
free(current);
printf("学生信息已删除。\n");
}
}
// 修改学生信息(按学号查找并修改)
void updateStudent() {
int id;
char newSex;
int newAge;
char newClass[30];
printf("请输入要修改的学生学号: ");
scanf("%d", &id);
Student *current = head;
while (current != NULL && current->id != id) {
current = current->next;
}
if (current == NULL) {
printf("未找到该学生。\n");
} else {
printf("请输入新的学生信息:\n");
printf("性别: ");
scanf(" %c", &newSex