学习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)是一种网络安全设备,用于监测和检测网络中的入侵行…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...