一道计算机C语言问题 急!

来源:百度知道 编辑:UC知道 时间:2024/07/06 17:26:03
main()
{
int a=3,b=2,c=1;
c-=++b;
b*=a+c;
{int b=5,c=12;
c/=b*2;a-=c;
printf("%d,%d,%d",a,b,c);
a+=--c;
}
printf("%d,%d,%d",a,b,c);
请帮忙解释一下,万分感谢!!1

我在后面给你注释了~~
int a=3,b=2,c=1;
c-=++b;//++b是先做自增运算,b=3,c-=3,c=-2
b*=a+c;//a+c=-1,b=-3
{int b=5,c=12;//注意有程序块的标志花括号{,b,c作用域只在本花括号内
c/=b*2;a-=c;//外面的b,c被里面的b,c屏蔽了,c/=10,c=1,a-=c,a=2
printf("%d,%d,%d",a,b,c);//a=2,b=5,c=1
a+=--c;//a+=--c,--c使得c=0,a不变,a=2
}//内部b,c作用域结束
//a=2,b=3,c=-2

最后的显示结果是:
a=2,b=5,c=1
a=2,b=3,c=-2

c-=++b; 拆分为 c = c-(b+1);
b*=a+c; 拆分为 b = b*(a+c);

c/=b*2; 拆分为 c = c/(b*2);
a-=c; 拆分为 a = a-c;

a+=--c; 拆分为 a = a+(c-1);

main()
{
int a=3,b=2,c=1;
c-=++b; //b左自加 b=b+1,c=c-b;
b*=a+c; //b=b*(a+c);
{int b=5,c=12; //{}内的内容b,c为重新定义的变量,不改变以前bc的值,但
//{}内的bc为新定义bc,可以换个符号来看他们就比较清楚了

c/=b*2;a-=c; //
printf("%d,%d,%d",a,b,c);
a+=--c;//左自减,
}
printf("%d,%d,%d",a,b,c);
}

c-=++b 首先是运行++b,就是在使用b之前加上1,就是b=b+1,所以b=3,然后再运行c-b;即可理解为
c=c-(++b);所以c 的值为c