【NOI】C++程序结构入门之分支结构二

2024-05-06 12:04

本文主要是介绍【NOI】C++程序结构入门之分支结构二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、逻辑运算符
    • 1.导入
    • 2.逻辑与(&&)
    • 3.逻辑或(||)
    • 4.逻辑非(!)
  • 二、例题讲解
    • 问题:1656. 是两位的偶数吗
    • 问题:1658. 游乐设施
    • 问题:1659. 是否含有数字5
    • 问题:1660. 今天要上课吗
    • 问题:1661. 宇航员选拔
  • 三、总结
  • 四、感谢


前言

本章节在之前学习的单分支与双分支结构基础上,深入探讨了多条件判断在程序设计中的应用。

通过引入逻辑运算符——逻辑与(&&)、逻辑或(||)以及逻辑非(!),我们学会了如何将多个条件组合,以解决实际问题中更为复杂的逻辑判断需求。

借助具体场景实例,如学生选拔和数值特性判断,理解了逻辑运算符的运作机制及其在分支结构中的重要性。

学习路线:C++从入门到NOI学习路线

学习大纲:C++全国青少年信息学奥林匹克竞赛(NOI)入门级-大纲


一、逻辑运算符

1.导入

在上一节中,我们学习了一种新的数据类型——bool。

布尔类型(bool)在编程中扮演着逻辑判断的基石角色。它仅具有两种状态:“真”(True)和“假”(False),对应生活中的二选一情境,如“对错”、“有无”、“开闭”、“是否”。

在这里插入图片描述

利用bool变量,我们可以简洁明了地表示复杂问题中的关键逻辑状态。

在学习新知识后我们常常拿之与以前学习的内容进行对比。

例如我们前面学习的整型浮点型的变量可以通过算术运算符进行比较、计算。

在这里插入图片描述

bool类型是否也存在同样的能力呢?

哎,先不着急回答。

在这里插入图片描述

我们来设想一个场景。

假设你们学校打算建立一支编程校队,并邀请学生报名参加选拔。报名人数非常多,学校不得不增加要求筛选出更加优秀的学生。

学校的要求如下:

  1. 编程基础:学生已经有一定的编程基础,或者能通过学校组织的思维逻辑测试。
  2. 学习成绩:学生的学科成绩至少达到全校前50%。
  3. 时间安排:确保每周能投入至少10小时用于编程练习和团队活动。

以上要求,学生至少满足两个,才会被选入校队。这个时候应该怎么判断一个学生是否能够加入到校队呢?

同时满足1,2;或者同时满足1,3;或者同时满足2,3。

可以看到这个时候单独的某个条件不能决定结果,我们需要将多个条件组合在一起判断。

还记得,刚才的问题吗?我想答案大家已经知道了。

答案是肯定,而bool类型的运算需要用到逻辑运算符。

2.逻辑与(&&)

逻辑与(&&): 当两边的操作数都为true时,结果才为true;否则为false。

bool a = true;
bool b = false;
bool result = a && b; // result为false,因为b为false

此运算符具有短路特性,即如果左边的操作数为false,右边的操作数不会被评估。

3.逻辑或(||)

逻辑或(||): 如果两边的操作数中至少有一个为true,结果为true;只有当两边都为false时,结果才为false。

bool a = true;
bool b = false;
bool result = a || b; // result为true,因为a为true

同样具有短路特性,如果从左到右评估操作数时,一旦遇到一个true值,运算就会立即停止,不再继续评估后续的操作数。。

4.逻辑非(!)

逻辑非(!): 这是一个一元运算符,用来反转操作数的布尔值。如果操作数为true,结果为false;如果操作数为false,结果为true。

bool a = true;
bool result = !a; // result为false,因为a为true

二、例题讲解

问题:1656. 是两位的偶数吗

类型:分支结构


题目描述:

输入一个整数 n ,请帮忙判断一下这个整数 n 是否是两位的偶数,如果是输出 Yes ,如果不是,请输出 No 。(请注意大小写)。
比如:28 就是一个两位偶数,而 128 就不是两位偶数。

输入:

一个整数 n 。

输出:

如果n是两位偶数输出 Yes ,否则输出 No 。

样例:

输入:

28

输出:

Yes

在这里插入图片描述


1.分析问题

  1. 已知:一个整数 n 。
  2. 未知:n是否是两位的偶数。
  3. 关系:10<=n<100&&n%2==0

2.定义变量

  • 定义一个整型变量 n 来存储待判断的整数。
	//二、数据定义 int n;

3.输入数据

  • 使用 cin 从标准输入(通常是键盘)读取一个整数到变量 n 中。
	//三、数据输入cin>>n; 

