阅读以下说明和C函数,填补C函数中的空缺(1)~(6),将解答写在答题纸的对应栏内。 【说明】 函数numberOfwords(char message[])的功能是计算存储在message字符数组中的一段英文语句中的单词数目,输出每个单词

admin2013-07-03  60

问题 阅读以下说明和C函数,填补C函数中的空缺(1)~(6),将解答写在答题纸的对应栏内。
    【说明】
    函数numberOfwords(char message[])的功能是计算存储在message字符数组中的一段英文语句中的单词数目,输出每个单词(单词长度超过20时仅输出其前20个字母),并计算每个英文字母出现的次数(即频数),字母计数时不区分大小写。
    假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略,即不会出现类似don’t形式的词,单词之后都为空格或标点符号。
    函数中判定单词的规则是:
    (1)一个英文字母串是单词;
    (2)一个数字串是单词;
   (3)表示名词所有格的撇号(’)与对应的单词看作是一个单词。
    除上述规则外,其他情况概不考虑。
    例如,句子“The 1990’s witnessed many changes in people’s concepts of conservation”中有10个单词,输出如下:
    The
    1990’s
    witnessed
    many
    changes
    in
    people’s
    concepts
    of
    conservation
    函数numberOfwords中用到的部分标准库函数如下所述。
   
【C函数】
int numberOfwords(char message[])
{
    char wordbuffer[21],i=0;    /*i用作wordbuffer的下标*/
     (1)  pstr;
  int PS[26]={0};               /*ps[0]用于表示字母‘A’或‘a’的频数*/
                                 /*ps[1]用于表示字母‘B’或‘b’的频数,依此类推*/
  int wordcounter=0;
          pstr=message;
  while(*pstr){
    if(  (2)  (*pstr)){/*调用函数判断是否为一个单词的开头字符*/
      i=0:
      do{/*将一个单词的字符逐个存入wordbuffer[],并对字母计数*/
         wordbuffer[i++]=*pstr;
         if(isalpha(*pstr)){
           if  (3)  ( *pstr)ps[*pstr-’a’]++;
           else ps[ *pstr- ’A’]++;
    }
   (4)    ;    /*pstr指向下一字符*/
  }while(i<20&&(isalnum(*pstr)||*pstr==”\”));
      if(i>=20)  /*处理超长单词(含名词所有格形式)*/
        while(isalnum(*pstr)||*pstr==”\”){pstr++;}
          (5)  =’\0’;    /*设置暂存在wordbuffer中的单词结尾*/
        wordcounter++;  /*单词计数*/
        puts(wor。dbuffer);  /*输出单词*/
    }
      (6)  ;    /*pstr指向下一字符*/
    }
           return wordcounter:
}

选项

答案(1)char*或Lresigned char* (2)isalnum或isalpha(*pstr)||isdigit (3)islower或!isupper (4)pstr++或其等价形式 (5)wordbuffer[i]或*(wordbuffer+i) (6)pstr++或其等价形式

解析 本题考查考生利用C语言的库函数解决实际问题。
    (1)处用于声明pstr,从该函数的第8行的pstr=message赋值语句可以看出,该处应填入char*。
    程序接下来对整个一段英文语句中的所有字符进行循环。(2)处调用函数判断是否为一个单词的开头字符。由于一个单词的开头字符可以是英文字符或数字,因此可调用题目提供的库函数isalnum进行判断。因此,(2)处应填入isalnum。
    (3)处所在的程序段实现对字母计数。if(isalpha(*  pstr))用于判断是否为英文字符,而且英文字符分为大写字母和小写字母。若为大写字母,执行对大写字母计数,即ps[*pstr一’A’]++;若为小写字母,执行对小写字母计数,即ps[*pstr一’a’]++。因此,(3)处应填入islower或!isupper。
    (4)处用于实现将pstr指向下一字符,这在对字符串进行处理时十分常见,应填入pstr++或++pstr或其等价形式。
    (5)处用于实现设置暂存在wordbuffer中的单词结尾,而i为一个单词中字符计数的下标,单词结尾标志在单词中最后一个字符后面的位置。因此,(5)处应填入wordbuffer或*(wordbuffer+i)。
    (6)处用于实现将pstr指向下一字符,和(4)完全相同,应填入pstr++或++pstr或其等价形式。
转载请注明原文地址:https://kaotiyun.com/show/5njZ777K
0

最新回复(0)