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

#include<stdio.h>voidmain(){inta=1,b=0;printf("%d",b=(a++)+(a++));printf("%d\n",a+b);... #include<stdio.h>
void main()
{
int a=1,b=0;
printf("%d",b=(a++)+(a++));
printf("%d\n",a+b);
}
答案为:2,5

另一题为填空题:
定义int a=5,b; , 则执行表达式b=++a*--a之后,变量b的值为?
答案为:25.
展开
 我来答
匿名用户
2011-08-19
展开全部
第一题:
a初始为1,b为0; 输出时:(a++)要先将a带入计算,后再算a++的值,
所以执行完:printf("%d",b=(a++)+(a++)); 后
b=2,a=3
再执行: printf("%d\n",a+b);
结果当然为:2
所以输出时结果为2,5

第二题:*的优先级比++与--高
所以先算*,再算++与--
所以结果为:25
追问
好像是++的优先级高,呵呵~~~
追答
++与--的优先级在第二级,*(乘)在第三级,你说的可能是*(取值运算符)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天幻云飞
2011-08-19 · 超过12用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:12.4万
展开全部
++i和--i,称为前置运算,i++和i--,称为后置运算.
a++ 先使用a值,后加1
++a 先加1,后使用a值
b=(a++)+(a++)的意思是b=a+a;a++;a++;此时b=2,a=3,所以a+b=5,
第二个
b=++a*--a的意思是++a;--a;b=a*a;a的值自增自减后又变为5,5乘5是25
追问
你这个前置运算与后置运算的观点好新颖啊,我怎么没听说过呢?课本上也没有啊??
追答
概念是从课本上抄的,我简化了,省去了一些汉字,我怕你不爱看.
c语言程序设计教程 你也可以叫前缀后缀
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我不废了
2011-08-19 · TA获得超过152个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:109万
展开全部
a=1;b=a++;执行后a=1,b=2。下次使用a时才变为a=2
a=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",a+b);输出5。

第二题你看上面的回答吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ak200047
2011-08-19
知道答主
回答量:30
采纳率:0%
帮助的人:12.8万
展开全部
首先,你要搞清楚a++和++a的不同,在b=(a++)+(a++)中,先执行b=a+a,b=1+1=2,在执行那两个a++,a=3,后一个a+b=2+3=5;
第二题:乘法的优先级是高于加减法的,所以先算a*a就是25了
追问
++是自加运算,不是加减法。应该是++的优先级高。呵呵~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
山上的阿竹
2011-08-19 · TA获得超过463个赞
知道小有建树答主
回答量:513
采纳率:87%
帮助的人:132万
展开全部
因为 a++ 是先取值, 后+1
printf("%d",b=(a++)+(a++));
以上计算时, a取值为1, 因此 b为 1+1=2, a本身增加了两个为3
printf("%d\n",a+b);
a+b=3+2 =5

b=++a*--a
的值应该为 24, 而不是25
追问
可是书上的答案给的是25啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式