C语言 帮我解道题

来源:百度知道 编辑:UC知道 时间:2024/07/04 15:56:52
#include<stdio.h>

void main()
{
int a=5,b;
b=++a*--a;
printf("%d\n",b);
}
答案是25,谁给讲解下

关键在“b=++a*--a;”这一句。

因为自加(或自减)的优先级大于乘法的优先级。
所以:第一步,先算“++a”,a从5变成了6。第二步,算“--a”,a从6变成了5。第三步,算*号,左右两边的数值都为5,所以为25。

如果是“b=++a*a--;”的,结果就是36。
因为先算完第一步时,虽然--的优先级大于*的优先级,但是,编译器是先引用a的值(这时是6)做完运算后,然后a再自减的。

虽然说这两个表达式结束后,a的值都为5。但其过程不一样。希望楼主你能仔细认真的体会“a++”与“++a”的区别。

因为优先级的关系,先计算a--,a++,a=5,再计算a*a,所以结果为25

a=5;
++a --a是在计算前先做++ --操作,因为加1减1正好抵消,所以a还是等于5
5×5=25
赋值给b,就是25

#include<stdio.h>//源文件
void main()//主函数
{
int a=5,b;//定义函数
b=++a*--a;//第一个a先加以后再使用,第二个a减1后在使用,等于说是b=(a+1)*(a-1),因为++和--得优先级大于*
printf("%d\n",b);//输出结果,%d是整型,\n是换行
}

int a=5,b;/*定义a,b为整型,并给a附初值a=5*/

b=++a*--a;/*先算++a再算--a,这样a值还是5
左加(减)的优先级高于*所以先算
*/
最后结果就是25了

b=++a*--a;

上面解释得很好!

这2个a是占同一内存空间,值都先后的被修改了。

我也明白了。。。