NO.13十六届蓝桥杯备战|条件操作符|三目操作符|逻辑操作符|!||||(C++)
条件操作符
条件操作符介绍
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算, exp2 计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算, exp3 计算的结果是整个表达式的结果。
这种三⽬操作符和 if 语句的逻辑⾮常相似,就是根据 exp1 的结果来选择执⾏ exp2 ,或者exp3 。⼀般使⽤在简单的逻辑判断中。
练习:
使⽤条件操作符表⽰下⾯代码的逻辑
#include <iostream> using namespace std;
//改造前:未使⽤条件操作符 int main()
{ int a = 0; int b = 0; cin >> a; if (a > 5) b = 3; else b = -3; cout << b << endl; return 0;
}
//改造后:使⽤了条件操作符
#include <iostream> using namespace std; int main()
{ int a = 0; int b = 0; cin >> a >> b; b = (a > 5 ? 3 : -3); cout << b << endl; return 0;
}
练习
B2049 最大数输出
#include <iostream>
using namespace std;int a, b, c;int main()
{cin >> a >> b >> c;int ret = 0;if (a < b)ret = b > c ? b : c;elseret = a > c ? a : c;cout << ret << endl;return 0;
}
特殊计算
#include <iostream>
using namespace std;long long x, y;int main()
{cin >> x >> y;long long z = 0;if (y % x == 0)z = x + y;elsez = y - x;cout << z << endl;return 0;
}int main()
{cin >> x >> y;long long z = 0;z = (y % x == 0 ? x + y : y - x);cout << z << endl;return 0;
}
要注意数据范围的问题,选择适当的数据类型:
这样的数据范围,其实 int 类型是⽆法满⾜的,只能使⽤ long long 类型。
P5709 【深基2.习6】Apples Prologue / 苹果和虫子
#include <iostream>
using namespace std;int m, t, s;int main()
{int ret = 0; //剩余的苹果数cin >> m >> t >> s;//处理t为0的特殊情况if (0 == t){cout << 0 << endl;return 0; //main函数直接返回}if (s % t == 0)ret = m - s / t;elseret = m - s / t - 1;if (ret < 0)ret = 0;cout << ret << endl;return 0;
}
特殊情况分析
- t可能是0,t会被当做除数,⽽除数不能是0,所以可能会导致运⾏时错误的。如果不增加特殊处理,就会有问题,题⽬最后有提示。
- 根据题⽬给出的数据,算出的吃掉的苹果数可能要⽐真实的苹果还多,这样会计算出负数,这也是不允许的,最多就是吧苹果吃完,⼀个都不剩余。
- 题⽬中有些特殊情况,没有提⽰,有时候需要从数据上做推断。
逻辑操作符
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
| 符号 | 名称 | 功能 |
|---|---|---|
| ! | 逻辑取反运算符 | 改变单个表达式的真假状态。如果表达式为真,则结果为假;如果表达式为假,则结果为真。 |
| && | 逻辑与运算符 | 两侧的表达式都需要为真时,结果才为真。如果任何⼀个表达式为假,结果就为假。 |
| || | 逻辑或运算符 | 两侧的表达式中,只要有⼀个为真,结果就为真。只有当两个表达式都为假时,结果才为假。 |
| C/C++中,⾮0表⽰真,0表⽰假 |
逻辑取反运算符
| a | !a |
|---|---|
| 非0 | 0 |
| 0 | 1 |
| ⽐如,我们有⼀个变量叫 flag ,如果 flag 为假的时候,就做某些事情,可以这样写代码: |
#include <iostream> using namespace std; int main()
{ int flag = 0; if (!flag) { cout << "do something" << endl; } return 0;
}
如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真,所以上⾯的代码的意思就是flag 为假,执⾏if语句中的代码。
逻辑与运算符
| a | b | a&&b |
|---|---|---|
| 非0 | 非0 | 1 |
| 非0 | 0 | 0 |
| 0 | 非0 | 0 |
| 0 | 0 | 0 |
| && 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。 | ||
| ⽐如: | ||
| 如果我们说⽉份是3⽉到5⽉,是春天 |
int month = 0;
cin >> month;
if (month >= 3 && month <= 5)
{ cout << "春季" << endl;
}
这⾥表达的意思就是 month 既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。
逻辑或运算符
| a | b | a||b |
|---|---|---|
| 非0 | 非0 | 1 |
| 非0 | 0 | 1 |
| 0 | 非0 | 1 |
| 0 | 0 | 0 |
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
⽐如:
我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天
int month = 0;
cin >> month;
if (month == 12 || month == 1 || month == 2)
{ cout << "冬季" << endl;
}
短路
逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式就能确定整个表达式的结果,就不再对右边的表达式求值。这种情况称为“短路”。
if ( month >= 3 && month <= 5 )
表达式中 && 的左操作数是 month >= 3 ,右操作数是 month <= 5,当左操作数 month >= 3的结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是 0 (不是春季)。
所以,对于 && 操作符来说,左边操作数的结果是 0 的时候,右边操作数就不再执⾏。
if ( month == 12 || month == 1 || month == 2 )
如果 month == 12 ,则不⽤再判断 month 是否等于 1 或者 2 ,整个表达式的结果也是 1 (是冬季)。
所以, || 操作符的左操作数的结果不为 0 时,就⽆需执⾏右操作数。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
习题
P5711 【深基3.例3】闰年判断
#include <iostream>
using namespace std;int n;int main()
{cin >> n;if (n % 4 == 0 && n % 100 != 0)cout << 1 << endl;else if (n % 400 == 0)cout << 1 << endl;elsecout << 0 << endl;return 0;
}int main()
{cin >> n;if ((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0))cout << 1 << endl;elsecout << 0 << endl;return 0;
}
闰年判断的规则:
- 能被4整除并且不能被100整除是闰年
- 能被400整除是闰年
⼝诀:四年⼀闰,百年不闰,四百年再闰
B2045 晶晶赴约会
#include <iostream>
using namespace std;int n;int main()
{cin >> n;if (n == 1 || n == 3 || n == 5)cout << "NO" << endl;elsecout << "YES" << endl;return 0;
}
⼀定要注意输出信息⼤⼩写的要求,写错了,是不能AC的
B2050 三角形判断
#include <iostream>
using namespace std;int a, b, c;int main()
{cin >> a >> b >> c;if (a + b > c && a + c > b && b + c > a)cout << 1 << endl;elsecout << 0 << endl;return 0;
}
三⻆形的任意两条边的和⼤于第三条边。
B2043 判断能否被 3,5,7 整除
#include <iostream>
using namespace std;int x;int main()
{cin >> x;int flag = 1;if (x % 3 == 0){cout << 3 << ' ';flag = 0;}if (x % 5 == 0){cout << 5 << ' ';flag = 0;}if (x % 7 == 0){cout << 7 << ' ';flag = 0;}if (flag)cout << 'n' << endl;return 0;
}
B2043 判断能否被 3,5,7 整除
#include <iostream>
using namespace std;int x;int main()
{cin >> x;if (x % 3 == 0 && x % 5 == 0 && x % 7 == 0)cout << "3 5 7" << endl;else if (x % 3 == 0 && x % 5 == 0)cout << "3 5" << endl;else if (x % 3 == 0 && x % 7 == 0)cout << "3 7" << endl;else if (x % 5 == 0 && x % 7 == 0)cout << "5 7" << endl;else if (x % 3 == 0)cout << "3" << endl;else if (x % 5 == 0)cout << "5" << endl;else if (x % 7 == 0)cout << "7" << endl;elsecout << "n" << endl;return 0;
}
#include <iostream>
using namespace std;int x;int main()
{cin >> x;if (x % 3 == 0)cout << 3 << " ";if (x % 5 == 0)cout << 5 << " ";if (x % 7 == 0)cout << 7 << " ";if (x % 3 != 0 && x % 5 != 0 && x % 7 != 0)cout << "n" << endl;return 0;
}
P5710 【深基3.例2】数的性质
#include <iostream>
using namespace std;int x;int main()
{cin >> x;if (x % 2 == 0 && (x > 4 && x <= 12))cout << 1 << " ";elsecout << 0 << " ";if (x % 2 == 0 || (x > 4 && x <= 12))cout << 1 << " ";elsecout << 0 << " ";if ((x % 2 == 0) + (x > 4 && x <= 12) == 1)cout << 1 << " ";elsecout << 0 << " ";if ((x % 2 == 0) + (x > 4 && x <= 12) == 0)cout << 1 << " ";elsecout << 0 << " ";return 0;
}
相关文章:
NO.13十六届蓝桥杯备战|条件操作符|三目操作符|逻辑操作符|!||||(C++)
条件操作符 条件操作符介绍 条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下: exp1 ? exp2 : exp3条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算, exp2 计算的结果是整个表达式的结果&am…...
Linux网络编程--Udp套接字+实战 (万字详解,超详细!!)
目录 套接字协议: 协议(protocol): 创建套接字(Create Socket): 绑定服务器地址 开始通信 Udp服务器设计--V1 Udp服务器设计--V2 引入进程池 待更新 套接字协议: 协议(protocol): 如果2个距离很远的人想要进行交流ÿ…...
vscode无法ssh连接远程机器解决方案
远程服务器配置问题 原因:远程服务器的 SSH 服务配置可能禁止了 TCP 端口转发功能,或者 VS Code Server 在远程服务器上崩溃。 解决办法 检查 SSH 服务配置:登录到远程服务器,打开 /etc/ssh/sshd_config 文件,确保以下…...
玩转工厂模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 什么是工厂模式?工厂方法模式适合应用场景实现方式工厂方法模式优缺点什么是工厂模式? 工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。…...
数据库视图的使用场景详细讲解
什么是数据库视图? 数据库视图是基于一个或多个数据库表的查询结果集,可以看作是一个虚拟表。视图本身不存储数据,数据仍然存储在基表中。视图通过查询动态生成数据,用户可以通过视图访问数据,而不必直接操作基表。 …...
开箱即用:一个易用的开源表单工具!
随着互联网的普及,表单应用场景越来越广泛,从网站注册、调查问卷到考试测评,无处不在。传统的表单制作方式需要一定的代码基础,对于不懂编程的小伙伴来说,无疑是一道门槛。 今天,给大家分享一款开源的表单…...
基于微信小程序的博物馆预约系统的设计与实现
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...
Svelte前端框架
Svelte 简介 Svelte 是一个现代的前端框架,用于构建高效、响应式的用户界面。与 React、Vue 和 Angular 等传统框架不同,Svelte 在构建时将组件编译为高效的纯 JavaScript 代码,而不是在浏览器中运行一个庞大的运行时库。这使得 Svelte 应用具…...
力扣-栈与队列-347 前k个高频元素
思路 利用优先队列进行排序,然后利用multiset对count进行排序,最后收集k个高频元素就行 代码 class Solution { public:vector<int> topKFrequent(vector<int>& nums, int k) {priority_queue<int> pq;for(int i 0; i < nu…...
fullcalendar全局日历深度定制(自适应、月、周视图)
首先看效果: 把日程通过蓝色标记点标记出来,可展开收起日历。展开为月视图,收起为月-周视图,且把日程展示在日历下面。 涉及功能点有: 日历头部自定义头部星期格式修改主体样式修改日程自定义展开收起展示不同视图(月…...
TextWebSocketHandler 和 @ServerEndpoint 各自实现 WebSocket 服务器
TextWebSocketHandler 和 ServerEndpoint 都可以用于实现 WebSocket 服务器,但它们属于不同的技术栈,使用方式和功能有一些区别。以下是它们的对比: 1. 技术栈对比 特性TextWebSocketHandler (Spring)ServerEndpoint (Java EE/JSR-356)所属框…...
计算机毕业设计——Springboot的简历系统
📘 博主小档案: 花花,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 花花在深度学习任务中展现出卓越的能力,包括但不限于java、python等技术。近年来,花花更…...
关于浏览器缓存的思考
问题情境 开发中要实现一个非原生pdf预览功能,pdf链接放在一个固定的后台地址,当重新上传pdf后,预览pdf仍然是上一次的pdf内容,没有更新为最新的内容。 查看接口返回状态码为 200 OK(from disk cache), 表示此次pdf返回…...
变量声明 vs 变量定义
变量声明(Declaration) vs 变量定义(Definition) 在 C 中,变量声明和变量定义是两个不同的概念。理解它们的区别对于链接错误的调试、多文件编程、外部变量的使用非常重要。 3. 变量声明 vs 变量定义 区别变量声明&…...
16vue3实战-----动态路由
16vue3实战-----动态路由 1.思路2.实现2.1创建所有的vue组件2.2创建所有的路由对象文件(与上述中的vue文件一一对应)2.3动态加载所有的路由对象文件2.4根据菜单动态映射正确的路由2.5解决main页面刷新的问题2.6解决main的第一个页面匹配显示的问题2.7根据path匹配menu 1.思路 …...
Linux常见命令——系统定时任务
文章目录 crontab 服务管理crontab -e :编辑crontab 定时任务crontab -l 查看crontab 任务crontab -r 删除当前用户所有的crontab 任务 crontab 服务管理 systemctl status crond该系统进程是开机自启动,并且被打开了,可以使用。 crontab -e :编辑cr…...
ARM Cortex-M3/M4 权威指南 笔记【一】技术综述
一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC(精简指令集)处理器,其具有: 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据,Cortex-M 处理器(以及其他任何 A…...
常用的AI算法介绍
常用的AI算法介绍 自然语言生成(NLG):让机器写作,写诗 语言识别:语音模型的识别 虚拟现实:VR、增强现实(AR) 机器学习平台:针对AI优化的硬件和芯片(人脸识…...
Spring常用注解和组件
引言 了解Spring常用注解的使用方式可以帮助我们更快速理解这个框架和其中的深度 注解 Configuration:表示该类是一个配置类,用于定义 Spring Bean。 EnableAutoConfiguration:启用 Spring Boot 的自动配置功能,让 Spring Boo…...
android的ViewModel这个类就是业务逻辑层吗
android的ViewModel这个类就是业务逻辑层吗? 相似:业务逻辑代码应该放在ViewModel这个类吗? 嗯,我现在在学习Android架构组件,特别是ViewModel。用户问ViewModel是否就是业务逻辑层,我需要仔细思考这个问题…...
3、kubectl 命令详解
kubectl 命令详解 kubectl 简介kubectl 常用操作基本信息查看命名空间的增删改查操作查看 pod 信息 项目的生命周期创建发布更新回滚删除金丝雀发布(Canary Release) 声明式管理方法 kubectl 简介 kubernetes 集群管理集群资源的唯一入口是通过相应的方…...
Qt Pro、Pri、Prf
一、概述 1、在Qt中,通常使用.pro(project)、pri(private include)、prf(project file)三种文件扩展名来组织项目。对于模块化编程,Qt提供了Pro和Pri,Pro管理项目,Pri管理模块。 2、pro文件是Qt项目的核心文件,包含了…...
fps动作系统9:动画音频
文章目录 动画音频创建音频蓝图cue音量乘数 音效衰减衰减空间 绑定到动画动画序列轨道 动画音频 创建音频蓝图 cue 音量乘数 音量大小 音效衰减 空间音效 衰减 空间 绑定到动画 动画序列 轨道 横着的方向是有不同的轨道的,阴影的就是。...
1064 - You have an error in your SQL syntax;
在创建数据库表建立外键是遇到了如下报错 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near position(position_id) ) at line 8 数据库表sql如下: --职位表 CR…...
Java在大数据处理中的应用:从MapReduce到Spark
Java在大数据处理中的应用:从MapReduce到Spark 大数据时代的到来让数据的存储、处理和分析变得前所未有的重要。随着数据量的剧增,传统的单机计算方式已经无法满足处理需求。为了解决这个问题,许多分布式计算框架应运而生,其中Ma…...
SwiftUI 中 .overlay 两种写法的区别及拓展
SwiftUI 中 .overlay 两种写法的区别及拓展 一、.overlay 简介功能语法 二、写法 1:.overlay(Circle().stroke(Color.blue, lineWidth: 2))代码示例解释优点适用场景 三、写法 2:.overlay { Circle().stroke(.white, lineWidth: 4) }代码示例解释优点适用…...
深入理解QT的View-Model-Delegate机制和用法
文章目录 Model-View-Delegate机制Model(数据模型)设置模型属性访问元素操作元素数据排序封装好的模型View(视图)显示数据数据选择Delegate(代理)数据选择易用封装类QListWidgetQTreeWidgetQTableWidget元素拖拽代理模型参考示例Model-View-Delegate机制 Qt的View/Model/Deleg…...
C# ASP.NET 介绍
.NET学习资料 .NET学习资料 .NET学习资料 一、概述 ASP.NET是由微软创建的一个开源 Web 框架,用于使用.NET 构建现代化的 Web 应用程序和服务。它为开发者提供了一套丰富的工具、库和编程模型,使得创建功能强大、高效且安全的 Web 应用变得更加容易。…...
深入理解指针初阶:从概念到实践
一、引言 在 C 语言的学习旅程中,指针无疑是一座必须翻越的高峰。它强大而灵活,掌握指针,能让我们更高效地操作内存,编写出更优化的代码。但指针也常常让初学者望而生畏,觉得它复杂难懂。别担心,本文将用通…...
《手札·行业篇》开源Odoo MES系统与SKF Observer Phoenix API在化工行业的双向对接方案
一、项目背景 化工行业生产过程复杂,设备运行条件恶劣,对设备状态监测、生产数据采集和质量控制的要求极高。通过开源Odoo MES系统与SKF Observer Phoenix API的双向对接,可以实现设备状态的实时监测、生产数据的自动化采集以及质量数据的同步…...
