NO.13十六届蓝桥杯备战|条件操作符|三目操作符|逻辑操作符|!||||(C++)

news2025/2/12 8:34:40

条件操作符

条件操作符介绍

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

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;
    else
        ret = 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;
    else
        z = 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;
    else
        ret = m - s / t - 1;
    if (ret < 0)
        ret = 0;
    cout << ret << endl;
    
    return 0;
}

特殊情况分析

  1. t可能是0,t会被当做除数,⽽除数不能是0,所以可能会导致运⾏时错误的。如果不增加特殊处理,就会有问题,题⽬最后有提示。
  2. 根据题⽬给出的数据,算出的吃掉的苹果数可能要⽐真实的苹果还多,这样会计算出负数,这也是不允许的,最多就是吧苹果吃完,⼀个都不剩余。
  3. 题⽬中有些特殊情况,没有提⽰,有时候需要从数据上做推断。

逻辑操作符

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

符号名称功能
逻辑取反运算符改变单个表达式的真假状态。如果表达式为真,则结果为假;如果表达式为假,则结果为真。
&&逻辑与运算符两侧的表达式都需要为真时,结果才为真。如果任何⼀个表达式为假,结果就为假。
||逻辑或运算符两侧的表达式中,只要有⼀个为真,结果就为真。只有当两个表达式都为假时,结果才为假。
C/C++中,⾮0表⽰真,0表⽰假
逻辑取反运算符
a!a
非00
01
⽐如,我们有⼀个变量叫 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语句中的代码。

逻辑与运算符
aba&&b
非0非01
非000
0非00
000
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
⽐如
如果我们说⽉份是3⽉到5⽉,是春天
int month = 0;  
cin >> month;  
if (month >= 3 && month <= 5)  
{  
	cout << "春季" << endl;  
}

这⾥表达的意思就是 month 既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。

逻辑或运算符
aba||b
非0非01
非001
0非01
000

|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 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;
    else
        cout << 0 << endl;
    
    return 0;
}

int main()
{
    cin >> n;
    if ((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0))
        cout << 1 << endl;
    else
        cout << 0 << endl;
    
    return 0;
}

闰年判断的规则:

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年
    ⼝诀:四年⼀闰,百年不闰,四百年再闰
B2045 晶晶赴约会
#include <iostream>
using namespace std;

int n;

int main()
{
    cin >> n;
    if (n == 1 || n == 3 || n == 5)
        cout << "NO" << endl;
    else
        cout << "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;
    else
        cout << 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;
    else
        cout << "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 << " ";
    else
        cout << 0 << " ";
    if (x % 2 == 0 || (x > 4 && x <= 12))
        cout << 1 << " ";
    else
        cout << 0 << " ";
    if ((x % 2 == 0) + (x > 4 && x <= 12) == 1)
        cout << 1 << " ";
    else
        cout << 0 << " ";
    if ((x % 2 == 0) + (x > 4 && x <= 12) == 0)
        cout << 1 << " ";
    else
        cout << 0 << " ";

    return 0;
}

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

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

相关文章

Linux网络编程--Udp套接字+实战 (万字详解,超详细!!)

目录 套接字协议&#xff1a; 协议(protocol)&#xff1a; 创建套接字(Create Socket): 绑定服务器地址 开始通信 Udp服务器设计--V1 Udp服务器设计--V2 引入进程池 待更新 套接字协议&#xff1a; 协议(protocol)&#xff1a; 如果2个距离很远的人想要进行交流&#xff…

玩转工厂模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 什么是工厂模式?工厂方法模式适合应用场景实现方式工厂方法模式优缺点什么是工厂模式? 工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。…

开箱即用:一个易用的开源表单工具!

随着互联网的普及&#xff0c;表单应用场景越来越广泛&#xff0c;从网站注册、调查问卷到考试测评&#xff0c;无处不在。传统的表单制作方式需要一定的代码基础&#xff0c;对于不懂编程的小伙伴来说&#xff0c;无疑是一道门槛。 今天&#xff0c;给大家分享一款开源的表单…

基于微信小程序的博物馆预约系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

fullcalendar全局日历深度定制(自适应、月、周视图)

首先看效果&#xff1a; 把日程通过蓝色标记点标记出来&#xff0c;可展开收起日历。展开为月视图&#xff0c;收起为月-周视图&#xff0c;且把日程展示在日历下面。 涉及功能点有&#xff1a; 日历头部自定义头部星期格式修改主体样式修改日程自定义展开收起展示不同视图(月…

关于浏览器缓存的思考

