| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1528 人关注过本帖
标题:问几个C中赋值语句的问题
只看楼主 加入收藏
ljfiona
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-9-28
收藏
 问题点数:0 回复次数:7 
问几个C中赋值语句的问题
问题1:
        int n,n1,n2,n3,n4;
        n1=n2=n3=n4=2;
        n=n1+1,n2+2,n3+3,n4+4;
        printf("n=%d\tn1=%d\tn2=%d\tn3=%d\tn4=%d\n",n,n1,n2,n3,n4);//输出为何是3  2  2  2  2?
        n=(n1+1,n2+2,n3+3,n4+4);
        printf("n=%d\tn1=%d\tn2=%d\tn3=%d\tn4=%d\n",n,n1,n2,n3,n4);//输出为何是6  2  2  2  2?
        n=n1=n2=n3=2;
        printf("n1=%d\tn2=%d\tn3=%d\n",n1=n+1,n2=n1+1,n3=n2+1);//输出为何是3  3  3?
        n=n1=n2=n3=2;
        printf("n3=%d\tn2=%d\tn1=%d\n",n3=n2+1,n2=n1+1,n1=n+1);//输出为何是5  4  3?

问题2:

                int x;
                int y=1;
                int z=-1;
                if(z<0)
                        if(z=y<0)-------------------if(z=y<0)这个语句什么意思?

                                x=3;
                        else if(y==0)
                                x=5;
                        else
                                x=7;
                        printf("x=%d\t",x);-----//为何输出7?
                        printf("z=%d\n",z);----//为何输出0?
                        if(x=z=y)
                                x=3;
                        printf("x=%d\t",x);----//为何输出3?
                        printf("z=%d\n",z);---//为何输出1?
搜索更多相关主题的帖子: 赋值 语句 
2008-09-28 11:10
J_j
Rank: 1
等 级:新手上路
威 望:1
帖 子:100
专家分:0
注 册:2008-8-21
收藏
得分:0 
问题一: n=n1+1,n2+2,n3+3,n4+4;这个表达式是一个逗号表达式,整个表达式的值才=n4+4=6,而n=n1+1=3;故输出n的值是3;想同的n=(n1+1,n2+2,n3+3,n4+4);是把逗号表达式的值赋给n,所以n=6;printf输出先计算后面的表达式,再输出,就是顺序是从右向左。
问题二:

 if(z=y<0)-------------------意思是先做(y<0)这个表达式,(成立就是1,不成立就是0),再把表带是的值赋给z;故下面输出的是x=7,z=0;
(x=z=y)这里,表达式中,先把y=z(值为1),再把1赋给x,使整个表达式的值为真,故x=3;z=1;
2008-09-28 11:49
wangwenan6
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-9-26
收藏
得分:0 
回复 1# ljfiona 的帖子
逗号表达式似乎是必须加上括号的,
        n1=n2=n3=n4=2;
        n=n1+1,n2+2,n3+3,n4+4;
        printf("n=%d\tn1=%d\tn2=%d\tn3=%d\tn4=%d\n",n,n1,n2,n3,n4);
第一个printf里面,n=3可能就是把n1+1的值赋给了n,后面的式子做了运算但是没有保存结果,所以结果就变成了3 2 2 2 2;
        n=(n1+1,n2+2,n3+3,n4+4);
        printf("n=%d\tn1=%d\tn2=%d\tn3=%d\tn4=%d\n",n,n1,n2,n3,n4);
第二个:n=(n1+1,n2+2,n3+3,n4+4);逗号运算好像是把所有的运算从左至右算一遍,然后取最后一个算式的值赋给n,n就变成了6,其他的变量没有改变;
        n=n1=n2=n3=2;
        printf("n1=%d\tn2=%d\tn3=%d\n",n1=n+1,n2=n1+1,n3=n2+1);//
printf函数里面的填写变量的地方可以写变量名也可以写表达式,写表达式就是计算表达式的值以后再输出;
        n=n1=n2=n3=2;
        printf("n3=%d\tn2=%d\tn1=%d\n",n3=n2+1,n2=n1+1,n1=n+1);//