4.数据计算

  1. 使用 if 语句进行条件判断,条件是:
  • n 大于等于10(确保是两位数)
  • n 小于100(确保是两位数)
  • n 对2取余等于0(确保是偶数)
  1. 如果上述条件都满足,输出 “Yes”;否则,输出 “No”。
	//四、数据计算 if(n>=10&&n<100&&n%2==0){//五、输出结果 cout<<"Yes";}else{//五、输出结果 cout<<"No";}

完整代码如下:

#include <bits/stdc++.h> // 包含常用头文件,提供标准输入输出等功能
using namespace std; // 使用std命名空间,简化代码中的标准库调用int main() {// 一、问题分析// 给定:一个整数n。// 目标:判断该整数是否满足两个条件://       1. 是两位数(即10到99之间的整数)//       2. 是偶数(能被2整除)// 二、数据定义int n; // 定义一个整数变量n来存储待判断的数// 三、数据输入cin >> n; // 从标准输入读取一个整数到变量n中// 四、逻辑判断与计算// 使用if语句检查n是否满足两位数且为偶数的条件if (n >= 10 && n < 100 && n % 2 == 0) { // 判断n是否在10到99之间且能被2整除cout << "Yes"; // 如果满足条件,输出"Yes"} else {cout << "No"; // 如果不满足条件,输出"No"}// 五、程序结束return 0; // 程序执行完毕,返回0表示成功结束
}

问题:1658. 游乐设施

类型:分支结构


题目描述:

游乐场引进了一个新的游乐设施,可以两人一组开动该设施,但设施设计上有一个缺陷,必须一个人的体重在 60 公斤以上(包含 60 公斤),另一个人体重在 60 公斤以下,才能启动该设施。
请你编程从键盘读入两个游客的体重,判断一下设施能否启动,如果能启动输出 green,不能启动输出 red 。
比如输入:65.2 28.5,就可以启动设施,输出 green 。
再比如输入:28.5 56.7,就不能启动设施,输出 red 。

输入:

两个小数,代表两位游客的体重。

输出:

如果能启动输出 green ,不能启动输出 red 。

样例:

输入:

65.2 28.5

输出:

green

在这里插入图片描述


1.分析问题

  1. 已知:两个游客的体重。
  2. 未知:判断一下设施能否启动,如果能启动输出 green,不能启动输出 red 。
  3. 关系:必须一个人的体重在 60 公斤以上(包含 60 公斤),另一个人体重在 60 公斤以下,才能启动该设施。

2.定义变量

  • double a, b;定义了两个变量a和b,用来存储两个游客的体重。
	//二、数据定义 double a,b; 

3.输入数据

  • 从标准输入(通常是键盘)读取两个游客的体重。
	//三、数据输入 cin>>a>>b;

4.数据计算

  1. if (a < b) { swap(a, b); }这行代码确保a始终代表较重的游客体重,b代表较轻的游客体重,简化后续的条件判断。
  2. 接下来的if语句检查体重条件是否满足设施启动的要求:a(较重者)是否大于等于60公斤且b(较轻者)是否小于60公斤。
	//四、数据计算 if(a<b){swap(a,b);}if(a>=60&&b<60){//五、输出结果cout<<"green";}else{//五、输出结果cout<<"red";}

完整代码如下:

#include <bits/stdc++.h> // 包含标准库中的所有常用头文件
using namespace std;    // 使用std命名空间,可以直接调用其中的函数、对象等,无需加std::前缀int main() {// 一、问题分析// 已知:需要判断两个游客的体重条件。// 目标:确定游乐设施是否能够启动。// 规则:设施启动条件为,两位游客中一人体重≥60kg且另一人<60kg。// 二、数据定义double a, b; // 定义两个双精度浮点数变量a和b,分别存储两位游客的体重// 三、数据输入cin >> a >> b; // 从标准输入读取两个体重值到a和b中// 四、数据处理// 交换a和b的值(如有必要),确保a为两人中的较重者,简化后续判断逻辑if (a < b) {swap(a, b); // 使用swap函数交换a和b的值}// 五、逻辑判断// 检查体重条件是否满足设施启动要求if (a >= 60 && b < 60) { // 若较重者≥60kg且较轻者<60kg// 六、输出结果cout << "green"; // 输出"green",表示设施可以启动} else {// 六、输出结果cout << "red"; // 输出"red",表示设施不能启动}// 七、程序结束return 0; // 主函数返回0,表示程序正常退出
}

问题:1659. 是否含有数字5

类型:分支结构


题目描述:

请从键盘读入一个五位整数 n,判断其是否含有数字 5,如果含有数字 5 ,请输出这个 5 位数各个位的和;如果不含数字 5 ,请直接输出这个 5 位数。
比如:输入:12345,就是含有数字5 ,因此输出 15(1+2+3+4+5=15)。
再比如:输入:12188 ,就不含数字 5,那么直接输出12188 。

