问答题 使用VC6打开 下的源程序文件modi2.cpp。请完成函数fun(char*str,charch),本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回-1。
二分法查找的思想是:初始查找区间的下界为0,上界为len-1,查找区间的中后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。
注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <iostream.h>
int fun( char* str, char ch )
{

}
void main()
{
char str[]={"a","b", "c", "d","e", "f", "g", "h", "i", "j ", "k", 0};
char ch;
【正确答案】
【答案解析】int low=0;
//初始查找区间的下界
int high;
int k;
for(high=0;str[high]!=0;high++)
//求字符串长度
while(low<high)
//循环判断字符位置
{
k=(low+high)/2;
if(str[k]==ch)
return k;
else if(Str[k]>ch)
high=k-1;
else low=k+1;
}
if(str[low]==ch)
return low;
return -1;
答案考生文件夹 [解析] 根据题干中给出的二分法查找思想,从已给部分源程序的main主函数开始入手,核心函数int fun(char*str,char ch)中的ch参数为输入的字符,其中返回值为ch所在的位置。
(1)首先,初始查找区间的下界为0。
(2)然后,求得字符串长度len,上界为len-1,查找区间的中后,k=(下界+上界)/2;若list[k]等于ch,查找成功。
(3)若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。