下列程序的运行结果是 #include <stdio.h> void main() { int x = 10, y = 20, z = 30;

1、直接运行程序得出结果

#include <stdio.h>

void main() {
    int x = 10, y = 20, z = 30;
    printf("%d %d %d %d\n", x = y = z, x = y == z, x == (y = z), x == (y == z));

}

不用说程序运行就知道结果了:30 30 0 0

可是,这到底是怎么来的?

2、分析一下每一次计算后x,y,z的值分别是多少,

于是改成了如下代码形式:

#include <stdio.h>

void main() {
    int x = 10, y = 20, z = 30;
//    printf("%d %d %d %d\n", x = y = z, x = y == z, x == (y = z), x == (y == z));
    printf("%d %d %d %d\n", x = y = z, x, y, z);
    printf("%d %d %d %d\n", x = y == z, x, y, z);
    printf("%d %d %d %d\n", x == (y = z), x, y, z);
    printf("%d %d %d %d\n", x == (y == z), x, y, z);

}

运行结果是:30 1 0 1

这个结果和我笔算的结果一样,我很满意,不过应该是有问题的?,问题出在这里分多行运行,x,y,z的值在运行完后有改变,所以这样是不行的?

3、再次完美改写,

还是放在一个printf运行,输出每个式子后的x,y,z

#include <stdio.h>

void main() {
    int x = 10, y = 20, z = 30;
    printf("%d: x=%d y=%d z=%d\n%d: x=%d y=%d z=%d\n%d: x=%d y=%d z=%d\n%d: x=%d y=%d z=%d \n",
           x = y = z, x, y, z,
           x = y == z, x, y, z,
           x == (y = z), x, y, z,
           x == (y == z), x, y, z);

}

看运行结果:

下面来分析结果:

        1、在第1个式子运行时,x=y=z,我们把z=30赋值给y,然后又赋值给x,所以 x=y=z=30;

所以这里输出结果就是30。

        2、在第 2个式子运行时,x=y==z,优先级:比较运算符>赋值运算符,所以y==z是返回真值1,因为y=z=30,再赋值x=1,那么应该输出为1才是,可是可是输出为30诶???

        3、在第3个式子时,x==(y=z),括号的优先级高,那么y=z=30,此时x=30,那么比较运算的结果是成立的,返回真值1才是。可是输出结果是0诶??

        4、在第4学式子时,x==(y==z),括号优先级高,那么y==z,返回值是1,x==1,不成立,所以返回为0。

4、这题真的把我整不会了

要是您会,可以不吝赐教吗?

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒笑翻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值