#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.\n",mid); else printf("no found.\n"); }
时间: 2024-01-15 12:03:21 浏览: 88
这段代码有几个问题需要优化:
1. `scanf("%d", find);` 应该改为 `scanf("%d", &find);`,因为 `find` 是一个变量,而 `scanf` 需要获取这个变量的地址。
2. 在 `if(a[mid]=find)` 这一行应该使用 `==` 而不是 `=`,因为 `=` 是赋值操作,而 `==` 才是比较相等的操作。
3. 在 `else if(a[mid]>find) up=mid+1;` 这一行应该改为 `up=mid-1;`,因为如果 `a[mid]` 大于 `find`,说明 `find` 在 `mid` 的左边,应该将上界 `up` 缩小到 `mid-1`。
4. 在 `else low=mid-1;` 这一行应该改为 `low=mid+1;`,因为如果 `a[mid]` 小于 `find`,说明 `find` 在 `mid` 的右边,应该将下界 `low` 扩大到 `mid+1`。
以下是优化后的代码:
```c
#include <stdio.h>
int main() {
int up = 10, low = 1, mid, found = 0, 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.\n", mid);
} else {
printf("no found.\n");
}
return 0;
}
```
阅读全文