c语言 习题

来源:百度知道 编辑:UC知道 时间:2024/04/25 13:11:07
下面程序段的输出是(20,41 )
char a='A'; int b=20;
printf("%d,%o\n",(a+=1,a+b,b),a-'a'+'A',b);
下面程序段的输出是(66,42 )
char a='A'; int b=20;
printf("%d,%o\n",(a+b,b=a),a-'a'+'A',a+=1);

我想知道为什么这两道题 输出不一样???
我要详细的解释!!!
谢谢

因为逗号是右边运算到左边

最后个b没有用
a-'a'+'A',b意思用8进制输出'A'-'a'+'A'=41
(a+=1,a+b,b)意思是a+=1,然后输出b=20

最后边a+=1
a-'a'+'A'用8进制输出('A'+1)-'a'+'A'=42
a+b,b=a输出b=a='A'=66

首先你要了解题目叫你输出什么...
上面段程序输出一个DOUBLE型的数 和一个CHAR型的数据
从后面变量中去找 发现b是DOUBLE型的..所以是20然后发现a-'a'+'A'是字符型输出41

第二题如上题所做 b=a是把a转换成数字再赋给b 所以结果是66后面结果还是a-'a'+'A'答案应该与上面的一致吧..至于为什么会出现不一样可能是在调试过程中进程间的联系而出现错误吧