C语言!!求我的程序哪里出了问题。。。题目如下3
发布网友
发布时间:2023-11-01 09:56
我来回答
共6个回答
热心网友
时间:2024-11-26 20:42
#include "stdio.h"
void main()
{
int x[15];
int i,j,left,right,mid,flag=0;
printf("input 15 numbers:\n");
for(i=0;i<15;i++)
scanf("%d",&x[i]);
printf("j=");
scanf("%d",&j);
left=0;right=14;
while(left<=right)
{
mid=(left+right)/2;
if(x[mid]==j) {flag=1;break;}
else if(x[mid]>j) left=mid+1;
else
right=mid-1;
}
if(flag) printf("%d",mid+1);
else
printf("无此数\n");
printf("\n");
}
//可以运行
采纳吧,现在是从大到小,开始我没看题目
热心网友
时间:2024-11-26 20:42
#include "stdio.h"
int main(){
int x[15],num; //num存放待查找的数
int i,j;
printf("input 15 numbers:\n");
for(i=0;i<=14;i++) scanf("%d",&x[i]);
printf("输入待查找的数:");
scanf("%d",&num);
for(i=0,j=14;i<=j;) {
int mid =(int)((i+j)*0.5);
if(x[mid]==num)
{
printf("%d 是第 %d个数",num,mid);
break;
}
else if(x[mid]>num)
i=mid+1;
else j=mid-1;
}
if(i>j) printf("无此数:%d\n",num);
printf("\n");
return 0;
}
热心网友
时间:2024-11-26 20:43
你写的代码本身就是错的啊。
for(i=0;i<=14;i++)
printf("j=");
scanf("%d",&j);
打印了15个“j=“, 然后再输入了j
= =、 折半查找是从下标的一半开始查找, 如果中间的数比输入的数大则往前半部分找,反之往后面找
热心网友
时间:2024-11-26 20:43
#include <stdio.h>
//使用宏定义,随时可以改变数组的大小,程序更具有扩展性,比如改为10则输入10个数到数组,然后进行折半查找
#define SIZE 15
int main(int argc, char *argv[])
{
int num[SIZE];
printf("请按大小顺序输入15个数\n");
//下面的循环对数组赋值
for(int i = 0; i < SIZE; i++){
scanf("%d", &num[i]);
}
printf("输入要查找的数\n");
int search_num;
scanf("%d", &search_num);
int mid = SIZE/2;
int beg = 0;
int end = SIZE - 1;
//这里是核心,用循环不断改变中点的值与要查找的值进行比较判断
while(num[mid] != search_num){
if(search_num > num[mid]){
beg = mid;
}else{
end = mid;
}
mid = (beg + end) / 2;
}
//最后中点的值是否在数组的下标范围,不在则打印”无此数“
if(0 <= mid && mid < SIZE){
printf("数组的第%d元素是%d", mid, search_num);
}else{
printf("无此数");
}
return 0;
}
上面是我的代码,最后说下,LZ代码本身意思就不对了,首先把数据存入数组应该用循环而不是一次输入,那样只输入了一个元素,而且折半的核心也是在于循环,通过不断与中点的值比较来改变寻找的范围
热心网友
时间:2024-11-26 20:44
#include "stdio.h"
void main()
{
int x[15];
int i,j;
int min=1,max=15;
printf("input 15 numbers:\n");
for(i=0;i<=14;i++)
scanf("%d",&x[i]);
printf("j=");
scanf("%d",&j);
do{
i=(min+max)/2;
if((x[i]>j) max=i;
if((x[i]<j) min=i;
if(x[i]==j) printf("%d",i);
}while(max!=min)
if(max==min&&min!=j) printf("无此数\n");
printf("\n");
return 0;
}
热心网友
时间:2024-11-26 20:45
for(i=0;i<=14;i++)
printf("j=");