C语言字符型问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 04:26:57
一,这个程序段输出结果为什么是a?我觉得是A 。
char x='A';
x=(x>='A'&&x<='Z')?(x+32):x;
printf("%c\n",x);

因为我觉得那个条件表达式的计算,表达式1的结果是x=1,而x初值是 'A',那么表达式1的值就为零,就该计算表达式3的值作为整个条件表达式的值啊。

二,还有这一题,看不懂做不来。请大虾们讲解一下解题过程。

若变量以正确定义,在执行以下while语句时,输入字符A后,ch的值是
while(ch=getchar()=='A');
答案是0

三,请编写程序,输入一行数字字符(用回车结束),每个数字字符的前后都有空格。请编程,把这一行中的数字转换成一个整数。例如,输入
2 4 8 3 <CR>
则输出整数:2483

书后答案的参考程序段
while((ch=getchar())!='\n')
{ if(ch>='0'&&ch<='9')n=n*10+ch-'0';
}

这个n=n*10+ch-'0'是什么意思?是怎么转换成一个整数了

一、要注意运算级别的问题
?:运算符级别比=运算符高,所以对于这样的语句:
x=(x>='A'&&x<='Z')?(x+32):x;
先计算
(x>='A'&&x<='Z')?(x+32):x
其值为x+32,即'a'
二、仍然是运算级别的问题,一定要记住,赋值运算符的运算级别仅比逗号运算符高!
所以while后面的括号里,先计算getchar()=='A'
getchar()是一个函数,它使得屏幕上出现输入的光标等待输入,输入A后,getchar()=='A'值为1,
接着执行ch=1,将1赋值给ch,而整个表达式的值亦为1,非零,进入while循环。
接着,因为输入缓冲区中还剩下一个回车'\n',第二次判断循环条件时,getchar()得到的是'\n','\n'=='A'的值为0,ch得到0,退出循环。

三、 n=n*10+ch-'0'
的意思就是,把原来的数往左移一位,腾出个位数,ch-'0'即个位数的值(因为ch中存储的是字符的ASCII码,必须减掉'0')

第一个问题要了解三目运算符 A?B:C 是怎样作用的
第三个问题要了解ASCII编码方式
第二个问题是运算符优先级的原因

x=(x>='A'&&x<='Z')?(x+32):x;
计算时是使用A的asc码计算,A是65,a是97,所以输出的是a。

0就是true真,1是flase假,输入A跟‘A’相等,所以ch=true,也就等于0。

因为输入的数字是按照字符处理的,所以计算时也是按照字符处理,及字符的asc码,数字0的asc码是48,所以如果想把字符转换成我们想要的数字就要把每