int a; a=1; printf("%d\n",a+=a-=a*a); 我知道结果是0,但不知道怎么来的,求解答

如题所述

首先明白这些运算符的结合顺序,
应该是从右往左,所以先算a*a=1,然后算a-=,
即运算a=a-1;得到a=0;然后再算a+=,
a+=等同与a=a+前边的结果0;现在a=0,所以a=0+0,
所以结果为0。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-15
int a; a=1; printf("%d\n",a-=a*a); 这样也是0.即a=0,然后a=a+0;
第2个回答  2012-04-15
从右往左分解:
a=a*a; //结果为a=1
a=a-1; //结果为a=0
a=a+0; //结果为a=0
第3个回答  2012-04-15
是这样算的:a+=(a-=(a*a));先算括号里面的。
1.a*a=1
2.a-=a*a;等于a=a-(a*a);则a=0;
3.a+= a-=a*a 则等于0;

...%d\\n",a+=a-=a*a); 我知道结果是0,但不知道怎么来的,求解答...
应该是从右往左,所以先算a*a=1,然后算a-=,即运算a=a-1;得到a=0;然后再算a+=,a+=等同与a=a+前边的结果0;现在a=0,所以a=0+0,所以结果为0。

int a=1; printf("% d,% d", a);
执行int a=1; printf("%d, %d, %d\\n", a, ++a, a++)的结果为3,3,1。这个语句的输出结果不是唯一的,因为对于求值的顺序是不一定的,所以说还有可能输出的结果为1,2,2。当求值的顺序为自右向左是,那么a++先引用1然后再加1,会输出1,然后++a是先加1再引用,会输出3这个结果,最...

int a=1;printf("%d,%d,%d",a++,a++,a++);结果
4.3 对于代码 int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为 4, 哪个是正确的?没有正确答案;这个表达式无定义。参见问题 3.1, 3.7 和 11.32。 同时注意, i++ 和 ++i 都不同于 i+1。如果你要使 i 自增 1, 使用 i=i+1, i+=1, i++ 或 +...

C语言a=1 printf("%d",a++)答案是什么
答案是1 a++是先把a的值带进运算在自加1 ++a是先自加1,在吧a的值带入运算 如果是 a=1 printf("%d",++a)那么就是2了 希望对你有帮助!!

C语言中 int a=1 printf(“%f”,a) 输出的为什么是0? 不是1.0呢?_百度...
printf 的参数并不会自动做类型转换的。例子中格式串中有“%f”,编译器就会当后边的参数是个浮点数,它不做类型检查。而把一个 int当成浮点数,因为两种类型的存储结构是完全不同的,后果就难以预料了,有可能程序崩溃,也可能正常运行,但得不到正确的结果。具体到楼主这个问题, 把整数1当成浮点数...

在c语言中,char a='A'; printf ("%d%o", a = a + 1 , a + 'a...
原因是,如果一个函数有多个参数,比如 int fun (int a, int b, int c);调用时,总是从最后一个参数开始压栈。 也就是c先进栈,其次是b,最后才是a。同理, 如果你这样写:int main (){ int i = 0;printf ("%d,%d,%d",++i,++i,++i);} 先计算最后一个参数(即最右一个++i),...

...int a; printf("%d",a); 为什么显示结果为0?没有定义a的值啊_百度...
int a;是动态存储类型,如果不赋初值,他的值为随机值,你这种情况只能说是巧合。如果是静态存储类型,那么不赋初值,他的值为0;比如:static int a; 此时a = 0.

C语言printf
回答:答案是A, a += a -= a *= a 这些符号计算顺序右到左 就是 a += (a -= (a *= a)) ------------------------ 3 2 1 计算步骤(3,2,1如下)即 1 计算完a=36 2 计算完a=0 3 计算完a=0 而*计算顺序是左到右 a += a -= a * a 即(a += (a ...

在c语言中,char a='A'; printf ("%d%o", a = a + 1 , a + 'a...
首先,应该说明的是在不同的编译环境中结果是不一样的。在VC++6.0中的规则: printf函数的执行顺序是由右到左的 举个例子1:int a=65,b=20;printf("%d,%d\\n",b=a+1,a=a+1);输出结果是:67,66 而不是:66,66 例子2:int a=65,b=20;printf ("%d,%d",b=a+1,b+1,a=a+1...

int a=1;if(a++>1) printf("%d\\n",a); else printf(("%d\\n",a...
int a=1; if(a++>1) \/\/a++>1 先判断后加一,1>1不成立,执行ESLE后面的语句,A++执行,A=2; printf("%d\\n",a); else printf(("%d\\n",a--) \/\/a--,是先输出后加减一。 所以最后结果应该是“2”

相似回答
大家正在搜