学习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;
}
运行结果:

相关文章:
学习C语言第三天 :关系操作符、逻辑操作符
1.关系操作符 C语言用于比较的表达式,称为“关系表达式”里面使用的运算符就称(relationalexpression),为“关系运算符” (relationaloperator) ,主要有下面6个。 > 大于运算符 < 小于运算符 > 大于等于运算符 < 小于等…...
Jenkins自动化打包脚本
一、背景 jenkins可以设置定时任务打包,也已手动点按钮打包,还可以通过执行http请求打包,今天我们就通过shell脚本,通过curl命令进行jenkins打包。 二、步骤 2.1 在jenkins上构建项目 设置触发器 2.2 通过shell脚本触发远程构…...
一百五十、Kettle——Kettle官网下载地址
一、官网地址 Home - Hitachi VantaraThe site home pagehttps://community.hitachivantara.com/docs/DOC-1009855 二、下载地址 Pentaho from Hitachi Vantara download | SourceForge.netDownload Pentaho from Hitachi Vantara for free. End to end data integration and…...
使用 Visual Studio Code 调试 CMake 脚本
之前被引入到 Visual Studio 中的 CMake 调试器,现已在 Visual Studio Code 中可用。 也就是说,现在你可以通过在 VS Code 中安装 CMake 工具扩展,来调试你的 CMakeLists.txt 脚本了。是不是很棒? 背景知识 Visual C 开发团队和 CMake 的维…...
【云原生】Docker 详解(二):Docker 架构及工作原理
Docker 详解(二):Docker 架构及工作原理 Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互。…...
微服务 云原生:基于 Gogs + Drone 实现 CI/CD 自动化
一般构建部署 以一个简单的前后端项目来说,分别编写前后端的 Dockerfile 文件并构建镜像,然后编写 docker-compose.yml 构建部署,启动运行。每次代码变更后都需重新手动打包、构建、推送。 一个简单的例子: 前端: 项…...
ADO.NET之SQL Server
ADO.NET是.NET平台上的一组用于访问和操作关系型数据库的API。它提供了一种以统一的方式连接到各种数据库系统并执行数据库操作的方法。现在有很多的ORM框架都是基于ADO.NET进行数据访问(比如:Entity Framework (EF)、Dapper、NHibernate 、FluentNHiber…...
Nginx负载均衡(重点)
正向代理 部署正向代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://20.0.0.60:80…...
第一章 SpringBoot入门
1.SpringBoot简介 1.1.简介 Spring Boot来简化spring应用开发,约定大于配置去繁从简,just run就能创建一个独立的,产品级别的应用。 背景:J2EE笨重开发,繁多的配置、低下开发效率、复杂的部署流程、第三方技…...
JavaScript Es6_2笔记 (深入对象 + 内置构造函数 + 包装类型)+包含实例方法
JavaScript 进阶 文章目录 JavaScript 进阶深入对象构造函数实例成员静态成员 内置构造函数ObjectArray包装类型StringNumber 了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,掌握常见的对象属性和方法的使用。 了解…...
尼科彻斯定理
目录 1.题目概述 2.题解 思路分析 具体实现 1.题目概述 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^31 2^335 3^37911 4^313151719 输入一个正整数m(m≤100),将…...
主数据管理案例-中国外运
1、 背景介绍及难点分析 作为世界领先的物流行业整合商、端到端的全程供应链解决方案和一站式物流服务提供商,中国外运非常重视信息化建设,先后投资建设了 300多个信息系统,为中国外运的内部管理和业务运作提供 IT 支持和保障。 由于缺乏统一…...
改进DevSecOps框架的 5 大关键技术
Markets and Markets的一项研究显示,全球DevOps的市场规模从2017年的29亿美元增加到2023年的103.1亿美元,预测期的年复合增长率(CAGR)为24.7%。人们对DevOps越来越感兴趣,因为DevOps不仅能够压缩软件的交付周期,还能提高交付的速度…...
uni-app之app上传pdf类型文件
通过阅读官方文档发现,uni.chooseFile在app端不支持非媒体文件上传; 可以使用这个插件,验证过可以上传pdf;具体使用可以去看文档 插件地址 就是还是会出现相机,这个可能需要自己解决下 实现功能:上传只能上…...
bash: sudo: command not found的解决方法 | 安装sudo
-bash: sudo: command not found的解决方法 https://www.cnblogs.com/pengpengboshi/p/16159443.html 报错 安装apt-get update报错由于没有公钥,无法验证下列签名: NO_PUBKEY A4B469963BF863CC解决办法是手动加入 (sudo可去掉)…...
电脑合上盖子无线网络不会断开
控制面板\硬件和声音\电源选项\系统设置 最终选择不会采取任何操作 选择不会采取任何操作...
【从零开始学习JAVA | 第四十篇】了解线程池
目录 前言: 线程池: 线程池的工作流程: 代码实现线程池: 任务拒绝策略: 线程池多大才算合适? 总结: 前言: 在Java编程中,线程池是一个强大的工具,它能…...
axios如何取消请求,其原理是什么?
axios 可以通过创建一个 CancelToken 来取消一个请求,基本原理是: 创建一个 CancelToken 的实例,它有一个 executor 函数,可以通过调用 executor 参数中的 cancel 函数来取消请求。在 axios 请求配置中指定 cancelToken 属性,将 CancelToken 实例传递进去。当我们需要取消请求…...
消息中间件 Asio (C++)
折腾了一上午,看到这个结果的时候泪目了兄弟闷,讲真。我的asio客户端成功收到服务端发来的消息了。虽然这确实是极其智障又简单的入门哈哈 下载独立版本 asio网络通信库新建cmake工程,CMakeLists.txt加载asioasio最简单的服务端和客户端代码…...
3.4 网络安全管理设备
数据参考:CISP官方 目录 IDS (入侵检测系统)网络安全审计漏洞扫描系统VPN(虚拟专网)堡垒主机安全管理平台 一、IDS (入侵检测系统) 入侵检测系统(IDS)是一种网络安全设备,用于监测和检测网络中的入侵行…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...

