国家誓言txt免费下载:C语言小问题

来源:百度文库 编辑:高考问答 时间:2024/04/28 09:24:58
请问大家一道C题:
int a=5, b;
b=++a*--a;
求b?
把为什么写出来谢谢 答案是25呵呵

楼主:b=++a*--a;等价于b=(++a)*(--a);b的结果不一定。这个表达式严格来说是非法的,因为在C的标准了没有定义到底是先自加还是自减,a到底引用什么时刻的值,不过有一点值得肯定的是++,--要优先于*.不同的编译器会有不同的结果。就算是同一个编译器也可能结果不一样。请看下面的程序
void main(void)
{
int a=5, b;
int c=a;
b=++a*--a;
clrscr();
printf("%d %d %d",a,b,++c*--c);
getch();
}试一试就知道了。其中的b结果为25,因为此编译器先自加再自减后a便等于5,然后再把5*5赋给b。

根据符号的优先级.++和--都高于*
所以++a 和--a都是先算,但是前一个先算,a=6,但是"++a"这个式子是a加1之前的值所以这个式子的值是5,但是a已经是6了,到后面--a:a是6,但是"--a"是a减1之后的值,所以这个式子的值是5.那两个式子的乘积是25...

18;
自加与自减优先级高。

但两个是同时算的 所以结果是 6*4 24 不信你输进去试试

但你如直接打出来 printf("%d",++a*--a)的话 结果就是 30了 先 ++A 6 A为6 --A为5

你把这两个试试 是不是很有趣 呵