输入学生信息,如果学号是正数,则插入数据,如果是负数,则删除对应的学生信息,0则退出,在这个过程中保证学号是增序用c语言
时间: 2024-10-13 13:11:46 浏览: 14
在C语言中,你可以创建一个结构体表示学生信息,并使用数组或链表来存储这些数据。这里提供一个基本的思路:
首先,定义一个学生结构体(例如用数组存储),包含学号和名字等字段:
```c
typedef struct {
int id;
char name[50];
} Student;
```
然后,可以创建一个动态数组或者使用链表来存储学生信息。假设我们使用动态数组:
```c
Student* students = NULL; // 存储学生的数组
int size = 0; // 当前学生数量
// 插入操作 (输入正数)
void insert(Student new_student) {
if (size == 0 || new_student.id > students[size - 1].id) { // 如果数组为空或新学号大于当前最大值
students = realloc(students, sizeof(Student) * (size + 1)); // 扩展数组
students[size] = new_student; // 添加新元素
size++;
} else {
printf("学号已存在,无法插入。\n");
}
}
// 删除操作 (输入负数)
void delete(int id_to_remove) {
for (int i = 0; i < size; i++) {
if (students[i].id == id_to_remove) { // 找到要删除的元素
memmove(&students[i], &students[i+1], (size - i - 1) * sizeof(Student)); // 移动元素
free(students[size - 1]); // 释放最后一个元素的空间
students = realloc(students, sizeof(Student) * (size - 1));
size--;
break;
}
}
}
// 更新操作 (输入0)
void update_or_exit() {
if (size > 0 && students[size - 1].id != 0) {
printf("请输入正数学号进行插入,负数学号进行删除,0退出:");
} else {
return; // 直接结束程序
}
}
```
在这个框架下,用户可以按照上述函数调用来完成操作。记得在开始时分配足够的内存给`students`,并且处理好内存管理。使用链表的话,会更复杂一些,需要维护头指针和节点连接。
阅读全文