C语言中的常见操作符

本文介绍了C语言中的关系操作符,包括其用法、真假判断,以及逻辑操作符如逻辑取反、与(&)、或(||)的原理和短路特性。还讲解了条件运算符的使用。
摘要由CSDN通过智能技术生成

之前我们已经认识了和数学同频用于计算的操作符,而今天我们再来介绍几个和数相关的操作符。

  • 关系操作符

C语言的关系操作符和数学中的有些类似,但是也有些需要区分开。C语言中的关系操作符主要有下面6个。

  • >大于运算符
  • <小于运算符
  • >=大于等于运算符
  • <=小于等于运算符
  • ==相等运算符
  • !=不相等运算符

关系操作符用于表达式时,该表达式又称关系表达式。

例如:

a == b;

a != b;

a < b;

a > b;

a <= b;

a >= b;

 我们之前谈论过真或假的概念,非零为真,零为假。而关系表达式中通常返回0或1,表示真假。

例如:20>12返回1,12>20返回0

关系表达式也常用于if或while结构。

if(x == 3)
{
    printf("x is 3.\n");
}

划重点了!!!

相等运算符==与赋值运算符=是两个不一样的运算符,一定不要混淆,有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。

if (x = 3)……

上面示例中,如果按照数学的思路来说,它是x为3,在这个位置似乎没什么问题,但是在C语言中,这里会导致这个程序出现问题,x为3,无论如何都是为真,所以下面都会执行。它执行完之后,我们也很难发现它的问题。

在某些结构体的位置上,需要的是判断,也就是判断真假,是否可以往下执行。

为了防止出现这种明明是错误,却可以继续执行的问题,我们可以将变量写在等号的右边。

if(3 == x)……

这样的话,如果把==误写成=,编译器也会报错,我们也可以及时找到问题修改。

另一个需要避免的错误:多个关系运算符不宜连用。

i < j < k 

同样的,在数学中,或许没什么问题,但是这个表达式是C语言中的关系表达式,先比较前面i<j会返回1或者0,然后1或者0去和k比较,便会导致它同样出现本该是问题,编译器却没有发现的问题。

所以我们应该换成下面的这种写法:

i < j && j < k

例如:我们输入一个年龄,如果年龄在18岁~36岁之间,我们输出青年。

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d",&age);
    if(18 <= age <= 36)
    {
        printf("青年\n");
    }
    return 0;
}

 当我们输入10时,18<=10不成立为假,返回0;然后0<=36成立为真,返回1,也就是打印青年,逻辑上是有问题的,那么这个代码该怎么写呢?

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d",&age);
    if(age >= 18 && age <= 36)
    {
        printf("青年\n");
    }
    return 0;
}

 或许大家不理解&&的意思,不要着急,我下面会为大家介绍逻辑操作符。

  • 逻辑操作符

逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,大家不要看到复杂就头疼,或许在我介绍完之后,没有那么复杂呢?

而逻辑操作符主要有下面三个运算符:

  • 逻辑取反运算符(改变单个表达式的真假)

例如:

#include <stdio.h>
int main()
{
    int flag = 0;
    if(!flag)
    {
        printf("do something\n");
    }
    return 0;
}

如上面的代码,!flag两侧只有一个变量,所以是单目运算符,如果flag为真,则!flag为假,跳过下面的代码;如果flag为假,则!flag为真,执行下面的代码。

  • &&:与运算符,就是并且的意思(两侧的表达式同时都为真,则为真,否则为假)

例如:

#include <stdio.h>
int main()
{
    int month = 0;
    scanf("%d",&month);
    if(month >= 3 && month <= 5)
    {
        printf("春季\n");
    }
    return 0;
}

上面的代码中,&&两边均有操作符,即为双目运算符,而这里要表达的意思是两边都成立,即month既要大于3又要小于5,否则为假,不执行下面的代码。

  • ||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)

例如:

#include <stdio.h>
int main()
{
    int month = 0;
    scanf("%d",&month);
    if(month == 12 || month == 1 || month == 2)
    {
        printf("冬季\n");
    }
    return 0;
}

同样的道理,上面的或运算符||两边均有表达式,所以是双目运算符,而两边只要有一个表达式为真,则整个表达式为真,若是均为假,则整个表达式为假。

  • 短路

C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右侧的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为“短路”。

如前面的代码:

if(month >= 3 && month <= 5)

如果month>=3不成立,则后面的哪怕成立了,整个式子也为假,因为与运算符&&需要两边的表达式均为真,只要有一个为假,则整体为假。所以对于&&运算符来说,只要左边的表达式为假,不成立,则整个表达式也为假。

那么对于或运算符||来说是怎么样呢?

if(month == 12 || month == 1 || month == 2)

如果month==12成立,则后面的哪怕不成立了,整个式子也为真,因为或运算符||需要其中一边的表达式为真,则整体为真,所以对于或运算符||来说,只要左边的表达式为真,成立了,则整个表达式也为真。

  • 条件运算符

最后我们再说一个十分特殊的运算符:条件运算符也叫三目运算符,它是C语言中唯一一个需要使用三个操作数的运算符。形式如下:

exp1?exp2:exp3

条件运算符的计算逻辑是:如果exp1成立,则执行exp2;如果不成立,则执行exp3,最后的计算结果均是整个表达式的值。

例如:使用条件运算符实现找两个数中较大值。

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d",&a,&b);
    int m = a > b?a:b;
    printf("%d\n",m);
    return 0;
}

我们今天的内容就到这里了,如果有什么疑问,可以在评论区留言或者私信噢。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值