C语言有关问题。以下程序的输出结果是:(并且给出解释)

#define LETTER 0
main()
{char str[20]="C Language",c;
int i=0;
while((c=str[i])!='\0')
{i++;
#if LETTER
if(c>='a'&&c<='z') c=c-32;
#else
if(c>='A'&&c<='Z') c=c+32;
#endif
printf("%c",c);
}
}

输出结果:c language

解释:
#if LETTER
if(c>='a'&&c<='z') c=c-32;
#else
if(c>='A'&&c<='Z') c=c+32;
#endif
这段是指当LETTER的值为真(非零)时执行第一个程序段if(c>='a'&&c<='z') c=c-32;否则执行第二个程序段if(c>='A'&&c<='Z') c=c+32;
这里宏定义#define LETTER 0已将LETTER的值置为0,故执行第二个程序段,即把A到Z中的大写字母转换为小写字母(小写字母的ASCII码比大写字母的大32),其他不变,所以C Language变成了c language.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-04

    输出结果  c language


    解释:因为LETTER=0,所以所有大写会变成小写,如果LETTER≠0,则所有小写变大写!


  #define LETTER 0                             //定义一个宏常量 LETTER 

  main()                                                //主函数部分

  {char str[20]="C Language",c;            //字符串  赋值

  int i=0;                                                //定义一个整形变量i

  while((c=str[i])!='\0')                            //循环语句,单独处理字符串中的每一个字符,

                                                              //直到字符串结束,'\0'是字符串结束的标志.

  {i++;                                         //循环控制.i从字符串的第一个字符开始,每处理完一个就+1,

  #if LETTER                       //判断语句,判断LETTER的值,如果为真,则编译#else之前的语句,

                                                      //否则编译#else之后的语句.

  if(c>='a'&&c<='z') c=c-32;        //因为LETTER为0,所以这部分跳过,不编译.

  #else

  if(c>='A'&&c<='Z') c=c+32;        //因为LETTER为0,所以这部分是经过编译的,所以会执行.

  #endif                                        //宏编译结束.

  printf("%c",c);                                //输出处理后的字符串.

  }

  }

第2个回答  2013-02-04
c lANGUAGE

这个起始就是一个大小写转换的问题

if(c>='a'&&c<='z') c=c-32;
如果他是小写 那么就转成大写

if(c>='A'&&c<='Z') c=c+32;
如果他是大写 那么就转成小写

ASCii中大小写相差32
第3个回答  2013-02-04
这个程序是把大小写字母的转换
相似回答