首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<h
由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<h
admin
2018-09-27
53
问题
由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
1 #include<stdio.h>
2 #define N 10
3 /**********found**********/
4 void fun(int a[],int m)
5 { int low=0,high=N-1,mid;
6 while(low<=high)
7 { mid=(10w+high)/2;
8 if(m<a[mid])
9 high=mid-1;
10/**********found**********/
11 else If(m>a[mid])
12 low=mid+1;
13 else return(mid);
14 }
15 return(-1);
16 }
17 main()
18{int i,a[N]={-3,4,7,9,13,45,67,89,100,180),k,m;
19 printf(’’a数组中的数据如下:’’);
20 for(i=0;i<N;i++)printf(’’%d’’,a
);
21 printf(’’Enter m:’’);scanf(’’%d’’,&m);
22 k=fun(a,m);
23 if(k>=0)printf(’’m=%d,index=%d\n’’,m,k);
24 else printf(’’Not be found!\n’’);
25 }
选项
答案
(1)int fun(int a[],int m) (2)else if(m>a[mid])
解析
(1)该题中函数功能是利用折半查找算法查找整数m在数组中的位置。其中,折半查找法是在有序数组中进行的,过程是先将待找的数和数组中间的元素进行比较,若待找的数大于数组中间元素的值,就在数组的后一半继续查找,若待找的数小于数组中间的值,就在数组的前一半继续查找,然后在取新区间的中间元素进行比较,不断重复以上过程,直到找到待找的元素为止。
(2)从己给定源程序的main主函数开始入手,从键盘输入获得要查找的值m“scanf(’’%d’’,&m);”,调用函数fun来实现折半查找。
(1)根据主函数中“k=fun(a,m);”,知道函数fun应该是返回int型的函数,所以第一个标识下面定义的“void fun(int a[],int m)”应该改为“intfun(int a[],int m)”。
(2)第二个标识下的“else If(m>a[mid])”是判断m是否比a[mid]大,在while循环中采用的是if-elseif-else语句,显然“else If”当中“If”应当小写,故第二标识下“else If(m>a[mid])”应改为“elseif(m>a[mid])”。
转载请注明原文地址:https://kaotiyun.com/show/Y8xp777K
本试题收录于:
二级C语言题库NCRE全国计算机二级分类
0
二级C语言
NCRE全国计算机二级
相关试题推荐
以下程序运行后的输出结果是()。main(){inta=3,b=4,c=5,t=99;if(b<a&&a<C)t=a;a=c;c=t;if(a<c&&b<C)t=b;b=a;a=t;printf(
软件工程研究的内容主要包括:【】技术和软件工程管理。
若有程序fun(inta,intb){staticintc=0;c+=a+b;rerurnc;}main(){intx=5,y=3,z=7
以下关于C语言数据类型的叙述中正确的是()。
有以下程序段: typedef struct NODE {int num; struct NODE *next; }OLD; 以下叙述中正确的是 ______。
以下四个选项,不能看作一条语句的是()。
在表示C语言的整型变量时,表示“无符号整型”的符号是()
在C语言中,可以把整数以二进制形式存放到文件中的函数是()
设有定义:char*c;,以下选项中能够使字符型指针c正确指向一个字符串的是()。
下面程序的功能是:计算1~10之间的奇数之和与偶数之和,请填空。#include<stdio.h>main(){inta,b,c,i;a=c=0;for(i=0;i<=10;i+=2)
随机试题
女性,50岁,慢性阻塞性肺疾病支气管炎型患者,近1周受凉后咳嗽、气急加重,咳脓性痰。血气分析:PaO27.3kPa(55mmHg),PaCO210kPa(75mmHg)。对该患者的最佳治疗措施应为
椎孔()
指标越高,企业资产的利用效率越高的是()。
根据民事法律制度的规定,下列各项中,可导致诉讼时效中断的情形有()。
一般来说,人的视线平行接触表示()。
材料:小蕾特别喜欢听古典音乐,她也很崇拜音乐家。有一天,她跟妈妈说:“今天,肖邦叔叔到我们幼儿园来了,还给我们弹钢琴呢!”妈妈听了吓了一跳,以为小蕾在说谎。问题:请根据幼儿想象的有关原理,对此材料所述事件加以分析。
圆x2+y2+2kx-2ky=0关于()对称.
血管破裂时,血液中的什么物质会凝结成块,堵住破裂部分以止血?()
在PowerPoint演示文稿中通过分节组织幻灯片,如果要求一节内的所有幻灯片切换方式一致,最优的操作方法是
What’sthefurthestyouhaveevercycled?Perhapsyoucycletoschoolortowork,ormaybeatmostashortcyclingtripwithfri
最新回复
(
0
)