使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(char*str,char ch)的定义,本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回1。

admin2020-06-29  41

问题 使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(char*str,char ch)的定义,本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回1。
    二分法查找的思想是初始查找区间的下界为0,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于
ch,查找成功;若1ist[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。
    注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填人所编写的若干语句。
    试题程序:
#include
int fun(char*str,char ch)
{
}
void main()
{
char str[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’};
char ch;
cout<<"请输入一个字符:"<cin>>ch:
cout<<"输入字符的位置是:"<return;
}

选项

答案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 tow; return -1;

解析 本题首先初始查找区间的下界为0,然后求得字符串长度len,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若tist[k]等于ch,查找成功。若list[k])ch,则新的查找区间的下界变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。
转载请注明原文地址:https://kaotiyun.com/show/mbyp777K
0

最新回复(0)