同上.......把表达式全集算完以后再输出,结果就成那样了........

问题二LS正解,不过感觉你在if(x=y=z)中是想判断x,y,z相等吧....应该用"=="而不是赋值用的"="
2008-09-29 10:10
J_j
Rank: 1
等 级:新手上路
威 望:1
帖 子:100
专家分:0
注 册:2008-8-21
收藏
得分:0 
回复 3# wangwenan6 的帖子
“(x=y=z)中是想判断x,y,z相等吧....应该用"=="而不是赋值用的"="”
这不是在判断,是在赋值,x=y=z,如果换成x=y=0,得到的效果就不一样了。

[[it] 本帖最后由 J_j 于 2008-9-29 13:06 编辑 [/it]]
2008-09-29 13:04
zhiqiuyiye
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-29
收藏
得分:0 
逗号运算符又称为顺序求值运算符。逗号表达式的一般形式为
       [bo]表达式1,表达式2[/bo]
逗号表达式的求解过程是:先求表达式1,再求表达式2.整个表达式的值是表达式2的值。可以扩展为
[bo]表达式1,表达式2,.........表达式n[/bo]
它的值是表达式n的值。
2008-09-29 14:31
夜の枫
Rank: 2
来 自:深圳
等 级:新手上路
威 望:3
帖 子:98
专家分:0
注 册:2008-9-15
收藏
得分:0 
[bo][un]J_j[/un] 在 2008-9-28 11:49 的发言:[/bo]

问题一: n=n1+1,n2+2,n3+3,n4+4;这个表达式是一个逗号表达式,整个表达式的值才=n4+4=6,而n=n1+1=3;故输出n的值是3;想同的n=(n1+1,n2+2,n3+3,n4+4);是把逗号表达式的值赋给n,所以n=6;printf输出先计算后面的 ...

在C中,要注意一下你的赋值语句,和要跟着编程的逻辑走!!
2008-09-29 15:25
飞天舞xsj
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-12-25
收藏
得分:0 
1> n=n1+1,n2+2,n3+3,n4+4;
   printf("n=%d\tn1=%d\tn2=%d\tn3=%d\tn4=%d\n",n,n1,n2,n3,n4);//输出为何 是3  2  2  2  2?
  楼主的原意思是求逗号表达式的值,但事与愿违。由于没有括号,而“=”的优先级高于“,”,故此处不构成逗号表达式,只是将n1+1的值赋予n。其他不变。
2〉n=(n1+1,n2+2,n3+3,n4+4);
   printf("n=%d\tn1=%d\tn2=%d\tn3=%d\tn4=%d\n",n,n1,n2,n3,n4);//输出为何是                 6  2  2  2  2?
此处n的值为逗号表达式的值,由逗号表达式的值的求法得n的值为n4+4的值,其他没变,故为6  2  2  2  2。
3> n=n1=n2=n3=2;<这种赋值方式不提倡>
printf("n1=%d\tn2=%d\tn3=%d\n",n1=n+1,n2=n1+1,n3=n2+1);//输出为何是3  3  3?
此处注意在Turbo c和其他一些c编译器中printf等函数采取自右至左的顺序求职,这就可以解释为什么此处结果为3  3  3和下个问题为什么结果为5  4  3了。

二>
1>    if(z=y<0)这个意思是先判断y<0是否为真,将结果赋予z,然后判断z是否为真,因z=y<0判断下来z=0。故而执行else if(y==0)不通过,继而执行最后else,所以得后来输出结果。
2>    if(x=z=y)意思是将y的值赋予z,后又将z的值赋予x,最后判断x的值是否为真,因x=z=y后,x=1;判断条件成立。执行if后x=3的语句,故而x=3,z=1;

2008-09-29 17:12
zdyzhang
Rank: 9Rank: 9Rank: 9
来 自:栖息地
等 级:蜘蛛侠
威 望:4
帖 子:2335
专家分:1227
注 册:2008-9-20
收藏
得分:0 
看不懂!!学习ING

悲剧源于生活。
2008-09-29 20:52
快速回复:问几个C中赋值语句的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019993 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved