[c语言]小课堂 day1

每天讲解一道c语言的小知识点

#include <stdio.h>

int main()
{
    int x = -2;

    if(-3 <= x <= -1)
    {
        printf("111");
    }
    printf("222");
    return 0;
}

想想答案会输出什么呢?

-3 <= -2 <= -1是成立的

那就会进入if条件里面是吧?

所以就会输出 111222 咯











然而运行之后的答案并不是
来看看答案:
运行结果欸,好像只有输出了 222 呀

在这里很多新手都会想当然的写上

if(-3 <= x <= -1)
{

}

因为数学里面也是这样表示的,但是c语言里面可不是这样表示的

我们先说说c语言里面如果这样写,会怎么样呢

C语言运算优先级
从网上找到c语言的运算优先级可知 <= 运算符的结合方式是由左向右结合

这里的 x = -2 我们带入c语言语句中

if(-3 <= -2 <= -1)

按照由左向右的运算顺序 我们先看 -3 <= -2
这是个关系表达式 c语言里面这种表达式会返回 1 或 0
显然-2比-3大,所以这里会返回1
然后语句就变成了这样

if(1 <= -1)

这还是一个关系表达式,所以我们继续计算
显然1 > -1 所以这个表达式返回 0

if( 0 )

if语句里面是0(假) 那就不会执行if语句用{}括起来的内容,所以上面的代码

printf("111");

也就不会执行啦

那还有一个问题
如果我要在c语言里面判断一个数是否大于-3小于-1那该怎么写呢?
答案是用 && 逻辑与运算符
从上面的运算优先级来看,会先执行 >= 和 <= 两关系表达式 最后用 && 表示"和" “与”
也就是两个条件都满足的情况,这样就能执行if语句里面的代码了
所以正确的做法是这样写

#include <stdio.h>

int main()
{
    int x = -2;

    if(-3 <= x && x <= -1)
    {
        printf("111");
    }
    printf("222");
    return 0;
}


其实很多新手都喜欢这样写,下面是某新手写的代码,看上去也能打印 111222
但是逻辑本身是有问题的,你能帮这位新手修改一下代码吗?

#include <stdio.h>

int main()
{
    int x = 2;

    if(1 <= x <= 3)
    {
        printf("111");
    }
    printf("222");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

某新手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值