C语言问题 一道改错体

来源:百度知道 编辑:UC知道 时间:2024/05/27 01:14:42
#include <stdio.h>
#define N 10

void fun(int a[], int m)
{ int low=0, high=N-1, mid;
while(low<=high)
{ mid = (low+high) / 2;
if(m<a[mid])
high = mid - 1;
else if(m>=a[mid])
low=mid+1;
else return(mid);
}
return(-1);
}
main( )
{ int i, a[N]={-3, 4, 7, 9, 13, 45, 67, 89, 100, 180 }, k, m;
printf("a数组中的数据如下:");
for(i=0; i<N; i++) printf("%3d", a [i]);
printf("Enter m: "); scanf("%d", &m);
k = fun(a, m);
if(k>=0) printf("m=%d, index=%d\n", m, k);
else printf("Not be found ! \n");
}

帮我看看之中有什么错误 并把错误改正过来 谢谢啦~

你那个K是干啥的我没明白,但是你的void fun(int a[], int m)说的明白,返回类型是void,也就是没有返回值,把谁给K啊?而且fun里面还写了return.

另外,就算你把fun函数改成int型也不对
如果我没看错,你这个应该是二分法找数据,我们来看看你的条件
if(m<a[mid]) //如果m小于中值,最大值设为中值-1
high = mid - 1;
else if(m>=a[mid]) //如果m>=中值,最小值设为中值+1
low=mid+1;
else return(mid); //否则,这个否的是什么???否的是m<a[mid]&&m>=a[mid],那楼主你觉得这条件能成立么???
结果就是-你要找的值永远都找不到。
改:1.将函数改成int型
2.将m>=改成m> //因为等于的时候,就是找到了,是你判断依据,应该返回值了。

fun函数的 返回类型改成 int 型
#include <stdio.h>
#define N 10
int fun(int a[], int m)
{ int low=0, high=N-1, mid;
while(low<=high)
{ mid = (low+high) / 2;
if(m<a[mid])
high = mid - 1;
else if(m>=a[mid])
low=mid+1;
else return(mid);
}
return(-1);
}
main( )
{ int i, a[N]={-3, 4, 7, 9, 13, 45, 67, 89, 100, 180 }, k, m;
printf(&q