【发布时间】:2021-06-08 08:42:46
【问题描述】:
#include<stdio.h>
int main(){
printf("Enter the size of array: ");
int n,a[n],element;
scanf("%d", &n);
printf("Enter the elements of array in ascending order\n");
for(int i=0; i<n; i++){
scanf("%d ", &a[i]);
}
printf("Enter the element to be searched: ");
scanf("%d", &element);
int low = 0;
int high = n-1;
int mid = (low+high)/2;
int flag = 0;
while(low<=high){
if(a[mid]==element){
flag =1;
break;
}
if(a[mid]<element){
low = mid + 1;
}
else{
high = mid -1;
}
}
if(flag){
printf("%d found", element);
}
else{
printf("Not found");
}
return 0;
}
当我运行代码时,我只能输入数组的元素,因此程序不会继续进行。 代码有什么问题?
【问题讨论】:
-
这里
a[n]中n的值是多少int n,a[n],element;?? -
全部取自用户
-
你不明白。
int n;创建n但它的值是不确定的。在为它分配值之前,您不能使用它。但是您确实在声明之后立即在int n,a[n],element;中使用它,并且在声明a[n]之前给它分配了一个值...在您阅读 之后之前不要使用int a[n];(并验证n与scanf()的转换)。也就是说,必须先设置n的值才能做int a[n]; -
您还需要在每次迭代结束时更新
mid = (low+high)/2;...因为mid将在每次迭代后更改,直到找到结果。