入门C语言Day15——关系条件逻辑操作符

今天来学习操作符中的一些内容,主要讲的是关系&条件&逻辑操作符

1.关系操作符

首先要来了解一下什么是关系操作符,关系操作符其实就是关系运算符,关系运算符又和关系表达式有关。

C语言中用于比较的表达式,就被称为 “关系表达式”,而其使用的运算符就称被为“关系运算符”,主要有以下六个。

> 大于运算符 

 < 小于运算符

>= 小于等于运算符

<= 大于等于运算符

== 相等运算符

 != 不相等运算符

关系表达式通常返回 0 或 1,表示真假(C语言中,0表示假,所有非零值表示真)。

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

其中要注意的一点是 == 不要和 = 搞混了

如果写做 = ,就是表示对变量赋值,放在if语句中就会一直被判断为真。

为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。。。

比如正常的写为if (x == 3) ,结果他写为if (3 ==x),这么写的好处在于,如果漏了一个=,系统就会报错。

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

比如a > b > c,虽然在平常看起来十分正确,用的时候也不会报错,但就是结果和想的不一样。

因为关系运算符是从左到右计算,所以实际执行的是(a > b)> c

a > b返回的值是 0 或 1(假或真),然后会把返回的 0 或 1 拿去和c比较,所以就错了

所以如果要判断b是小于a、大于c的,需要这么写:a > b && b > c

&&的意思是并且

以上就是关于关系操作符需要掌握的内容,剩下的只要按照字面意思理解就行,没有特别注意的。

2.条件操作符

条件操作符也叫三目操作符(C语言中唯一一个),需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果

其中的?与:都是固定格式

如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。用图表示就是这样的(exp是表达式的意思):

比如我想使用条件表达式实现找两个数中较大值。

就可以用如下代码:

#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;
}

其中int m = a>b ? a : b; 

a > b就是exp1   a是exp2   b是exp3

实际上就是简化if else的一个过程

3.逻辑操作符

逻辑操作符用来提供逻辑判断功能,可以构建更复杂的表达式,主要有&&、||、!(与、或、非)

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

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

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

(结和字面意思来理解,“或”就是两者之一,“与”就是两者都要,“反”实际上就是被人们所熟知的“非”,就是相反的意思,当然也可以理解为UNO中的反向牌(doge))

在C语言中的逻辑运算符及优先级:

一元:!(逻辑非)。

二元:&&(逻辑与)、||(逻辑或)。

以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻辑或 || 优先级最低。即算术、逻辑、赋值运算符的优先级顺序为:(逻辑非) ! >算术 > (逻辑与) &&、(逻辑或) || > (赋值) =

(1)逻辑非 !

用这个表格来演示一下,但要注意逻辑非转变后的情况

原本真对应的是非0,但在!a之后,只有1代表真。

简单来说一下,if语句中只有if后判断为真才会执行后面的内容,所以如果要让实际为假的情况通过if判断,就可以使用逻辑非。

比如这样写:

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

如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真

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

(2)逻辑与 &&

只有两者都为真,a&&b的值才为1!!!

&& 两边的表达式都是真的时候,整个表达式才为真,只要有1个是假,则整个表达式为假。

(3)逻辑或 ||

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

也就是说,只有都是假的时候才输出0

再来说一下一种逻辑运算符的特点——“短路”

它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是默认的。 如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。

而 || 操作符的左操作数的结果不为0时,就不需要执行右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进计算的运算称为短 路求值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cadence学习笔记(十三)--设置边框与异形铺铜

直接导入板框用小眼睛可以看到所有的都是线的属性&#xff1a; 那么如何让它变成板框呢&#xff1f;这里先跳转到下图中的层&#xff1a; 将Z--CPOY这一层变成shape区&#xff1a; 之后用Z--copy: Z--COPY设置如下参数&#xff0c;铺铜内缩20mil: 之后选择长方形铺铜就可以了&…

【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录 前言一、提供者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 二、消费者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 三、服务列表四、服务发现1. 获取服务列表2. 测试2.1 获取所有服务2.2 根据服务名获取服务信息 五、更多配置项总结 前言 本节通过…

在CentOS中配置三个节点之间相互SSH免密登陆

在CentOS中配置三个节点&#xff08;假设分别为node1、node2、node3&#xff09;两两之间相互SSH免密登陆&#xff0c;可以按照以下步骤进行&#xff1a; 一、生成密钥对 在所有节点上生成密钥对&#xff1a; 在每个节点&#xff08;node1、node2、node3&#xff09;上执行以…

LeetCode 每日一题 2024/7/15-2024/7/21

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 7/15 721. 账户合并7/16 2956. 找到两个数组中的公共元素7/17 2959. 关闭分部的可行集合数目7/18 3112. 访问消失节点的最少时间7/19 3096. 得到更多分数的最少关卡数目7/2…

springboot业务逻辑写在controller层吗

Spring Boot中的业务逻辑不应该直接写在Controller层。‌ 在Spring Boot项目中&#xff0c;‌通常将业务逻辑分为几个层次&#xff0c;‌包括Controller层、‌Service层、‌Mapper层和Entity层。‌ 1.其中&#xff0c;‌Controller层主要负责处理HTTP请求&#xff0c;‌通过注…

CSS 两种盒模型 box-sizing content-box 和 border-box

