问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言关系、条件和逻辑操作符详解

创作时间:
作者:
@小白创作中心

C语言关系、条件和逻辑操作符详解

引用
CSDN
1.
https://blog.csdn.net/2302_80244431/article/details/140569410

C语言中的关系操作符、条件操作符和逻辑操作符是编程的基础,正确理解和使用这些操作符对于编写高效、正确的代码至关重要。本文将详细介绍这些操作符的用法、常见错误以及实际应用,帮助读者掌握C语言中的基本逻辑运算。

关系操作符

C语言中用于比较的表达式称为“关系表达式”(relational expression),其中使用的运算符称为“关系运算符”(relational operator)。主要的关系运算符有6个:

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

关系表达式的一些例子:

  1. a == b
  2. a != b
  3. a < b
  4. a > b
  5. a <= b
  6. a >= b

关系表达式通常返回0或1,表示真假。例如,如果a等于b,表达式会返回1(真);如果a不等于b,表达式会返回0(假)。

“==”与“=”的区别

需要注意的是,相等运算符“==”与赋值运算符“=”是两个不同的运算符,不要混淆。

例如,当键盘输入3时,if表达式中a(3)判断等于3,if表达式为真,打印“hehe”。如果输入5,if表达式中a(5)判断不等于3,if表达式为假,打印“haha”。

为了避免错误,建议将常量写在左边,变量写在等号右边,例如if (3 == a)。这样,如果误将“==”写成“=”,编译器会报错,因为不能将变量赋值给常量。

多个关系运算符不宜连用

另一个需要避免的错误是多个关系运算符的连续使用,例如i < j < k。这种写法虽然合法但通常达不到预期结果,因为关系运算符是从左到右计算的,实际执行的是(i < j) < k

例如,下面的代码中,即使age为10,也会打印“青年”,因为18 <= age为假(返回0),而0 <= 40为真。

多个关系运算符判断值是否在中间的写法

如果要判断一个值是否在两个值之间,应该使用逻辑与运算符&&,例如i < j && j < k

例如,要判断年龄是否在18岁到36岁之间,应该使用:

if (age >= 18 && age <= 36)
{
    printf("青年\n");
}

条件操作符

条件操作符也称为三目操作符,是C语言中唯一的三目操作符,形式为exp1 ? exp2 : exp3。如果exp1为真,则计算exp2;如果exp1为假,则计算exp3

练习1:使用条件操作符改造代码

将以下代码中的if...else...语句使用条件操作符改造:

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d", &a);
    if (a > 5)
        b = 3;
    else
        b = -3;
    printf("%d\n", b);
    return 0;
}

改造后的代码:

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d", &a);
    b = (a > 5 ? 3 : -3);
    printf("%d\n", b);
    return 0;
}

练习2:使用条件表达式实现找两个数中较大值

可以使用条件表达式实现找两个数中较大值的功能:

#include <stdio.h>

int main()
{
    int a, b, max;
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    max = (a > b ? a : b);
    printf("较大的数是:%d\n", max);
    return 0;
}

逻辑操作符

逻辑运算符用于构建更复杂的表达式,主要有三个运算符:

  • !:逻辑取反运算符
  • &&:逻辑与运算符
  • ||:逻辑或运算符

逻辑取反操作符:!

逻辑取反运算符!只有一个操作数,是非0(真)变为0(假),0(假)变为1(真)。

逻辑与运算符:&&

逻辑与运算符&&表示“并且”的关系,只有两侧的表达式都为真时整个表达式才为真。

逻辑或运算符:||

逻辑或运算符||表示“或者”的关系,只要两侧的表达式中有一个为真,整个表达式就为真。

练习:闰年的判断

输入一个年份year,判断是否是闰年。闰年的判断规则:

  1. 能被4整除且不能被100整除的是闰年
  2. 能被400整除的是闰年

可以使用逻辑运算符实现:

#include <stdio.h>

int main()
{
    int year;
    printf("请输入年份:");
    scanf("%d", &year);
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    {
        printf("%d是闰年\n", year);
    }
    else
    {
        printf("%d不是闰年\n", year);
    }
    return 0;
}

短路求值

C语言逻辑运算符具有短路求值的特点,即如果左侧的表达式已经能够确定整个表达式的结果,就不再计算右侧的表达式。

例如:

int a = 0, b = 2, c = 3, d = 4;
int i = a++ && ++b && d++;

在这个例子中,由于a++的结果为0,整个表达式的结果已经确定为0,因此++bd++都不会被执行。只有a在使用后自加了1,即a=1,而bcd的值不变。

&&改为||时:

int a = 0, b = 2, c = 3, d = 4;
int i = a++ || ++b || d++;

由于a++的结果为0,需要继续计算++b++b的结果为3,整个表达式的结果已经确定为1,因此d++不会被执行。只有a在使用后自加了1,即a=1,而bcd的值不变。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号