全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)

news2024/12/24 16:47:25

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;
}

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

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

相关文章

【文档搜索引擎】缓冲区优化和索引模块小结

开机之后&#xff0c;首次制作索引会非常慢&#xff0c;但后面就会快了 重启机器&#xff0c;第一次制作又会非常慢 这是为什么呢&#xff1f; 在 parserContent 里面&#xff0c;我们进行了一个读文件的操作 计算机读取文件&#xff0c;是一个开销比较大的操作&#xff0c; …

html+css网页设计 旅游 移动端 雪花旅行社4个页面

htmlcss网页设计 旅游 移动端 雪花旅行社4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 …

3 JDK 常见的包和BIO,NIO,AIO

JDK常见的包 java.lang:系统基础类 java.io:文件操作相关类&#xff0c;比如文件操作 java.nio:为了完善io包中的功能&#xff0c;提高io性能而写的一个新包 java.net:网络相关的包 java.util:java辅助类&#xff0c;特别是集合类 java.sql:数据库操作类 IO流 按照流的流向分…

从零创建一个 Django 项目

1. 准备环境 在开始之前&#xff0c;确保你的开发环境满足以下要求&#xff1a; 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL&#xff0c;确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境&#xff…

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能&#xff0c;而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢&#xff0c;在查看文档时影响尚可接受&#xff0c;但在快速浏览网页时&#xff0c;滚轮速度过慢会给用户带来…

GitLab的安装与卸载

目录 GitLab安装 GitLab使用 使用前可选操作 修改web端口 修改Prometheus端口 使用方法 GitLab的卸载 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab安装 Gitlab的rpm包集成了它需要的软件&#xff0c;简化了安装步骤&#xff0c;所以直接…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点&#xff1a;不同点&#xff1a;目的&#xff1a;结构&#xff1a; C 代码示例简单工厂模式示例&#xff08;以创建图形对象为例&#xff09;策略模式示例&#xff08;以计算价格折扣策略为例&#xff09;UML区别 简单工厂模式和策…

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注

脑肿瘤检测数据集&#xff0c;对9900张原始图片进行YOLO&#xff0c;COCO&#xff0c;VOC格式的标注 数据集分割 训练组 70&#xff05; 6930图片 有效集 20&#xff05; 1980图片 测试集 10&#xff05; 990图片 预处理 静态裁剪&#xff1a; 24-82&…

YOLOv8 | 训练自定义数据集

目录 1 处理数据集1.1 数据集格式介绍1.2 划分数据集1.3 在 YOLOv8 中配置数据集 2 训练 YOLOv8 模型2.1 模型训练代码2.2 开启 TensorBoard 若尚未部署 YOLOv8&#xff0c;则可参考这篇博客&#xff1a; YOLOv8 | Windows 系统下从零开始搭建 YOLOv8 项目环境 1 处理…

Java设计模式 —— 【结构型模式】外观模式详解

文章目录 概述结构案例实现优缺点 概述 外观模式又名门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口&#xff0c;外部应用程序不用关心内部子系统的具体的细节&#xff0c;这…

可编辑99PPT | 智能工厂整体规划方案及实施细部方案

荐言分享&#xff1a;智能工厂是利用物联网、大数据、人工智能等先进技术&#xff0c;实现生产过程自动化、智能化和柔性化的现代工厂。本整体规划方案旨在通过整合信息技术、自动化技术、人工智能技术和物联网技术&#xff0c;构建一个高效、灵活、绿色、可持续的生产环境&…

Allegro17.4创建异形焊盘速通

Allegro17.4创建异形焊盘速通 打开Padstack Editor 17.4&#xff0c;新建焊盘&#xff0c;以标贴焊盘为例: 该标贴焊盘是在底面&#xff0c;选择END LAYRE &#xff0c;选择 Shape symbol Geometry&#xff0c;Shape symbol选择框右边有选择键&#xff0c;跳到Library Shape S…

多行为级联24|多行为推荐的超图增强级联图卷积网络

挂到arxiv上的&#xff0c;多行为级联超图加对比学习,超图是针对单个行为的&#xff0c;而不是针对多个行为的。参考的类似工作是CRGCN加MBSSL。这两篇我都做了论文阅读&#xff0c;&#xff08;CRGCN正在路上&#xff0c;MBSSL是我的第一篇论文阅读帖子&#xff09;推荐系统论…

利用.NET Upgrade Assitant对项目进行升级

本教程演示如何把WPF程序从 <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>升级到<TargetFramework>net8.0-windows</TargetFramework>. 下载并安装.NET Upgrade Assistant - Visual Studio Marketplace Supported .NET upgrades: .NET Frame…

Vue2四、 scoped样式冲突,data是一个函数,组件通信-父传子-子传父-非父子

组件通信 1. 父组件通过 props 将数据传递给子组件 2. 子组件利用 $emit 通知父组件修改更新 父--->子 子--->父

第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ

Q1、统计符合条件长度为3的子数组数目 1、题目描述 给你一个整数数组 nums &#xff0c;请你返回长度为 3 的子数组&#xff0c;满足第一个数和第三个数的和恰好为第二个数的一半。 子数组 指的是一个数组中连续 非空 的元素序列。 2、解题思路 我们需要在给定的数组 nums…

PSDK的编译与ROS包封装

本文档讲述在NIVIDIA开发板上使用大疆提供的Payload SDK获取无人机实时GPS信息的方法&#xff0c;以及基于Payload SDK发布ROS GPS话题信息的方法。 文章目录 0 实现目标1 Payload SDK1.1 PSDK 源码的编译1.2 PSDK 的使用 2 遥测数据的读取2.1 示例代码结构2.2 读取机载GPS信息…

铝电解电容使用寿命

铝电解电容寿命问题 铝电解电容为什么会失效&#xff1f;铝电解电容失效与那些因素有关&#xff1f;电解电容寿命如何计算&#xff1f; 1铝电解电容为什么会失效&#xff1f; 电容都是由两个导电板并排放到一起就构成了。正极是铝&#xff08;阳极箔&#xff09;&#xff0c;…

用Python PySide6 复刻了两软件UI 做下练习

图样 1 代码 1&#xff1a; # -*- coding: utf-8 -*-import sys from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, QDate) from PySide6.QtGui import QIcon, QPixmap, QColor from PySide6.QtWidgets import (QApplication, QDialog, QLineEdit, QPushBut…

安装MongoDB,环境配置

官网下载地址&#xff1a;MongoDB Shell Download | MongoDB 选择版本 安装 下载完成双击打开 点击mongodb-windows-x86_64-8.0.0-signed 选择安装地址 检查安装地址 安装成功 二.配置MongoDB数据库环境 1.找到安装好MongoDB的bin路径 复制bin路径 打开此电脑 -> 打开高级…