输入:

一个五位正整数 n 。

输出:

输出一个整数,代表按要求计算的结果。

样例:

输入:

12345

输出:

15

在这里插入图片描述


1.分析问题

  1. 已知:一个五位正整数 n 。
  2. 未知:输出一个整数,代表按要求计算的结果。
  3. 关系:如果含有数字 5 ,请输出这个 5 位数各个位的和;如果不含数字 5 ,请直接输出这个 5 位数。

2.定义变量

  • 定义了六个整数变量,其中n用于存储输入的五位数,而g, s, b, q, w分别对应该数的个位、十位、百位、千位和万位。
	//二、数据定义 int n,g,s,b,q,w;

3.输入数据

  • 从标准输入(如键盘)读取一个五位正整数并存储在变量n中。
	//三、数据输入cin>>n; 

4.数据计算

  • 通过除法和取余运算,分离出n的每一位数字并分别存储。
  • 检查五位数的每一位是否包含数字5。如果有任何一位是5,则将n更新为其各位数字之和。
	//四、数据计算 g=n%10;s=n/10%10;b=n/100%10;q=n/1000%10;w=n/10000;if(g==5||s==5||b==5||q==5||w==5){n=g+s+b+q+w;}

5.输出结果

  • 这里输出的n可能是原始的五位数(如果没有5),也可能是它的各位数字之和(如果包含至少一个5)。
	//五、输出结果 cout<<n;return 0;	

完整代码如下:

#include <bits/stdc++.h> // 包含大量常用的头文件,适用于快速编程但可能增加编译时间
using namespace std; // 使用标准命名空间std,简化对标准库函数和对象的访问int main() {// 一、问题分析// 已知:输入是一个五位正整数 n。// 目标:根据 n 中是否包含数字 5,输出不同的结果。// 规则://   - 如果 n 包含数字 5,则输出 n 各位数字之和。//   - 如果 n 不包含数字 5,则直接输出 n。// 二、数据定义int n, g, s, b, q, w; // 分别代表五位数的各位(个位g, 十位s, 百位b, 千位q, 万位w)// 三、数据输入cin >> n; // 从标准输入读取一个五位正整数到变量n中// 四、数据处理// 提取各位数字g = n % 10;      // 个位s = n / 10 % 10; // 十位b = n / 100 % 10; // 百位q = n / 1000 % 10; // 千位w = n / 10000;     // 万位// 检查是否包含数字5if (g == 5 || s == 5 || b == 5 || q == 5 || w == 5) {// 如果n中包含数字5,则计算并更新n为各位数字之和n = g + s + b + q + w;}// 注意:如果n不含5,此处逻辑默认直接使用原n值,无需额外处理// 五、输出结果cout << n; // 输出处理后的n值,根据规则可能是原数或各位数字之和return 0; // 表示程序成功执行完毕
}

问题:1660. 今天要上课吗

类型:分支结构


题目描述:

暑假来了,晶晶报了自己心仪已久的游泳课,非常开心,老师告诉晶晶每周周一、周三、周五、周六四天都要上课的,晶晶担心自己会忘记,请你编写一个程序,从键盘读入今天星期几,输出是否要上课,如果要上课,请输出 youke ,如果不要上课,请输出 meike 。

输入:

从键盘读入一个整数 n(n 是 1∼7 之间的整数),代表今天是星期几。

输出:

根据要求输出 youke 或者 meike 。

样例:

输入:

1

输出:

youke

在这里插入图片描述


1.分析问题

  1. 已知:一个整数 n(n 是 1~7 之间的整数),代表今天是星期几。
  2. 未知:是否要上课。
  3. 关系:每周周一、周三、周五、周六四天都要上课的。

2.定义变量

  • 定义一个整型变量n来存储输入的表示星期几的数字。
	//二、数据定义 int n; 

3.输入数据

  • 从标准输入接收一个整数,用户应输入1到7之间的值,代表星期一到星期日。
	//三、数据输入 cin>>n;

4.数据计算

  • 如果n是1(周一)、3(周三)、5(周五)、或6(周六),则输出"youke",表示那天有课;否则,输出"meike",表示没有课。
	//四、数据计算 if(n==1||n==3||n==5||n==6){//五、输出结果 cout<<"youke";}else{//五、输出结果 cout<<"meike";}

完整代码如下:

