给定程序MODI1.C中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如,若输入“I am a student to take the examination.”,则应输出“I aM

admin2021-02-25  43

问题 给定程序MODI1.C中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
  例如,若输入“I am a student to take the examination.”,则应输出“I aM A studenT tO takE thE examination.”。
  请修改程序中的错误之处,使它能得出正确的结果。
  注意:不要改动main函数,不得删行,也不得更改程序的结构!
1  #include<ctype.h>
2  #include<stdio.h>
3  #include<string.h>
4   void fun(char *p)
5  {
6   int k=0;
7   for(;*p;p++)
8   if(k)
9  {
10   /**********found**********/
11  if(p==’ ’)
12    {
13   k=0;
14   /**********found**********/
15   (p)=toupper(*(p-1))
16   }
17   }
18   else
19   k=1;
20   }
21  main()
22    {
23  char chrstr[64];
24  int d;
25
26   printf(’’\nPlease enter an English sentence within 63 letters:’’);
27   gets(chrstr);
28  d=strlen(chrstr);
29   chrstr[d]=’ ’;
30  chrstr[d+1]=0 ;
31    printf(’’\n\nBefore changing:\n%s’’,chrstr);
32  fun(chrstr);
33   printf(’’\nAfter  changing:\n%s’’,chrstr);
34   }

选项

答案(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));”且语句未尾应有分号。
转载请注明原文地址:https://jikaoti.com/ti/h5z0FFFM
0

最新回复(0)