问题情境 开发中要实现一个非原生pdf预览功能&#xff0c;pdf链接放在一个固定的后台地址&#xff0c;当重新上传pdf后&#xff0c;预览pdf仍然是上一次的pdf内容&#xff0c;没有更新为最新的内容。 查看接口返回状态码为 200 OK(from disk cache)&#xff0c; 表示此次pdf返回…

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该系统进程是开机自启动&#xff0c;并且被打开了&#xff0c;可以使用。 crontab -e :编辑cr…

ARM Cortex-M3/M4 权威指南 笔记【一】技术综述

一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC&#xff08;精简指令集&#xff09;处理器&#xff0c;其具有&#xff1a; 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据&#xff0c;Cortex-M 处理器&#xff08;以及其他任何 A…

常用的AI算法介绍

常用的AI算法介绍 自然语言生成&#xff08;NLG&#xff09;&#xff1a;让机器写作&#xff0c;写诗 语言识别&#xff1a;语音模型的识别 虚拟现实&#xff1a;VR、增强现实&#xff08;AR&#xff09; 机器学习平台&#xff1a;针对AI优化的硬件和芯片&#xff08;人脸识…

android的ViewModel这个类就是业务逻辑层吗

android的ViewModel这个类就是业务逻辑层吗&#xff1f; 相似&#xff1a;业务逻辑代码应该放在ViewModel这个类吗&#xff1f; 嗯&#xff0c;我现在在学习Android架构组件&#xff0c;特别是ViewModel。用户问ViewModel是否就是业务逻辑层&#xff0c;我需要仔细思考这个问题…

Java在大数据处理中的应用:从MapReduce到Spark

Java在大数据处理中的应用&#xff1a;从MapReduce到Spark 大数据时代的到来让数据的存储、处理和分析变得前所未有的重要。随着数据量的剧增&#xff0c;传统的单机计算方式已经无法满足处理需求。为了解决这个问题&#xff0c;许多分布式计算框架应运而生&#xff0c;其中Ma…

深入理解QT的View-Model-Delegate机制和用法

文章目录 Model-View-Delegate机制Model(数据模型)设置模型属性访问元素操作元素数据排序封装好的模型View(视图)显示数据数据选择Delegate(代理)数据选择易用封装类QListWidgetQTreeWidgetQTableWidget元素拖拽代理模型参考示例Model-View-Delegate机制 Qt的View/Model/Deleg…

深入理解指针初阶:从概念到实践

一、引言 在 C 语言的学习旅程中&#xff0c;指针无疑是一座必须翻越的高峰。它强大而灵活&#xff0c;掌握指针&#xff0c;能让我们更高效地操作内存&#xff0c;编写出更优化的代码。但指针也常常让初学者望而生畏&#xff0c;觉得它复杂难懂。别担心&#xff0c;本文将用通…

重庆西站公路桥梁自动化监测

1.项目概述 重庆西站属于渝黔铁路的配套工程&#xff0c;是承担兰渝、川黔、渝昆等多条铁路的特级客运站&#xff0c;未来重庆铁路三大客运站之一。作为我国西部地区规模最大的火车站、重庆西站于2014年在沙坪坝区上桥开工建设,该站东临内环高速&#xff0c;西靠中梁山&#x…

头条百度批量采集软件说明文档

旧版说明文档《头条号文章批量采集软件4.0版本说明文档&#xff01;头条/微头条文章批量采集》 头条的采集软件已经更新了好多个版本了&#xff0c;一直没有做详细的介绍文档&#xff0c;最近更新了一些功能进去&#xff0c;一块来写一下说明文档。 1、主界面 2、头条作者采集…

【面试】面试常见的智力题

引言 在技术面试中&#xff0c;除了考察编程能力和算法知识外&#xff0c;智力题也是常见的考察方式。智力题不仅能够测试候选人的逻辑思维能力&#xff0c;还能反映其解决问题的创造力和应变能力。本文将整理一些常见的面试智力题&#xff0c;并详细分析解题思路&#xff0c;…

【动态规划】风扫枯杨,满地堆黄叶 - 9. 完全背包问题

本篇博客给大家带来的是完全背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺…

BGP基础协议详解

BGP基础协议详解 一、BGP在企业中的应用二、BGP概述2.1 BGP的特点2.2 基本配置演示2.3 抓包观察2.4 BGP的特征三、BGP对等体关系四、bgp报文4.1 BGP五种报文类型(重点)4.2 BGP报文格式-报文头格式4.3 Open报文格式4.4 Update报文格式4.5 Notification报文格式4.6 Route-refre…

LeetCode刷题---数组---840

矩阵中的幻方 https://leetcode.cn/problems/magic-squares-in-grid/submissions/598584907/ 题目&#xff1a; 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成…