#include <bits/stdc++.h> // 包含C++标准库中的常用功能,方便快捷但可能增加编译时间
using namespace std;    // 使用std命名空间,可以直接调用std中的函数和对象,无需前缀int main() {// 一、问题阐述// 给定:一个整数n,范围是1到7,分别代表星期一到星期日。// 目标:判断该天是否需要上课。// 规则:星期一(1)、星期三(3)、星期五(5)、星期六(6)需要上课。// 二、数据定义int n; // 定义一个整型变量n,存储输入的表示星期的数字// 三、数据输入cin >> n; // 从控制台读取用户输入的星期数,用户应输入1至7之间的整数// 四、逻辑判断// 使用if语句检查n的值,以判断当天是否为上课日if (n == 1 || n == 3 || n == 5 || n == 6) { // 如果n为1、3、5、或6,则表示当天有课// 五、输出结果cout << "youke"; // 输出"youke",表示需要上课} else {// 五、输出结果cout << "meike"; // 输出"meike",表示无需上课}// 六、程序结束return 0; // 主函数返回0,表示程序执行成功结束
}

问题:1661. 宇航员选拔

类型:分支结构


题目描述:

宇航局来到某部队,想从该部队挑选身体好的战士进行航空航天的培训和考核,挑选未来的宇航员。宇航局在身体素质方面定了 33 个基本的标准:身高在 165 厘米∼185 厘米之间,体重在 50 公斤∼80公斤之间,年龄在16∼19周岁(所有数据都包含边界值,也就是身高包含165 厘米和 185 厘米,体重和年龄以此类推)。
现从键盘读入一位战士的年龄、身高、体重数据(都是整数),请问该战士是否符合宇航局定的基本标准,如果符合,请输出 Y ,如果不符合,请输出 N 。

输入:

读入三个整数,分别代表一位战士的年龄、体重、身高数据。

输出:

根据判断结果输出 Y 或者 N 。

样例:

输入:

16 60 185

输出:

Y

在这里插入图片描述


1.分析问题

  1. 已知:一位战士的年龄、身高、体重数据(都是整数)。

  2. 未知:该战士是否符合宇航局定的基本标准。 如果符合,请输出 Y ,如果不符合,请输出 N 。

  3. 关系:身高在 165 厘米~185 厘米之间,体重在 50 公斤~80公斤之间,年龄在16~19周岁(所有数据都包含边界值,也就是身高包含165 厘米和 185 厘米,体重和年龄以此类推)。

2.定义变量

  • 定义了三个整型变量:h(身高,厘米)、w(体重,公斤)、a(年龄,岁)。
	//二、数据定义 int a,w,h; 

3.输入数据

  • 通过cin从标准输入读取三个整数分别赋值给变量a、w、h,即战士的年龄、体重、身高。
	//三、数据输入 cin>>a>>w>>h;

4.数据计算

  • 使用if语句进行逻辑判断,检查战士的身高是否在165厘米到185厘米之间、体重是否在50公斤到80公斤之间、年龄是否在16岁到19岁之间。
  • 如果所有条件满足(即战士符合宇航局的标准),则输出字符Y;否则,输出N。
	//四、数据计算 if(h>=165&&h<=185&&w>=50&&w<=80&&a>=16&&a<=19){//五、输出结果 cout<<"Y";}else{//五、输出结果 cout<<"N";}

完整代码如下:

#include <bits/stdc++.h> // 包含了C++标准库的大部分头文件,适合快速编程但可能导致编译时间较长
using namespace std;    // 声明使用std命名空间,简化代码中标准库的使用int main() {// 一、问题分析// 已知:战士的年龄(a)、身高(h, 单位:厘米)、体重(w, 单位:公斤)皆为整数。// 目标:判断这些数据是否符合宇航局的基本标准。// 标准:身高165cm~185cm,体重50kg~80kg,年龄16岁~19岁(包含边界值)。// 二、数据定义int h, w, a; // 分别定义整型变量h(身高, cm), w(体重, kg), a(年龄, 岁)// 三、数据输入cin >> a >> w >> h; // 从控制台依次输入年龄、体重、身高的值// 四、逻辑判断// 判断输入的年龄、身高、体重是否全部满足宇航局的标准if (h >= 165 && h <= 185 && w >= 50 && w <= 80 && a >= 16 && a <= 19) {// 五、输出结果cout << "Y"; // 如果满足所有条件,输出 "Y" 表示合格} else {// 五、输出结果cout << "N"; // 如果有任何一项不满足条件,输出 "N" 表示不合格}return 0; // 程序结束,返回0表示程序执行成功
}

三、总结

通过本节内容的学习,我们掌握了逻辑运算符的使用方法及其在处理复合条件分支结构中的应用,能够编写出解决多条件筛选问题的C++程序。实例练习如判断两位偶数、分析上课日、宇航员选拔等,不仅巩固了分支结构的编程技巧,还提升了逻辑思维能力。这为应对NOI及其他编程竞赛中涉及的复杂条件判断问题打下了坚实的基础。

四、感谢

如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。

每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!

在这里插入图片描述

这篇关于【NOI】C++程序结构入门之分支结构二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964297

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)