C语言:下列程序运行时若输入 1abcedf2df<回车>输出结果为( )
发布网友
发布时间:2024-09-29 15:11
我来回答
共2个回答
热心网友
时间:2024-09-29 17:32
1AbCeDf2dF
VC6.0执行试过了。
#include<stdio.h>
main()
{ char a=0,ch;
while ((ch=getchar())!='\n')
{ if(a%2!=0&&(ch>='a'&&ch<='z')) ch=ch-'a'+'A';
a++;
putchar(ch);
}
printf("\n");
}
//输入1abcedf2df
第一次 a=0那么根据ascii表查看是null也就是空字符。第一次输入1,(a%2)是求和2的余数
结果是0而且1也不在a和z之间,所以if后面的ch=ch-'a'+'A';不执行。a变成1,输
出 ch也就是1.
第二次 a=1 输入a, (a%2)余数是1不为0,而且a在a-z范围内,所以执行ch=ch-'a'+'A'。
ch=ch-('a'-'A')=ch-32 注意看ascii表 a比A 要大32.,大写字母要比小写字母小32.
这样ch-32就是可以把ch变成大写字母。所以输出A 。a++变2
第三次 a=2 输入b (a%2)余数是0,这样if那个条件因为有&&所以两边都满足才会执行条件 语句。于此ch=ch-'a'+'A'就不执行了。直接输出b
1Ab....
由此类推即可。
希望对您有所帮助!:)
热心网友
时间:2024-09-29 17:34
输出结果:1AbCeDf2dF
首先说a%2!=0,也就是在a为奇数时才成立,ch>='a'&&ch<='z'是判断输入字符是不是小写字符,如果是,把它转换成大写ch=ch-'a'+'A';
判断一个字符a增加一个,转换的字符为:2、4、6、10,1和8字符位数字,不需要准转换。
a从0开始计算a%2!=0,第一个字符时,a=0,但是字符为数字字符,不用转换;
a=1时,a%2!=0成立,输入字符为a,满足后面的条件,转换为大写A;
a=2时,a%2!=0不成立,不转换;
a=3时,a%2!=0成立,输入字符为c,满足后面的条件,转换为大写C;
以此类推。