求问为什么下面的程序没有输出啊
#include <stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
int left=0,right=sizeof(a[10])/sizeof(a[0])-1;
int num=0;
printf("请输入需要查询的数字");
scanf("%d",&num);
while(right>=left)
{
int mid=(left+right)/2;
if(a[mid]==num)
{
printf("%d在第%d位",num,mid);
break;
}
else if(a[mid]<num)
{
left=mid+1;
}
else
{
right=mid-1;
}
return 0;
}
修改参考如下,标注了修改的地方
#include <stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
int left=0,right=sizeof(a)/sizeof(a[0])-1; // 修改 a[10] 为 a
int num=0;
printf("请输入需要查询的数字");
scanf("%d",&num);
while(right>=left)
{
int mid=(left+right)/2;
if(a[mid]==num)
{
printf("%d在第%d位",num,mid+1); // 修改 mid+1
break;
}
else if(a[mid]<num)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:每个学生的学号、姓名、三科成绩占一行,逗号分开。
答案:
可能导致C语言二分查找程序无法正常输出结果的原因有很多种,以下是一些可能的情况:
1.数组未按照从小到大的顺序排序。
2.数组中存在相同的元素,未考虑到这种情况。
3.程序中出现了语法错误或逻辑错误。
4.未正确调用函数或者参数传递错误等。
解决这些问题的方法如下:
1.对于第一种情况,需要对数组进行排序处理,可以使用快速排序或归并排序等算法,将数组元素从小到大排序,再进行二分查找。
2.对于第二种情况,可以采取比较暴力的方法,即对每个元素进行一次遍历,然后在遍历过程中判断是否重复。也可以利用哈希表等数据结构来处理。
3.对于第三种情况,可以集中精力检查语法和逻辑错误,尤其是在函数调用、变量定义等方面。
4.对于第四种情况,需要仔细检查函数调用是否正确,参数是否传递正确,可以利用调试工具来调试程序并查看运行过程中的变量值。
以下是使用C语言实现二分查找的代码参考:
int binary_search(int a[], int n, int x)
{
int low = 0, high = n - 1;
while (low <= high)
{
int mid = (low + high) / 2;
if (a[mid] == x)
return mid;
else if (a[mid] < x)
low = mid + 1;
else
high = mid - 1;
}
return -1; //未找到目标元素,返回-1
}
该代码中,a[]表示已排序的数组,n表示数组元素个数,x表示要查找的元素。程序利用while循环进行二分查找,如果找到目标元素,就返回它在数组中的下标,如果未找到,就返回-1。