全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(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能力,也就是代码补全…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...