问答题 给定程序MODI1.C中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如,若输入“I am a student to take the examination.”,则应输出“I aM A studenT tO take thE examination.”。 请修改程序中的错误之处,使它能得出正确的结果。 注意:不要改动main函数,不得删行,也不得更改程序的结构! #include #include #include void fun(char *p) { int k = 0; for(; *p; p++) if (k) { /********** found***********/ if(p == ' ') { k = 0; /********** found***********/ * (p) = toupper(*(p - 1)) } } else k = 1; } main () { char chrstr[64]; int d ; printf("/nPlease enter an English sentence within 63 letters: "); gets(chrstr); d=strlen(chrstr); chrstr[d] = ' ' ; chrstr[d+1] = 0 ; printf("/n/nBefore changing:/n %s", chrstr); fun (chrstr) ; printf("/nAfter changing:/n %s", chrstr); }
【正确答案】正确答案:(1)if(*p=='') (2)*(p一1)=toupper(*(p一1));
【答案解析】解析:函数的功能是将每个单词的最后一个字母改成大写。 (1)第一个错误标识下的if语句应该是判断字符串中的字符是否是空格,根据“for(;*p;p++)”语句中for循环条件中p的定义应该为字符型指针变量,*p是取p所指存取单元的值,所以“if(p=='')”应该改为“if(*p=='')”。 (2)题干中要求是将每个单词的最后一个字母改成大写,所以它的位置应该是挨着空格的前一个字符,应该是指针p指向字符的前一个位置,“*p=toupper(*(p一1))”是将改动的值赋给了p所指的空格,所以应该改为“*(p-1)=toupper(*(p-1));”且语句未尾应有分号。