文章目录 Intro谨记box-sizing 两个不同赋值的效果区别&#xff1f;宽高的数值计算标准盒模型 box-sizing: content-box; box-sizing 属性的全局设置 Intro 先问一句&#xff1a;box-sizing 和它的两个属性值是做什么用的&#xff1f;以前我并不知道它的存在&#xff0c;也做…

集成学习在数学建模中的应用

集成学习在数学建模中的应用 一、集成学习概述&#xff08;一&#xff09;基知&#xff08;二&#xff09;相关术语&#xff08;三&#xff09;集成学习为何能提高性能&#xff1f;&#xff08;四&#xff09;集成学习方法 二、Bagging方法&#xff08;一&#xff09;装袋&…

昇思25天学习打卡营第22天 | DCGAN生成漫画头像

昇思25天学习打卡营第22天 | DCGAN生成漫画头像 文章目录 昇思25天学习打卡营第22天 | DCGAN生成漫画头像DCGAN模型数据集数据下载和超参数创建数据集数据集可视化 搭建网络生成器判别器损失函数和优化器 模型训练总结打卡 DCGAN模型 深度卷积对抗生成网络&#xff08;Depp Co…

python打包exe文件-实现记录

1、使用pyinstaller库 安装库&#xff1a; pip install pyinstaller打包命令标注主入库程序&#xff1a; pyinstaller -F.\程序入口文件.py 出现了一个问题就是我在打包运行之后会出现有一些插件没有被打包。 解决问题&#xff1a; 通过添加--hidden-importcomtypes.strea…

AV1技术学习:Reference Frame System

一、Reference Frames AV1 Codec 允许在其解码的帧缓冲区中最多允许保存 8 帧。对于一个编码帧&#xff0c;可以从解码的帧缓冲区中选择任意 7 个帧作为它的参考帧。编码端可以通过比特流显式地传输参考帧索引&#xff0c;范围从 1到 7。原则上&#xff0c;参考帧索引 1-4 为当…

GeoHash原理介绍以及在redis中的应用

GeoHash将二维信息编码成了一个一维信息。降维后有三个好处&#xff1a; 编码后数据长度变短&#xff0c;利于节省存储。利于使用前缀检索当分割的足够细致,能够快速的对双方距离进行快速查询 GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串。 1…

react开发-配置开发时候@指向SRC目录

这里写目录标题 配置开发时候指向SRC目录VScode编辑器给出提示总体1.配置react的 2.配置Vscode的1.配置react的2,配置VSCode的提示支持 配置开发时候指向SRC目录VScode编辑器给出提示 总体1.配置react的 2.配置Vscode的 1.配置react的 1. 我么需要下载一个webpack的插件 这样…

判断推理1

判断推理 1.定义判断 2.类比推理 3.逻辑判断 4.图形推理 加粗文本 加粗文本

发展产业带动,助力安康振兴

“人间烟火&#xff0c;四时飘香&#xff0c;南北风味&#xff0c;各有所长”在中国的传统文化中&#xff0c;美食与历史也有着千丝万缕的联系。安康蒸面这道美食经过千年的传承&#xff0c;不仅在当地享有盛誉&#xff0c;也在美食界占据了一席之地。 队员们先参观了蒸面的制作…

map/multimap容器及STL案例

1.map概念&#xff1a;map中所有元素都是pair pair中的第一个元素为key&#xff08;键值&#xff09;起到索引作用&#xff0c;第二个为value&#xff08;实值&#xff09; 所有元素都会根据key值自动排序 本质&#xff1a;map/multimap属于关联式容器&#xff0c;底层结构是…

Vue3 reactive原理(一)-代理对象及数组

Proxy 只能拦截对一个对象的基本操作&#xff08;例如读取、设置属性值&#xff09;&#xff0c;而无法拦截复合操作&#xff08;例如&#xff0c;obj.fun(),由两个基本操作组成&#xff0c;1&#xff09;get到fun这个属性&#xff0c;2&#xff09;函数调用&#xff09;。 1 …

C语言 | Leetcode C语言题解之第257题二叉树的所有路径

题目&#xff1a; 题解&#xff1a; char** binaryTreePaths(struct TreeNode* root, int* returnSize) {char** paths (char**)malloc(sizeof(char*) * 1001);*returnSize 0;if (root NULL) {return paths;}struct TreeNode** node_queue (struct TreeNode**)malloc(size…

vue3使用html2canvas

安装 yarn add html2canvas 代码 <template><div class"container" ref"container"><div class"left"><img :src"logo" alt"" class"logo"><h2>Contractors pass/承包商通行证&l…

Mamba-yolo|结合Mamba注意力机制的视觉检测

一、本文介绍 PDF地址&#xff1a;https://arxiv.org/pdf/2405.16605v1 代码地址&#xff1a;GitHub - LeapLabTHU/MLLA: Official repository of MLLA Demystify Mamba in Vision: A Linear AttentionPerspective一文中引入Baseline Mamba&#xff0c;指明Mamba在处理各种高…

网络通讯实验报告

拓扑图 需求 1、通过DHCP服务&#xff0c;给PC4和PC5分配IP地址、网关、掩码、DNS服务器IP地址 2、Client-1要求手工配置IP地址&#xff0c;为192.168.1.1, c 3、telnet客户端可以远程登录telnet服务器进行设备管理&#xff0c;并成功修改telnet服务器的名字为123 &#xff0c…