当前位置: 首页 > news >正文

学习C语言第三天 :关系操作符、逻辑操作符

1.关系操作符

        C语言用于比较的表达式,称为“关系表达式”里面使用的运算符就称(relationalexpression),为“关系运算符” (relationaloperator) ,主要有下面6个。

  • >   大于运算符

  • <   小于运算符

  • >=  大于等于运算符

  • <=  小于等于运算符

  • ==  等于运算符

  • !=   不相等运算符

        以下是例子:

a > b;a < b;a >= b;a <= b;a == b;a != b;

        关系表达式通常返回 0 或 1,表示真假。

        C语言中,0 表示假,所有非零值表示真。比如,20 > 12 返回 1, 12 > 20 返回 0

        关系表达式常用于 if 或 while 结构。例如下例子:

if (i == 3)
{printf("i is 3.");
}

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

if (i = 3)
{....}

        上面示例中,原意是 i == 3,但是不小心写成 i = 3。这个式子表示对变量 i 赋值 3,它的返回值为 3,所以 if 判断总是为真。
为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。

if (3 == x)
{...}

        如果把 == 误 写成了 = ,编译器会报错的。注意。

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

        例子:

        i < j < k

        上面示例中,连续使用两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果即不是保证变量j的值在 i和 k 之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式。

(i < j ) < k 

        上面式子中,i< j 返回 或 1 ,所以最终是  或 1与变量  进行比较。如果想要判断变量 j的值是否在i和 k 之间,应该使用下面的写法。

i < j && j < k

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

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

        当输入10的时候,也是青年,如图:

        这是因为,我们先拿18和age中存放的10比较,表达式18<=10为假,18<=age 的结果是0,再拿0和36比较,0<=36为真,所以打印了 青年,所以即使当age是10的时候,也能打印 青年,逻辑上是有问题,这个代码应该怎么写呢? 

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

2.逻辑操作符

        逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符

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

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

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

            

 

         注:C语言中,非0表示真,0表示假。

        2.1.逻辑取反运算符

                比如,我们有一个变量叫 flag ,如果flag为假,要做一个什么事情,就可以这样写代码:

if(!flag)
{printf("do study");  
}

                如果 flag 为真,!flag 就是假,如果 flag 为假, !flag 就是真所以上面的代码的意思就是 flag 为假,执行if语句中的代码。

        2.2.与运算符

                && 就是与运算符,也是并且的意思, && 是一个双目操作符,使用的方式是 a&&b,&& 两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。
比如:如果我们说月份是3月到5月,是春天,那使用代码怎么体现呢?

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

        这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足。

        2.3.或运算符

               || 就是或运算符,也就是或者的意思,(||)也是一个双目操作符,使用的方式是 (a || b),两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

比如:我们说一年中月份是12月或者1月或者2月是冬天,那么我们怎么使用代码体现呢?

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

         使用闰年进行练习:

                输入一个年份year,判断year是否是闰年。

                1.能被4整除并且不能被100整除是闰年。

                2.能被400整除是闰年。

#include <stdio.h>int main()
{int year = 0;scanf("%d", &year);if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){printf("%d是闰年!", year);}return 0;
}

        运行结果:

http://www.lryc.cn/news/118293.html

相关文章:

  • Jenkins自动化打包脚本
  • 一百五十、Kettle——Kettle官网下载地址
  • 使用 Visual Studio Code 调试 CMake 脚本
  • 【云原生】Docker 详解(二):Docker 架构及工作原理
  • 微服务 云原生:基于 Gogs + Drone 实现 CI/CD 自动化
  • ADO.NET之SQL Server
  • Nginx负载均衡(重点)
  • 第一章 SpringBoot入门
  • JavaScript Es6_2笔记 (深入对象 + 内置构造函数 + 包装类型)+包含实例方法
  • 尼科彻斯定理
  • 主数据管理案例-中国外运
  • 改进DevSecOps框架的 5 大关键技术
  • uni-app之app上传pdf类型文件
  • bash: sudo: command not found的解决方法 | 安装sudo
  • 电脑合上盖子无线网络不会断开
  • 【从零开始学习JAVA | 第四十篇】了解线程池
  • axios如何取消请求,其原理是什么?
  • 消息中间件 Asio (C++)
  • 3.4 网络安全管理设备
  • 前端高级面试题-JS
  • AcWing 1564:哈希 ← 只具有正增量的二次探测法
  • 什么是媒体代发布?媒体代发布注意事项
  • docker版jxTMS使用指南:使用jxTMS采集数据之二
  • 系列六、Springboot操作RocketMQ
  • 【jupyter异常错误】Kernel started:No module named ipykernel_launcher
  • 使用langchain与你自己的数据对话(五):聊天机器人
  • 爬虫与搜索引擎优化:通过Python爬虫提升网站搜索排名
  • 2024软考系统架构设计师论文写作要点
  • 【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承
  • 数组slice、splice字符串substr、split