阅读以下说明和C代码,填写代码中的空(1)~(6),将解答写入答题纸的对应栏内。

练习题库2022-08-02  33

问题 阅读以下说明和C代码,填写代码中的空(1)~(6),将解答写入答题纸的对应栏内。【说明】下面的C代码在输入的100个英文单词中找出最小单词和最大单词。约定每个单词是仅由英文字母构成的字符串,且都不超过20个字符。单词的大小按照字典序定义。例如,单词“entry”大于“enter”、“art”小于“ article”、“an”等于“An”。 【C代码】#include <stdio.h>#define NUMBER 100int isValid(const char *s1);                  //若字符串s1仅包含英文字母则返回1,否则返回0char toLower(char ch);                       //将大写字母转换为小写字母int usr_strcmp(char *s1, char *s2);    //比较字符串s1和s2,相等时返回0,                                                            //s1大则返回正整数,s1小则返回负整数void usr_strcpy(char *s1,const char *s2);     //字符串s2拷贝给s1 int main(){       char word[32];        char maxWord[32]="", minWord[32] ="";        int numWord=0;        while(num Word<NUMBER) {             scanf("%s",    (1)    );                                 / /输入一个单词存入word             if(is Valid(word))     {                   if (0==num Word) {usr_strcpy(min Word,word);usr_strcpy(max Word,word);}                   num Word++;                   if(         (2)       >0)                              / /调用usr_strcmp比较单词                              usr_strcpy(max Word, word);      / /用max Word记下最大单词                   else                              if(       (3)      <0)                     / /调用usr_strcmp比较单词                                    usr_strcpy(min Word,word); / /用min Word记下最小单词            }      }      printf("max Word=%s                min Word=%s\n",max Word,min Word);      return 0;}int is Valid(const char *s){     for(; *s ; s++)         if(!(*s>='a' && *s<='z') && !(*s>='A' && *s<='Z'))             return 0;     return 1; } char toLower(char ch){     //若ch为大写字母则返回其小写形式,否则直接返回原字符      if(ch>='A' && ch<='Z')                 ch=         (4)         +'a';      return ch;} int usr_strcmp(char *s1,char *s2){    //按字典序比较两个英文单词,若s1表示的单词大,则返回正整数,     //若s1表示的单词小,则返回负整数;否则返回0      for(;    (5)    ;) {              if(toLower(*s1)==toLower(*s2))    {s1++,s2++;}              else                    break;      }     return(toLower(*s1) - toLower(*s2));} void usr_strcpy(char *s1,const char *s2){    //将s2表示的字符串复制给s1       for(;       (6)       ;)            *s1++= *s2++;       *s1='\0';}

选项

答案

解析 (1)word(2)usr_strcmp(word, maxWord)(3)usr_strcmp(word, minWord)(4)ch-‘A’(5)*s1!=’\0’&&*s2!=’\0’或*s1||*s2等价表示(6)*s2!=’\0’或*s2等价表示
【解析】

(1)scanf函数是将输入的数据赋值给相应的变量,在格式字符串后需要取变量地址,即将数据赋值给相应地址的变量,word是数组名,因此可以直接作为地址。(2)调用usr_strcmp比较单词,当usr_strcmp返回的值为正整数时,调用usr_strcpy将word值赋值给maxWord,因此此处是比较word和maxWord,即usr_strcmp(word, maxWord)(3)调用usr_strcmp比较单词,当usr_strcmp返回的值为负整数时,调用usr_strcpy将word值赋值给minWord,因此此处是比较word和minWord,即usr_strcmp(word, minWord)(4)toLower函数是将大写字母转换为小写字母,if函数是判断ch是否为大写字母,当ch为大写的时候,将ch转换为小写,小写是在’a’的基础上加上一个值得到,例如‘b’=1+’a’,这个值便是大写字母和‘A’之间的差值,即例子中1为’B’-‘A’,因此此处填写ch-‘A’(5)usr_strcmp是比较两个英文单词,是需要对s1和s2中的字符逐一比较,因此在for循环中进行比较,for循环的判断条件是s1和s2中的字符是否为’\0’,因此此处填写*s1!=’\0’&&*s2!=’\0’(6)usr_strcpy是将s2复制给s1,是需要将s2中的字符逐一赋值给s1,因此在for循环中进行赋值,for循环的判断条件是s2中的字符是否为’\0’,因此此处填写*s2!=’\0’
转载请注明原文地址:https://tihaiku.com/congyezige/2424925.html

最新回复(0)