全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
if语句处理多个分支时需要用if-else if结构,分支越多,嵌套的if语句层就越多,程序不但庞大、复杂,理解起来也比较困难。在C++编程中,针对有些问题除了使用if-else if结构之外,还有switch语句也可以实现,并且switch语句更加简洁易懂。
switch语句的格式:
switch语句是适用于实现多分支选择的语句。swith语句在执行时,先计算表达式的值,然后按顺序与case子句中所列出的各个常量进行比较,若表达式的值与常量中的值相等,则由此进入相应的case语句执行程序,并在执行完相应的语句加上break语句,如果不加break程序不会立即跳出switch语句,而是继续依次执行后面的case语句和default中的代码,直到遇到break语句或switch语句结束。具体格式如下:
switch(表达式){case 常量表达式1:语句1;……break;case 常量表达式2:语句2;……break;……case 常量表达式n:语句n;……break;default:语句n+1;……
}
注意:case语句后的各常量表达式的值不能相同,否则会出现相互矛盾的现象造成逻辑混乱;每个语句标号由保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为常量,如常数或字符;每个case和default的出现次序不影响执行结果;该语句中可以使用一次或多次case标号,但只能使用一次default标号,或者省略整个default部分;多个case标号也允许使用在同一个语句序列的前面,break表示语句到此结束,跳出整个switch;default:可选的default块,当表达式的值与所有case都不匹配时,执行default块的代码。
实战训练1—将某一门课程的成绩转换为等级输出
问题描述:
一个学生的成绩如果大于等于90,程序会输出“优秀”,如果成绩大于等于80小于90,程序输出“良好”,如果大于等于70小于80,程序输出“中等”,如果大于等于60小于70,程序输出“及格”,如果小于60,程序输出“不及格”。
输入格式:
一行一个整数score,0<=score<=100
输出格式:
输出成绩对应的等级。
输入输出样例:
| 输入样例1 | 输出样例1 |
| 95 | 优秀 |
| 输入样例2 | 输出样例2 |
| 89 | 良好 |
| 输入样例3 | 输出样例3 |
| 73 | 中等 |
| 输入样例4 | 输出样例4 |
| 60 | 及格 |
| 输入样例5 | 输出样例5 |
| 56 | 不及格 |
问题分析:
在前面的内容中,使用多分支结构if-else if来处理的,根据score的取值,如果使用switch直接来处理,那么case里面的常量会有100、99、98……、0,共101个case,通过分析90到99十位上的数为9,80到89十位上的数为8……,所以根据成绩十位数一样的等级也是一样的(其中100除以10之后为10,所以9和10 都为优秀),这样就可以先对score除以10之后再使用switch去处理,具体程序如下:
#include<bits/stdc++.h>
using namespace std;
int main() {int score;//定义成绩变量score cin>>score;//输入成绩变量score int sw=score/10; //成绩除以10 switch(sw){//90以上(包括90)都是优秀 ,所以变量的值为9和10都输出优秀,因此10和9可以使用同一语句块 case 10:case 9:cout<<"优秀"<<endl;break;case 8://大于等于80 —良好 cout<<"良好"<<endl;break;case 7://大于等于70 —中等 cout<<"中等"<<endl;break;case 6://大于等于60 -及格 cout<<"及格"<<endl;break;//小于60都是不及格,所以共用同一语句块 case 5:case 4:case 3:case 2:case 1:case 0:cout<<"不及格"<<endl; break;default:break; }return 0;
}
对于上述代码可以进行相应的改进(把不及格都放到default中):
#include<bits/stdc++.h>
using namespace std;
int main() {int score;//定义成绩变量score cin>>score;//输入成绩变量score int sw=score/10; //成绩除以10 switch(sw){//90以上(包括90)都是优秀 ,所以变量的值为9和10都输出优秀,因此10和9可以使用同一语句块 case 10:case 9:cout<<"优秀"<<endl;break;case 8://大于等于80 —良好 cout<<"良好"<<endl;break;case 7://大于等于70 —中等 cout<<"中等"<<endl;break;case 6://大于等于60 -及格 cout<<"及格"<<endl;break;default://和前面内容都不匹配,说明小于等于60,所以可以将5到0进行合并写到default中 cout<<"不及格"<<endl; break;}return 0;
}
实战训练2—计算月份天数
问题描述:
输入年份与月份,让计算机输出该月份的天数。题目涉及年、月、天这几个量,分别用year、month、days来表示;前面内容介绍过闰年,对于闰年来讲,2月份是29天,平年是28天;月份1、3、5、7、8、10、12月份是31天,剩余的月份4、6、9、11是30天,最后对于2月份,首先需要判断是否为闰年,闰年为days赋值为29,否则赋值为28。
输入描述:
两个整数 year和month
输出描述:
一个整数(天数)days
输入输出样例:
| 输入样例1 | 输出样例1 |
| 2000 2 | 29 |
| 输入样例2 | 输出样例2 |
| 2006 3 | 31 |
问题分析:
根据题意,首先输入year和month这两个变量,根据month的取值,取月份1、3、5、7、8、10、12时,都为31天,使用相同的赋值语句,同理对于
#include<bits/stdc++.h>
using namespace std;
int main() {int year,month,days;//定义年份、月份和天数变量 cin>>year>>month;//输入年份和月份 switch(month){//月份1 3 5 7 8 10 12,天数为31天,共用同一代码块 case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;//月份4 6 9 11,天数为30天,共用同一代码块case 4:case 6:case 9:case 11:days = 30;break;case 2:if(((year%4==0 )&& (year%100 !=0)) || (year%400==0)) {//判断是否为闰年,该条件 days = 29;}else{days = 28;}}cout<<days<<endl;return 0;
}
相关文章:
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
if语句处理多个分支时需要用if-else if结构,分支越多,嵌套的if语句层就越多,程序不但庞大、复杂,理解起来也比较困难。在C编程中,针对有些问题除了使用if-else if结构之外,还有switch语句也可以实现&#x…...
R机器学习:决策树算法的理解与实操
今天继续给大家介绍决策树算法,决策树本身是一种非常简单直观的机器学习算法,用于做分类或回归任务。它就像我们平常做决定时的过程,通过逐步排除可能的选项,最终得出结论。 A decision tree is a flowchart-like structure used …...
解锁高效学习之道:从认知升级到实践突破
目录 学习之困:探寻低效的根源 (一)迷茫之境:目标缺失的困扰 (二)表象之迷:浅尝辄止的学习 (三)行动之阻:执行力的短板 认知重塑:明晰学习的本…...
2024年12月CCF-GESP编程能力等级认证Python编程三级真题解析
本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德(John J. Hopfield)和杰弗里辛顿(Geof…...
.NET Core 中使用 C# 获取Windows 和 Linux 环境兼容路径合并
在 .NET Core 中使用 C# 处理路径合并并确保在 Windows 和 Linux 环境中都能正常工作,可以使用 System.IO.Path 和 System.IO.Path.Combine 方法。它们是跨平台的,能够根据操作系统自动处理路径分隔符。可以通过 System.Runtime.InteropServices.Runtime…...
【SH】Ubuntu Server 24服务器搭建MySQL数据库研发笔记
文章目录 搭建服务器在线安装1. 更新软件包列表2. 安装MySQL3. 检查MySQL状态4. 修改密码5. 新增用户6. 设置局域网访问 离线安装下载安装包 常用命令参考文档在线安装日志 搭建服务器 作者羊大侠搭建的是 Ubuntu Server 24.04 LTS 服务器环境 搭建参考文档:【SH】…...
编译原理复习---正则表达式+有穷自动机
适用于电子科技大学编译原理期末考试复习。 1. 正则表达式 正则表达式(Regular Expression,简称regex或regexp)是一种用于描述、匹配和操作文本模式的强大工具。它由一系列字符和特殊符号组成,这些字符和符号定义了一种搜索模式…...
知识图谱+RAG学习
GraphRAG(Graph-based Retrieval-Augmented Generation)是微软在2024年推出的一项开源技术,旨在通过结合知识图谱和检索增强生成(RAG)方法,为大型语言模型(LLM)的数据处理提供全新解…...
消息队列技术的发展历史
消息队列技术的演进历程宛如一幅波澜壮阔的科技画卷,历经多个标志性阶段,各阶段紧密贴合不同的技术需求与市场风向,下面为您详细道来。 第一阶段:消息中间件的起源(1970 年代末期 - 1980 年代中期) 在计算…...
每天40分玩转Django:Django部署
Django部署 一、今日学习内容概述 学习模块重要程度主要内容生产环境配置⭐⭐⭐⭐⭐settings配置、环境变量WSGI服务器⭐⭐⭐⭐⭐Gunicorn配置、性能优化Nginx配置⭐⭐⭐⭐反向代理、静态文件安全设置⭐⭐⭐⭐⭐SSL证书、安全选项 二、生产环境配置 2.1 项目结构调整 mypr…...
搭建Elastic search群集
一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件: /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…...
解析 Ingress-Nginx 故障:排查思路与方法
文章目录 一、什么是Ingress-Nginx二、故障排除1.1Ingress-Controller日志和事件检查 Ingress 资源事件检查 Nginx 配置检查使用的服务是否存在调试日志 1.2对 Kubernetes API 服务器的认证服务认证服务账户Kube-Config 1.3使用GDB和Nginx1.4在 Nginx 4.2.5 或其他版本…...
2024 楚慧杯 re wp
go_bytes 附件拖入ida 输入长度为0x28,每两位字符的4bit拼接 与一个常量值经过运算后的值进行异或,并且判断是否相等 脚本 bouquet 附件拖入ida。简单去一下花 构建了一个二叉树,然后递归调用函数 重新排列一下再层序遍历读出即可 zistel 附件…...
【物联网技术与应用】实验10:蜂鸣器实验
实验10 蜂鸣器实验 【实验介绍】 蜂鸣器是音频信号装置。蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。 【实验组件】 ● Arduino Uno主板* 1 ● USB数据线* 1 ● 有源蜂鸣器* 1 ● 无源蜂鸣器* 1 ● 面包板* 1 ● 9V方型电池* 1 ● 跳线若干 【实验原理】 如图所示&#x…...
单片机:实现矩阵键盘控制LCD屏幕(附带源码)
单片机实现矩阵键盘控制LCD屏幕 矩阵键盘(Matrix Keypad)是一种常用的输入设备,广泛应用于嵌入式系统中。在许多嵌入式应用中,我们常常需要通过按键输入来控制系统的功能。结合LCD显示屏,我们可以实现一个简单的界面&…...
鸿蒙Next之包体积极限优化
鸿蒙应用包大小优化全解析 在鸿蒙应用开发中,减小应用包大小对于提升应用下载和安装体验起着关键作用。通过压缩、精简或复用应用中的代码与资源,能有效降低包体积,减少空间占用并加快下载与安装速度。下面详细介绍一下鸿蒙应用包大小优化的…...
Android实战经验篇-log工具
详细代码实现及系列文章请转如下链接 Android实战经验篇-系列文章汇总 Android Display Graphics系列文章-汇总 一、基础知识 1.1 Logging简述 我们写的第一个计算机C程序一般是printf(“Hello world!”);这就是一个log输出。Linux内核有Kernel log以及配套的Log工具&#x…...
DPU编程技术解析与实践应用
一、引言 1.1 研究背景与目的 随着信息技术的飞速发展,数据中心在现代社会中的地位日益凸显,成为支撑各行业数字化转型的关键基础设施。在数据中心内部,数据的处理速度、效率和安全性成为了影响整体性能的核心要素。为了应对不断增长的数据…...
红帽认证的含金量和价值如何?怎么报名红帽认证考试?
红帽企业 Linux(RHEL)是由红帽公司提供的一款商业支持、专为生产环境设计的Linux发行版。随着IT系统和工作负载日益复杂化,底层基础设施及操作系统必须兼具可靠性、可扩展性,并能有效促进性能提升。红帽认证在全球范围享有盛誉&am…...
VS Code Copilot 与 Cursor 对比
选手简介 VS Code Copilot:算是“老牌”编程助手了,虽然Copilot在别的编辑器上也有扩展,不过体验最好的还是VS Code,毕竟都是微软家的所以功能集成更好一些;主要提供的是Complete和Chat能力,也就是代码补全…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...
