int SearchByroom(struct student stu[],int n,int value) { int left = 0, right = n - 1; while (left <= right) { int mid = (left + right) / 2; if (stu[mid].room == value) { return mid; } else if (stu[mid].room > value) { right = mid-1; } else { left = mid+1; } } return -1; }能显示同一个宿舍的所有人
时间: 2024-02-14 07:15:28 浏览: 77
一个简单的java学生寝室查询系统
这段代码实现了二分查找算法,在数组stu中查找宿舍号为value的学生信息,并返回该学生信息在数组中的下标位置。若未找到,则返回-1。
如果您需要显示同一个宿舍的所有人,可以在找到第一个宿舍号为value的学生信息后,继续向左和向右查找宿舍号为value的学生信息,直到找到最后一个宿舍号为value的学生信息。具体实现方法如下:
```c
int SearchByroom(struct student stu[], int n, int value) {
int left = 0, right = n - 1;
int first = -1, last = -1; // 记录第一个和最后一个宿舍号为value的学生信息的下标位置
while (left <= right) {
int mid = (left + right) / 2;
if (stu[mid].room == value) {
if (first == -1) {
first = mid; // 找到第一个宿舍号为value的学生信息
}
else {
last = mid; // 找到最后一个宿舍号为value的学生信息
}
}
if (stu[mid].room >= value) {
right = mid - 1;
}
else {
left = mid + 1;
}
}
if (first == -1) {
return -1; // 没有找到宿舍号为value的学生信息
}
printf("宿舍号为%d的学生信息如下:\n", value);
for (int i = first; i <= last; i++) {
printf("姓名:%s,学号:%s,宿舍号:%d\n", stu[i].name, stu[i].id, stu[i].room);
}
return first; // 返回第一个宿舍号为value的学生信息的下标位置
}
```
这样,当SearchByroom函数返回值不为-1时,就可以输出同一个宿舍的所有人的信息了。
阅读全文