阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明1

题库2022-08-02  34

问题 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明1】    递归函数is_elem(char ch, char *set)的功能是判断ch中的字符是否在set表示的字符集合中,若是,则返回1,否则返回0。【C代码1】int is_elem (char ch ,char*set){     if(*set==‘\0’)         return 0;    else       if(     (1)     )         return 1;      else        return is_elem(   (2)    )} 【说明2】函数char*combine(char* setA,char *setB)的功能是将字符集合A(元素互异,由setA表示)和字符集合B(元素互异,由setB表示)合并,并返回合并后的字符集合。【C代码2】 char*combine(char *setA, char*setB) {    int i,lenA, lenB, lenC;    lenA=strlen(setA);    lenB=strlen(setB);    char*setC=(char*)malloc(lenA+lenB+1);    if(!setC)        return NULL;    strncpy(setC,setA,lenA);       //将setA的前lenA个字符复制后存入setC    lenC=      (3)     ;    for(i=0;i<lenB;i++)         if(    (4)    )             //调用is_elem判断字符是否在setA中               setC[lenC++]=setB;        (5)    =‘/0’;        //设置合并后字符集的结尾标识    return setC;}

选项

答案

解析 (1)set[0]==ch
(2)ch,set+1
(3)lenA
(4)is_elem(setB,setA)==0
(5)setC[lenC]

1. If(set[0]==ch)  //取出set第一个元素与ch字符比较是否相等,若相等,则返回为1,标明字符集合中包含该字符串。
2. return is_elem(ch,set+1) // 从set第二个元素开始重新递归代入函数执行,以此类推,直到结束或者到达串尾。这里采用了递归调用的方式。
在这里,函数char*combine(char* setA,char *setB)的功能是将字符集合A(元素互异,由setA表示)和字符集合B(元素互异,由setB表示)合并,并返回合并后的字符集合。处理思路是:先将集合A里面的字符串全部赋给集合C,然后再让集合B里面的每个字符与集合A进行is_elem函数运算,判断集合B里面的每个字符是否在集合A中出现过,如果在,则忽略,如果不在,则需要将这一元素加入到字符C中。
3. strncpy(setC,setA,lenA);       //将setA的前lenA个字符复制后存入setC
     lenC=lenA; 变量lenC表示setC的字符个数,其初始值应为lenA。
for(i=0;i<lenB;i++)
  if is_elem(setB,setA)==0)        //调用is_elem判断字符是否在setA中,若存在,则忽略,若不存在,则在setC字符集合里新增SetB.
setC[lenC++]=setB;
setC[lenC]=‘/0’;      //设置合并后字符集的结尾标识,lenC 自动跟踪了该元素数目的变化,其最后的值正好等于setC元素个数。
returnsetC;
转载请注明原文地址:https://tihaiku.com/congyezige/2427014.html

最新回复(0)