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

admin2018-10-23  43

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

选项

答案1 int low=0; //初始查找区间的下界 2 int high; 3 int k; 4 for(high=0;str[high]!=0;high++)//求字符串长度 5 while(low<high)//循环判断字符位置 6 { 7 k=(low+high)/2; 8 if(str[k]==ch) 9 return k; 10 else if(str[k]>ch) 11 high=k-1; 12 else low=k+1; 13 } 14 if(str[low]==ch) 15 return low; 16 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,上界不变。
转载请注明原文地址:https://kaotiyun.com/show/45Ap777K
0

最新回复(0)