逗号表达式的例题

如题所述

逗号表达式本身不难,常常与赋值运算符一起考,考查学生对这两个知识点的理解和考生观察是否细心。如下题:
题目:以下程序的输出结果是: main()
{
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf(%d,%d,%d\n,x,y,z);
} [A]2,3,3 [B]2,3,2 [C]2,3,1 [D]1,1,1
解析:
x和y的值经过自增以后分别为2和3,D可以排除。剩下3个选项选择什么呢?
如果是(x++,y++,++y)实际上可以看成(1,1,3)整个逗号表达式的值应该是3,那么选A。
如果是(x++,++y,y++)实际上可以看成(1,2,2)整个逗号表达式的值应该是2,那么选B。
但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中应该等价于这样的结合:(z=x++),y++,++y;如果这样写的话,则答案很清晰,为:2,3,1
正确答案选C。
PS:据我统计,这种类型的题目错误率超过70%.

温馨提示:内容为网友见解,仅供参考
无其他回答

逗号表达式与逗号表达式有关的题
例题1:给定(a = 3, b = 5, b += a, c = b * 5),计算逗号表达式的值。首先,前两个赋值表达式不会改变结果,从第三个开始计算,b += a等价于b = b + a,即b = 8。最终求得c = b * 5 = 40。因此,整个逗号表达式的值是40,变量a、b、c的最终值分别为3、8和40。例题2...

逗号表达式的运算过程是怎样的?
1、逗号表达式的运算过程为:从左往右逐个计算表达式。2、逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。3、逗号运算符的优先级别在所有运算符中最低。逗号表达式相关的题:例题1:(a = 3,b = 5,b+ = a,c = b* 5),求逗号表达式的值?答案:40。如:(3+5,...

逗号表达式的与逗号表达式有关的题
例题1:(a = 3,b = 5,b+ = a,c = b* 5),求逗号表达式的值?答案:40。前两个表达式只是赋值,从第三个开始计算,b+=a,即b=b+a,即b=5+3,b=8,求最后一个表达式,c=b*5=8*5=40.因为逗号表达式的值是最后一个表达式的值,所以整个逗号表达式的值为40,其他各变量最后的值...

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

逗号表达式的例题
逗号表达式本身不难,常常与赋值运算符一起考,考查学生对这两个知识点的理解和考生观察是否细心。如下题:题目:以下程序的输出结果是: main(){int x,y,z;x=y=1;z=x++,y++,++y;printf(%d,%d,%d\\n,x,y,z);} [A]2,3,3 [B]2,3,2 [C]2,3,1 [D]1,1,1解析:x和...

关于逗号表达式的问题.
整个表达式返回的结果是 1.0 但是并不是说里面变量的值就是 1.0 t=1,t+5,t++ 这个最后 t的值是 2.0 正确 表达式的值你应该这样测试:double x = (t=1,t+5,t++); 这样 x的值就是 1.0 了,这个就是最后表达式的值

逗号运算符有个例题我看不懂?
e=d--,(同上,先把d的值给e,e=2,然后d--,d=1)f=--e (这个就不一样了,先--e,使得e=1,然后f=e,使得f=1)结果:a,d,f,e均为1。然后说下为什么表达式的值为一。逗号表达式的优先级最低!所以上面的那个式子是先算赋值语句。那么也就可以写成下面这个形式:(2,2,1)最后此...

C语言(a=3*5,a*4,a+5)什么意思?输出20
首先括号里是逗号表达式,根据C中的规律,逗号表达式应该以最后一个表达式的值为最终输出值;其次我觉得楼主可能是觉得结果应该是65,其实中间的乘法运算只是调用a的值进行计算,而不是对其进行赋值,因此a的值仍以第一次赋值为准,为15…因此最后结果为20…希望我的回答对楼主有帮助…...

在C语言的例题→若t为double类型,表达式"t=1,t+5,t++"的值是?请解释...
逗号表达式的值为最后一个也就是最右边的那个式子的值,即1;t++;是先返回t的值,然后给t加1,所以最后的值为1.

例题3:若t为double类型,表达式t=1,t+5,t++的值是 2.0 编出这个c语言程 ...
int main(){ double t;printf("%lf",(t = 1, t + 5, t++));return 0;} 写得很好 但1楼的解释有点蛋疼了,搞得最后输出结果是t的值一样的 这里考的是逗号表达式的值和赋值表达式的值 好不好。。。逗号表达式的值是最左边的表达式的值 赋值表达式的结果是 =的左值 所以 只要 逗号那里...

相似回答