关于C语言求值的问题

程序如下,求输出值,答案是21,我不明白,求详解,本人初学,不好意思。
#include <stdio.h>
int func(int a,int b)
{intc;
c=a+b;return c;
}
main( )
{int x =6,y=7,z=8,r;
r=func((x--,y++,x+y),Z--); printf("%d\n",r)
}

(x--,y++,x+y)是逗号运算结果是x+y!则r=func(x+y,z--);
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-19
(x--,y++,x+y)是一个运算式,其中,的运算优先级别最低,所以(x--,y++,x+y)的运算结果是最后一个逗号右边的值:x+y=5+8=13。
然后r=func(13,8--)即:a=13,b=8--。r=a+b=13+8=21
以为b=8--是先赋值再减1.所以最后结果是21
第2个回答  2011-08-19
楼上说的对…括号内是括号运算…从左往右依次计算但是只输出最后一个…把下面的数值赋给上面运算玩再赋给r输出就好了…
第3个回答  2011-08-19
(x--,y++,x+y)是逗号运算x--后x=5,y++后y=8 ,x+y=13
所以(x--,y++,x+y)=13
z--后z=7,但是这里Z--是一个表达式,这个表达式的值是8
因此13+8=21
第4个回答  2011-08-19
(x--,y++,x+y)逗号运算,运算x--,y++后的和x+y,即5+8=13;

z--,赋值后自减,第一调用func,Z=8,之后自减一次。
第5个回答  2011-08-19
x--,y++,x+y)是逗号运算x-- x=5,y++ y=8 ,x+y=13
(x--,y++,x+y)=13
z-- z=7,表达式的值是8
13+8=21

c语言题求解答
1、因为逻辑运算是“左结合律”和“ 短路求值 ”的,另外C语言保证逻辑运算的求值顺序是从左往右的。2、第一个printf()没什么好说的,赋值如此,所以x=-1 y=-1 z=-1 3、第二个printf(),x=-1 y=0 z=0,要说明一下:++y&&++x||++z;它的运算过程先算++y它的值为0,决定了++y && ...

C语言中a%=(b%=3)结果为什么是零,而不是是a的值?
在C语言中,赋值操作符(=)具有右结合性,也就是说,表达式从右向左求值。在表达式a%=(b%=3)中,首先计算b%=3,即将b的值对3取模,并将结果赋值给b。假设b的初始值为任意整数,而这里取模操作的结果为0或非0。然后,将这个取模操作的结果作为新的b的值,并计算a%=新的b的值(也就是之...

C语言参数求值问题
都说了printf中的求值顺序是要看编译器的,有自左向右的,也有自右向左的。明确回答你“这个程序运行时两次输出参数求值顺序一样”,因为这段代码是在同一个编译器下执行的。自左向右的系统结果:2 2 2 3 自右向左的系统结果:2 2 3 2 如果你想知道printf("%d %d\\n",*p++,*(q++));为...

C语言 实参数求值问题
当 f(i, i++) 时,因为 ++ 是后缀运算,所以程序先把两个 i 值传入函数,然后 i 再自增就和 f 函数没有什么关系了。当 f(i, ++i) 时,因为 ++ 是前缀运算,所以程序先计算自增,虽然在计算左边参数的 i 时,i 的值还没有增加,但是因为这个时候并不传值,等到全部计算完后,再传值...

求一道c语言的求值问题
第一个就是啊a<b是为真所以a<b=1;第一二个是a的值等于c的值;a&&b的意思是与运算,a与b;例如a<xa && x4与5; 3+4=5

关于C语言求值的问题
(x--,y++,x+y)是逗号运算结果是x+y!则r=func(x+y,z--);

C语言求值问题
还有个小问题,但不影响输出,就是如果你想把每一项结果保存,下来,那么数组m没有保存前两项,如果不用保存每一项,那m没必要定义为数组 int main(){int x;float f[20],q[20],m[20];float sum=0;f[0]=2;f[1]=3;q[0]=1;q[1]=2;for(x=2;x<20;x++){f[x]=(f[x-2]+f[...

C语言求值
nt WF(int x, int y){ x=x+y;\/\/x=3+5=8 y+=x;\/\/y=y+x;y=5+8=13 return x+y;\/\/13+8=21} 所以,第一题的结果是21 2.第一个LA计算的是数组的前三项和1+2+3=6,第二个是数组后三项的和3+4+5=12 所以输出b的值为6+12=18 ...

C语言 简单多项式的求值 题目是:对用户输入的任一整数,输出以下多项式...
include <stdio.h>int main(){int x = 0, y = 0;scanf("%d", &x);y = 2 * x * x + x + 8;printf("%d\\n", y);return 0;} 执行结果:

C语言 表达式求值
先把四个小括号里的算出来,再按照我刚才写的顺序计算即可。b<c 得1 b!=a 得1 a+b 得 -1 b-c 得-9 即 !1+1||-1&&-9 其中 !1+1 得 1 -1&&-9 得 1 最终 1||1 得 1.总之,不管是关系运算符还是逻辑运算符的结果都只有“真、假”两种,C语言用1代表真,用0代表假。

相似回答