求编程大侠解答!一个C语言逗号表达式和括号的问题

如题所述

逗号很好办,逗号就是单纯分隔两个式子,括号的主要作用是将括号内的运算式子作为一个整体,也有优先运算的含义(这个含义和数学上是一样的)
对于你的这段程序,首先说b,原式是(b=4*5, b*2), b+6

首先计算b=4*5,此时b=20,然后算逗号后的式子就是b*2,注意这里没有说把结果赋值给b,所以b还是等于20,最后的b+6同理,只是计算了一个式子,并没有保存结果,所以b最后的输出为20;

再说a,输出的式子是一个括号,这是一个整体,式子里面首先计算a=3*5,所以a=15,然后计算a*4,同样没有被保存,a还是15,最后计算a+5,这个时候还是没有赋值,所以a=15。但是由于在同一个括号里有2个逗号分开了3个式子,所以括号这个整体的值由最后一个式子决定,最后一个式子的值是a+5,也就是15+5,所以括号这个整体的值是20,输入为20。追问

大侠,同样是逗号表达式,为什么b*2不赋值,而a+5赋值了呢?

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-03-09
逗号的优先级最低,而括号最高。在计算逗号表达式时,运算方向从左到右。整个表达式的值等于最后一个逗号表达式的值。
(b=4*5,b*2)一句,先处理左边的b=4*5,得到b=20;然后处理右边的b*2,得20*2=40,整个括号内表达式的值为最右边的b*2表达式的结果40。接着处理右边的表达式b+6,得20+6=26,整行表达式的值为最右边的b+6的结果26。但这个值没有被赋予给任何变量,于是被舍弃。
printf("%d\n",(a=3*5,a*4,a+5)); 一句,先处理括号内最左边的表达式a=3*5,得到a=15;接着处理a*4,得15*4=60;最后处理a+5,得15+5=20。整个括号表达式的值等于最右边的表达式a+5的值20,该值被压栈到printf函数中%d的位置,然后输出,得20。
printf("%d\n",b),输出b的值20。本回答被网友采纳
第2个回答  2016-03-09
括号会返回最后一个值,但是前面的逗号都会运算(a=3*5/*这个时候a被赋值*/,a*4/*这个值是60但对a没有影响*/,a+5/*这个值是20*/)括号最后的值是20,所以括号的值就是20。
第3个回答  2016-03-09
第七行的应该是printf("%d%d%d\n",(a=.....))

求编程大侠解答!一个C语言逗号表达式和括号的问题
逗号很好办,逗号就是单纯分隔两个式子,括号的主要作用是将括号内的运算式子作为一个整体,也有优先运算的含义(这个含义和数学上是一样的)对于你的这段程序,首先说b,原式是(b=4*5, b*2), b+6 首先计算b=4*5,此时b=20,然后算逗号后的式子就是b*2,注意这里没有说把结果赋值给b,所...

c语言小代码,逗号表达式的问题
a=3*5, a*4 你是误会在这里了 =赋值运算比逗号的优先级更高,所以这里是先计算a=3*5=15,然后a*4只是单纯的一个值,并不会有a=a*4这样的计算。所以 里面的逗号运算符最终只做到一个效果 就是a=15 于是最终值是 a=a+5=15+5=20 ...

C语言逗号表达式的问题?
如果是((x=a+b),(b+c))实际上可以看成(6,10)整个逗号表达式的值应该是10 但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中 y=(x=a+b),(b+c);应该等价于这样的结合:y=x,10;如果这样写的话,则答案很清晰,为:6 提示...

C语言中逗号表达式的问题
逗号表达式的运算级最低,比赋值运算符级别还低。所以 y=(x=a+b),(b+c);先算x=a+b=6,再y=x=6;而后面的b+c不影响x和y的值。所以最终x,y的值都是6.只不过 y=(x=a+b),(b+c);这整个式子的值是b+c=10而已。如果是y=((x=a+b),(b+c)); 那么才结果是x=6,y=b+c=10...

问一个C语言中逗号表达式的问题
逗号表达式 a+2,c+2 的值就是最后一个逗号后的表达式的值,即c+2的值,不过前面的也要计算。所以逗号表达式 4,99 的值就是99咯。有时候前面的计算可能后影响最后一个表达式的值,所以,得到结果虽然是最后一个表达式,但前面的也得先计算。eg: c='a'; 则表达式 s=(c++,c+2)=100; c先...

c语言逗号表达式的问题
逗号运算符的做优先级是最低的,所以要先算赋值运算符.y=(x=a+b),(b+c)是一个表达式,包括两部分:表达式1是一个赋值表达式,表达式2是一个算术表达式.老谭的书里说的是整个逗号表达式的值是表达式2的值,所以,整个逗号表达式的值是b+c,y的值是表达式1的值,即a+b.他写错了.这样写就对了y=(...

C语言逗号表达式问题
c语言逗号表达式是由左向右进行的:k=3*2=6,K+2=8,表达式返回8。逗号表达式用法:当顺序点用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一个表达式的值。示例:main(){int a,s,d;s=2;d=3;a=12+(s+2,d+4);} ...

C语言菜鸟提问,关于逗号表达式。请看我下面的例子
这么来看y=(x=a+b)是逗号的前一个语句,那么y就等于6;而(b+c)是逗号的后面一个表达式 你这样看看:加一个变量:int z;z=(y=(x=a+b),(b+c));这样z就等于(b+c)了,那么总结出来:要得到一个逗号表达式的值是要将这个逗号表达式用括号括起来的!!

C语言中括号运算符的问题
(a=10,b=a+5)这是一个逗号表达式,它将以逗号为界,从左到右依次计算每个表达式的值,最后返回最右边的表达式的值,具体到这个式子就是:先计算a=10,然后再计算b=a+5,所以b=10+5=15,并且最后返回b的值,也就是15

c语言 逗号表达式问题
2、逗号表达式是所有运算符中最低的,为十五,也就是说把其它都算完了才轮到它,程序中应该是先将x++的值负给z,然后算y++,最后算++y,如果按你想的那样,赋值语句该写成z=(x++,y++,++y); ,加上一个括号。 手机写的,光换输入法就累死了!

相似回答