优化这段C语言代码 while (1) { printf("插入学生的学号:\n"); int id=0; scanf("%d", &id); for (int i = 0; i <= stu_num; i++) { if (id == stu[i].studentID) { printf("学号重复,重新输入\n"); continue; } } new_stu.studentID = id; break; }
时间: 2024-02-10 20:12:07 浏览: 58
C语言--学生信息输入
有几个可以优化的地方:
1. 在for循环中,不需要遍历到stu_num,应该是遍历到stu_num-1,因为数组下标是从0开始的。
2. 如果stu_num很大,那么每次输入一个学号都要遍历一遍数组,效率会比较低。可以提前将数组按照学号排序,然后使用二分查找来判断学号是否重复,这样可以提高效率。
下面是优化后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STU_NUM 1000
typedef struct {
int studentID;
// 其他字段...
} Student;
int cmp(const void *a, const void *b) {
return ((Student *)a)->studentID - ((Student *)b)->studentID;
}
int main() {
Student stu[MAX_STU_NUM];
int stu_num = 0;
// 排序
qsort(stu, stu_num, sizeof(Student), cmp);
while (1) {
printf("插入学生的学号:\n");
int id = 0;
scanf("%d", &id);
// 二分查找
int left = 0, right = stu_num - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (id == stu[mid].studentID) {
printf("学号重复,重新输入\n");
break;
} else if (id < stu[mid].studentID) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if (left > right) {
stu[stu_num].studentID = id;
// 插入其他字段...
stu_num++;
break;
}
}
return 0;
}
```
这样优化后,每次输入一个学号只需要进行一次二分查找,效率会比较高。
阅读全文