下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。找出其中的错误,并改正之 #include <stdio.h> main() { int up=10, low=1, mid, found, find; int a[10]={1, 5, 6, 9, 11, 17, 25, 34, 38, 41}; scanf("%d", find); printf("\n"); while (up>=low || !found) { mid=(up+low)/2; if( a[mid] = find ) { found=1; break; } else if(a[mid]>find) up=mid+1; else low=mid+1; } if(found) printf("found number is %dth", mid); else printf("no found"); }
时间: 2024-01-23 20:02:23 浏览: 122
下面是改正后的代码:
```
#include <stdio.h>
int main() {
int up=9, low=0, mid, found=0, find; // 数组下标从 0 到 9
int a[10]={1, 5, 6, 9, 11, 17, 25, 34, 38, 41};
scanf("%d", &find); // 需要加上取地址符 &
while (up>=low) { // 改正了循环条件
mid=(up+low)/2;
if( a[mid] == find ) { // 改正了判断相等的符号
found=1;
break;
} else if(a[mid]>find) {
up=mid-1; // 改正了更新上下界的方式
} else {
low=mid+1;
}
}
if(found) {
printf("found number is %dth", mid);
} else {
printf("no found");
}
return 0; // 添加了返回值
}
```
改正的细节如下:
1. 数组下标从 0 到 9,因此上界应该是 9,而不是 10。
2. 在读入用户输入时,需要加上取地址符 &。
3. 在判断相等时,应该使用双等号 == 而不是单等号 =。
4. 在更新上下界时,应该根据当前中间元素与查找元素的大小关系来决定是更新上界还是下界。
5. 在循环条件中,应该使用 && 逻辑运算符而不是 ||。
阅读全文