来个高手指点下,这段程序是不是本身有问题?
算出来的结果为什么是错的?
希望可以详细的解说一下!
#include <stdio.h>
void main()
{
int a,b,c;
b=5;c=5;
a=++b+c--;
printf("%d,%d,%d\n",a,b,c);
a=b---c;
printf("%d,%d,%d\n",a,b,c);
a=-b+++c;
printf("%d,%d,%d\n",a,b,c);
}
这段程序运行出的结果为:
11,6,4
2,5,4
-1,6,4
我想了十几分钟越想这个结果越不对!
其中第一个输出a=++b+c--
那么b应该是5+1=6,b的结果是6
c应该是c-1=4 ,c的结果为4
那么a=++b+c--其运算和a=6+4相同
输出结果应该为:
10
而上面的为11
这是为什么啊?
第一个输出结果中的6和4我可以理解可以那个11我是想不明白啊!
非常谢谢下面几位的回答可以我还是没搞懂,我是刚开始学C语言的,不过这个难关没法往下学!
我再看下视频,在线等!再次加分,我把全部的分都用上!
第一个输出结果搞懂了,是先算b=b+1,再算a=b+c,最后再算c-1!
结果为11,6,4是正确的!
第二个和第三个输出结果如果说b和c的结果为第一个运算所给的数的话,第二个输出结果:2,5,4
我只能明白5,4其中的我不明白为什么会输出2!
第二个输出结果搞懂了,可是又卡在第三个输出结果上了!
不明白-1这个数,如果说b和c都是第一个运算式所给出的值的话,那么第三个输出结果中的6和4很好明白,就是这个-1有点让人摸不着头脑?
希望有好心人帮我过了这个难关!
第三个运算式a=-b+++c
其运算顺序为:a=-(b++)+c ,a=-b+c,b=b+1
如果此时b和c的值是第一个运算式所给出的值的话,那么b=6,c=4所运算出的结果不可以为-1
++,--的前缀和后缀形式是有差别的.
++i是先将i的值加1,再用加1后的值参与运算
i++是先用i的值参与运算,运算结束后再将i的值加1
比如a=++b+c--;
就是先将b的值加1变成6参与运算,c的值5先参与运算,得到a=11后,c再变成4
a=++b+c--
就是b先自增为6,c加完后自减为4,此时还是5.那a就是6+5=11,b为6,c为4.
a=b---c
就是b此时为5,输出时为4,a就是5-5=0,b为4,c为5.
a=-b+++c
-负和++为同一个优先级,b此时为5,计算后为6,a就是-5+5=0,b为6,c为5.
补充一点:这种类型的计算都属于问题代码,在不同编译器中会有不同的结果,有的甚至会报错,在实际程序中没有任何意义,都是出考卷的老师BT之作。
a=-b+++c;
这两句有歧义吧,例如
a=(b--)-c;
a=b-(--c);
这样根据运行的编译器的设置来运算,有的向右,有的向左……
自己编程序要避免的,
如果是题,那纯粹是为了靠知识点的……
11,6,4
2,5,4
-1,6,4
首先,a=6+5=11; b=++b=6; c=c--=4
然后,a=(b--)-c=6-4=2; b=b--=5; c=4
最后,a=-(b++)+c=-5+4=-1; b=b++=6; c=4
主要是三个运算符是算靠前,不如a+++b=(a++)+b.这样就没有问题了
补充问题答案:
只能算a=++b+c; c--是在表达式计算完后再算!
结果好像也没有
首先运算符都是和左边的变量相关的。比如b---c就是b-c,然后b自减1
在题目中你得知道a b c是会变得,算完一次之后不会变成b=5.c=5的
a=b---c;
a=-b+++c;
这样写可读性在哪里,如果提高了性能倒可惜牺牲部分可读性。可是性能一样的。
我批判这种写法