问两道C语言题,这两道题考点好像一样,求解析过程。越详细越好!!

[复制链接]
查看11 | 回复9 | 2011-8-19 07:21:22 | 显示全部楼层 |阅读模式
#includestdio.hvoidmain(){inta=1,b=0;printf(\"%d\",b=(a)(a));printf(\"%d\\n\",ab);}答案为:2,5另一题为填空题:定义inta=5,b;,则执行表达式b=a*--a之后,变量b的值为?答案为:25.
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
i和--i,称为前置运算,i和i--,称为后置运算.a先使用a值,后加1a先加1,后使用a值b=(a)(a)的意思是b=aa;a;a;此时b=2,a=3,所以ab=5,第二个b=a*--a的意思是a;--a;b=a*a;a的值自增自减后又变为5,5乘5是25追问你这个前置运算与后置运算的观点好新颖啊,我怎么没听说过呢?课本上也没有啊??
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
概念是从课本上抄的,我简化了,省去了一些汉字,我怕你不爱看.c语言程序设计教程你也可以叫前缀后缀
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
因为a是先取值,后1printf(\"%d\",b=(a)(a));以上计算时,a取值为1,因此b为11=2,a本身增加了两个为3printf(\"%d\\n\",ab);ab=32=5b=a*--a的值应该为24,而不是25追问可是书上的答案给的是25埃
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
首先,你要搞清楚a和a的不同,在b=(a)(a)中,先执行b=aa,b=11=2,在执行那两个a,a=3,后一个ab=23=5;第二题:乘法的优先级是高于加减法的,所以先算a*a就是25了追问是自加运算,不是加减法。应该是的优先级高。呵呵~~~
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
a是在使用完a之后自加1;a是在使用a之前自加1;因此:第一题代码执行过程等价于:b=aa(此时b=2=11);a=a1(前一个括号的a,此时a=2);a=a1(后一个括号的a,此时a=3);所以输出结果显而易见是25啦。第二题代码执行过程等价于:
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
第一题:a初始为1,b为0;输出时:(a)要先将a带入计算,后再算a的值,所以执行完:printf(\"%d\",b=(a)(a));后b=2,a=3再执行:printf(\"%d\\n\",ab);结果当然为:2所以输出时结果为2,5第二题:*的优先级比与--高所以先算*,再算与--所以结果为:25追问好像是的优先级高,呵呵~~~
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
与--的优先级在第二级,*(乘)在第三级,你说的可能是*(取值运算符)
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
a先取a再加1所以aa=2b=2a=3b=a*--a从右向左看--aa=4自加自减优先级高于*所以算a=5然后5*5=25那些说*比--优先级高的好好看看书行不别误导别人
回复

使用道具 举报

千问 | 2011-8-19 07:21:22 | 显示全部楼层
a=1;b=a;执行后a=1,b=2。下次使用a时才变为a=2a=1;b=a;执行后a=2,b=2。a先变为2再被使用printf(\"%d\",b=(a)(a));所以执行后b=2,a=1,注意此处执行了两次a。下次用a时a=3所以printf(\"%d\\n\",ab);输出5。第二题你看上面的回答吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行