问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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=");
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 静听石语的品牌好不好 一个人打喷嚏,一声,两声各代表是意思??396 想一个人的时候,那个人真的会打喷嚏吗?11 我想问一下,怎么将常用的网址添加到qq空间链接? 为什么微信搜搜不到 查找找不到的原因 花盆里长蛆怎么办36 大顺通宝,背工,值几个钱?11 170汽油机,小型开沟机用,才用了一天就冒黑烟,没力,换了火花塞,化油器都... 英语翻译 手工 谢谢2 咱天津现在哪儿有卖传统爆米花的? 上古世纪深渊结晶如何获得攻略详解 详解怎么玩 羊(羊羔)牛(牛犊)鸡() 打算明年鸽子参加冬季比赛,那什么时间出鸽子最好? 比赛过的鸽子怎么查?7 如何使用QQ空间的超链接,链接到别的网址 如何获取QQ空间单条说说的链接地址4 麻辣烫的菜品,比如青菜,丸子,不用电池炉煮,用烫的方法,是怎么烫的... 临沧市市驾校,电话号码是多少? 大顺通宝背下工6 去公证处查询公证书真伪当天能出结果吗?14 amd phenom(tm) 9150e 超频 AMD Phenom (tm) X4四核处理器 9150e ...2 上古世纪是怎么刷金的 69378是三的倍数吗? 13465774438是三的倍数吗? 23479是三的倍数吗? 中文翻译英文 谢谢 手工2 七雄争霸北京四区 出入的出是几笔2 Firefox鼠标手势扩展。想要和360浏览器的鼠标手势差不... 广州公证处怎么查办案进度啊?难不成要走去问吗?会电话通知吗? 沛县县驾校第一训练场电话号码是多少? 种兔的引购种兔应注意环节 请问天津哪里可以买到制作爆米花的原材料?1 天津西青区比较进的销售爆米花原料,包括玉米,奶油,各种调料的...8 天津哪有卖爆米花的那个玉米粒的3 感冒咳嗽能喝健身的蛋白粉吗7 感冒咳嗽能吃蛋白粉吗?5 中国踢足球的人英语不好有没有事 公证号怎么查询22