鱼C论坛

 找回密码
 立即注册
查看: 8476|回复: 22

C语言求解

  [复制链接]
发表于 2012-12-18 21:47:31 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
void main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf("y=%d,x=%d",y,x);
}
Y怎么等于6而不是10

最佳答案

查看完整内容

y=(x=a+b),(b+c); 等价于: y=(x=a+b); (b+c);//这句没有实际效果,可以去掉 第一句进而等价于: x=a+b; y=x; 剩下的自己算
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-18 21:47:32 | 显示全部楼层
y=(x=a+b),(b+c);
等价于:
y=(x=a+b);
(b+c);//这句没有实际效果,可以去掉
第一句进而等价于:
x=a+b;
y=x;
剩下的自己算
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-18 22:06:07 | 显示全部楼层
应该运算的先后顺序问题吧 ,你可以顺序换下试下。你这写的好不规范啊! 我也是刚学要是答错了就算了!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-18 22:08:16 | 显示全部楼层
这是例题来的,我算了跟答案不一样所以迷惑了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-18 22:39:55 | 显示全部楼层
豆號( , )后面的公式(b+c)是不計算的。

因為只計算了y=(x=a+b) == y=(x=2+4)。

So, y=6;

至於為什麼要寫, 我也不知道...呵呵
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-18 22:42:26 | 显示全部楼层
优先级的问题,如果这样((x=a+b),(b+c))那Y就是10了 ,但是没有括号的话,就不一样了,首先计算(x=a+b)结果是6,后面是个逗号,由于=的优先级大于“,”号,所以,就直接赋值给Y了,后面的b+c就不在运算了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-18 22:43:29 | 显示全部楼层
(b+c) 这个值对y没有任何影响 外层没有括号
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-18 23:31:52 | 显示全部楼层
我也不知道。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-19 08:40:15 | 显示全部楼层
本帖最后由 づ綄镁の爱ヽ 于 2012-12-19 10:09 编辑

y=((x=a+b),(b+c));
要这样 才会y=10
逗号运算符,其功能是将两个表达式连接起来组成一个表达式。其求值过程是分别求两个表达式的值,并以最右边的表达式的值作为整个逗号表达式的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-19 13:30:48 | 显示全部楼层
    运算的优先级问题
    在你的代码   y=(x=a+b),(b+c)  中
    有三个表达式  分别是 括号表达式(()), 赋值表达式(=), 逗号表达式(,)  ;
     其中  括号表达式的优先级级最高 其次是赋值表达式  最低的逗号表达式(C语言中 逗号表示优先级别最低)
     所以  整个表达式 在计算出括号里卖弄的结果之后 就直接执行赋值运算 而不管逗号表达式 故y=6
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-19 18:24:33 | 显示全部楼层
逗号表达式优先级最低所以先计算y=(x=a+b)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-19 18:37:47 | 显示全部楼层
逗号操作符的事
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-19 23:59:48 | 显示全部楼层

逗号是选择大小吗?
你写的:逗号运算符,其功能是将两个表达式连接起来组成一个表达式,什么意思·?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-20 08:25:52 | 显示全部楼层
本帖最后由 づ綄镁の爱ヽ 于 2012-12-20 08:28 编辑
ZXH_KK 发表于 2012-12-19 23:59
逗号是选择大小吗?
你写的:逗号运算符,其功能是将两个表达式连接起来组成一个表达式,什么意思·?


这句话的意思就是说  上面那个y=((x=a+b),(b+c));
就是一个逗号表达式,中间是有逗号分隔开的。逗号表达的值,取的是啊右边的值
(x=a+b)是一个表达式,(b+c)也是一个表达式,中间加一个逗号 就组成了((x=a+b), (b+c))
就是把两个表式连接起来,组成一个表达式,但是在最外层一定要加上括号
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-20 20:39:41 | 显示全部楼层
づ綄镁の爱ヽ 发表于 2012-12-20 08:25
这句话的意思就是说  上面那个y=((x=a+b),(b+c));
就是一个逗号表达式,中间是有逗号分隔开的。逗号表 ...

enenenenenen,好,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-23 16:15:27 | 显示全部楼层
づ綄镁の爱ヽ 发表于 2012-12-20 08:25
这句话的意思就是说  上面那个y=((x=a+b),(b+c));
就是一个逗号表达式,中间是有逗号分隔开的。逗号表 ...

照你这么说:逗号表达式取的是右边的值?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-23 16:18:50 | 显示全部楼层
刚刚验证了一下 ,确实是这样:逗号表达式取的是右边的值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-28 00:18:28 | 显示全部楼层
从课本后面的运算符 优先等级表查一下你就能明白了
逗号的优先级最低
而且结合顺序是自左向右的
就是说y=(x=a+b),(b+c);
先算的是 将 x = a + b 的结果 (也就是x的值)赋值给y
然后再计算 b + c
因为逗号的优先级最低,所以计算结束后不做任何赋值操作
所以不得10的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-7 17:23:39 | 显示全部楼层
y=((x=a+b),(b+c)),这样的y才是10,而你的没()括起来的,相当于先算括号内的,再将括号内的值赋给y,所以x,y都是6.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-10 11:06:56 | 显示全部楼层
应该和y=a+b;x=a+b;等价吧。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-13 19:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表