程序的控制结构——switch语句【互三互三】


文章目录

🍁 引言

🍁1.语句格式: 

🍁2.语句执行过程 

🍁3.语句格式举例

 🍁例题

👉【例1】

🚀示例代码

👉【例2】

🚀【分析】

🚀示例代码

👉【例3】

🚀【分析】

🚀示例代码

🍁总结 

🍁备注


🚀欢迎互三👉程序猿方梓燚 💎💎
🚀所属专栏:C++教程💎

🚀关注博主,后期持续更新系列文章

🚀如果有错误感谢请大家批评指出,及时修改

🚀感谢大家点赞👍收藏评论✍ 


 

🍁 引言
应用条件语句可以很方便地使程序实现分支,但是出现 分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程 序结构会显得复杂,其至凌乱。为方便实现多情况选择,C++ 提供了一种switch开关语句。
🍁1.语句格式: 
switch(表达式){
    case  常量表达式1:
        语句序列1;
        break;
    case  常量表达式2:
        语句序列2;
        break;
    …… 
    case  常量表达式n:
        语句序列n;
        break;
    default:
        语句序列n+1;
    }

该语句中可以使用一次或多次case标号,但只能使用一次default标号,或者省略整个default部分;多个case标号也允许使用在同一个语句序列的前面;每个语句标号有保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为字面常量,如常数或字符。

🍁2.语句执行过程 

switch语句执行过程分为以下3步描述。          

(1)计算出switch后面圆括号内表达式的值,假定为M,若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值。          

(2)依次计算出每个case后常量表达式的值,假定它们为M1、M2、…,同样若它们的值不是整型,则自动转换为整型。          

(3)让M依次同M1、M2、…进行比较,一旦遇到M与某个值相等,则就从对应标号的语句开始执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。

!!!在实际使用switch语句时,通常要求当执行完某个case后的一组语句序列后,就结束整个语句的执行,而不让它继续执行下一个case语句后面的语句序列,为此,可通过使用break语句来实现。该语句只有保留字break,而没有其它任何成分。它是一条跳转语句,在

switch中执行到它时,将结束该switch语句,系统接着向下执行其它语句。

在使用switch语句时,还应注意以下几点:

  • case语句后的各常量表达式的值不能相同,否则会出现错误码。
  • 每个case或default后,可以包含多条语句,不需要使用“{”和“}”括起来。
  • 各case和default子句的先后顺序可以变动,这不会影响程序执行结果。
  • default子句可以省略,default后面的语句末尾可以不必写break。          

程序设计风格提示:写switch语句时,switch(表达式)单独一行,各case分支和default分支要缩进两格并对齐,分支处理语句要相对再缩进两格,以体现不同层次的结构。

🍁3.语句格式举例

(1)上下两个的书写格式是等价的

switch(a)
{
     case 1:x++;break;
     case 2:y++;break;
     case 3:z++;break;
     default:cout<<"error";
   }
switch(a){  
    case 1:
        x++;
        break;
    case 2:
        y++;
        break;
    case 3:
        z++;
        break;
    default:
        cout<<"error";
    }

(2)

switch (ch) {
		case 'a':
		case 'A':
			d1 = (x + y) / 2;
			d2 = x * y - 2;
			break;
		case 'b':
		case 'B':
			d1 = (a + b) / 2;
			d2 = a * b - 2;
			break;
		default:
			cout << "input error!";
	}

说明:  

  • 每个case后面的语句可以写在冒号后的同一行或换到新行写。        
  • <语句序列1>…<语句序列n+1>都是一组语句,有时可为空,如(2)
 🍁例题
👉【例1】

根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。

🚀示例代码
#include<iostream>
using namespace std;
int main() {
	int weekday;
	cin >> weekday;
	switch (weekday) {
		case 1:
			cout << "Monday" << endl;
			break;
		case 2:
			cout << "Tuesday" << endl;
			break;
		case 3:
			cout << "Wednesday" << endl;
			break;
		case 4:
			cout << "Thursday" << endl;
			break;
		case 5:
			cout << "Friday" << endl;
			break;
		case 6:
			cout << "Saturday" << endl;
			break;
		case 7:
			cout << "Sunday" << endl;
			break;
		default:
			cout << "input  error!";
	}
	return 0;
}
👉【例2】

一个最简单的计算器支持+,-,*,/四种运算。输入只有一行:两个参加运算的数和一个操作符(+,-,*,/)。输出运算表达式的结果。

考虑下面两种情况:  

  • 如果出现除数为0的情况,则输出:Divided by zero!  
  • 如果出现无效的操作符(即不为+,-,*,/之一),则输出:Invalid operator!

输入样例:     34 + 56 

输出样例:     90

🚀【分析】

设num1、num2存放两个参加运算的操作数,op存放操作符。    

  • 当op为“+”号时,实现加法操作。    

  • 当op为“-”号时,实现减法操作。    
  • 当op为“*”号时,实现乘法操作。    
  • 当op为“/”号时,判断b值,如果不为0,则实现除法操作,如果为0,则输出:Divided by zero!。    
  • 当op不是上面四种操作符时,输出:“Invalid operator!”。
🚀示例代码
#include <bits/stdc++.h>
using namespace std;
int main() {
	double num1, num2;
	char op;
	cin >> num1 >> op >> num2;
	switch (op) {
		case'+':
			cout << num1 + num2 << endl;
			break;
		case'-':
			cout << num1 - num2 << endl;
			break;
		case'*':
			cout << num1*num2 << endl;
			break;
		case '/':
			if (num2 != 0) {
				cout << num1 / num2 << endl;
				break;
			} else {
				cout << "Divided by zero!" << endl;
				break;
			}
		default:
			cout << "Invalid operrator!" << endl;
	}
	return 0;
}
👉【例3】

期末来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案.

🚀【分析】

对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x / 4支。由于小q要把钱用完,故我们可以按以下方法将钱用完:          

  • 若买完x / 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x / 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;若买完x / 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。          
  • 从以上对买笔方案的调整,可以看出笔的数目都是x / 4,因此该方案的确为最优方案。
🚀示例代码
#include<iostream>
using namespace std;
int main() {
	int a, b, c, x, y;
	//a,b,c分别表示在买笔方案中,6元、5元和4元钱笔的数目
	//x,y分别表示剩余班费和买完最多的4元笔后剩的钱
	cin >> x;         //输入x
	c = x / 4;         //4元笔最多买的数目
	y = x % 4;       //求买完c支4元笔后剩余的钱数y
	switch (y) {     //判断购买方案
		case 0:
			a = 0;
			b = 0;
			break;
		case 1:
			a = 0;
			b = 1;
			c--;
			break;
		case 2:
			a = 1;
			b = 0;
			c--;
			break;
		case 3:
			a = 1;
			b = 1;
			c -= 2;
			break;
	}
	cout << a << ' ' << b << ' ' << c << endl; //三个数间以空格隔开
	return 0;
}
🍁总结 

有不懂的地方可以si我,和我一起学习C++吧。

🍁备注

还没有下载DEV-C++的小伙伴们可以私我拿到免费安装包

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【linux】进程间通信(IPC)——匿名管道,命名管道与System V内核方案的共享内存,以及消息队列和信号量的原理概述

目录 ✈必备知识 进程间通信概述 &#x1f525;概述 &#x1f525;必要性 &#x1f525;原理 管道概述 &#x1f525;管道的本质 &#x1f525;管道的相关特性 &#x1f525;管道的同步与互斥机制 匿名管道 &#x1f525;系统调用接口介绍 &#x1f525;内核原理 …

如何搞定美国TikTok直播网络?

在全球范围内&#xff0c;TikTok已经积累了超过30亿次的下载量&#xff0c;月活跃用户达到13亿以上&#xff0c;支持75种语言&#xff0c;覆盖了150多个国家和地区。这一庞大的流量池吸引了众多国内电商人尝试在TikTok上进行业务拓展。本文将探讨如果要在美国运营TikTok直播&am…

Kithara与OpenCV (一)

Kithara使用 OpenCV 库 目录 Kithara使用 OpenCV 库简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 Ope…

彻底搞懂JVM垃圾回收

哈喽&#xff0c;大家好&#x1f389;&#xff0c;我是世杰。 欢迎大家关注我的公众号『程序员世杰』获取更多后端技术干货&#x1f389;&#x1f389;! 本文我为大家介绍「JVM垃圾回收那些事」 面试连环call 如何判断对象是否应被回收?finalize方法的实现机制是什么?如何判…

触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘

如何在触摸设备上为输入域添加虚拟键盘&#xff1f; 一个插件可以解决这个问题&#xff0c;关键还支持高度自定义&#xff08;git地址&#xff09;&#xff1a; GitHub - Mottie/Keyboard: Virtual Keyboard using jQuery ~ 官网地址&#xff1a;Virtual Keyboard 使用步骤&…

Photoshop

彩色转灰度&#xff1a;ctrlshiftu 背景转黑色&#xff1a; 魔术棒容差10 shift连选 shiftF5&#xff08;填充&#xff09;钢笔选择 路径 工作路径 将路径作为选区载入 点回图层 按ctrlx删除选区 待更新

如何找回误删的文件?4个常用文件恢复方法!

对于许多用户来说&#xff0c;误删文件是一种常见而令人懊恼的情况。恢复误删文件的重要性在于&#xff0c;它可以帮助用户找回宝贵的数据&#xff0c;避免因数据丢失带来的各种不便和损失。 如何找回不小心删除的文件&#xff1f; 误删数据不知道怎么恢复&#xff0c;会给我…

Spring MVC入门3

看完这篇博客你能学到什么 理解JSON的使用理解注解PathVariable理解解注解RequestPart理解cookie和Session的基本概念理解cookie和Session的区别 如果想真正掌握&#xff0c;还需要自己勤加练习。 正文 JSON JSON概念 JSON&#xff1a;JavaScript Object Notation 【JavaS…

传输层协议之UDP

1、端口号 我们在应用层创建的套接字&#xff0c;是需要通过bind()接口绑定我们的IP地址与端口号的&#xff0c;这是因为数据从传输层向上交付到应用层时&#xff0c;需要用端口号来查找特定的服务进程。一般在网络通信时&#xff0c;用IP地址标识一台主机&#xff0c;用端口号…

小米起诉“小米”商标侵权,索赔500万!

近日浙江丽水有家叫小米的公司&#xff0c;因为商标侵权被小米科技起诉索赔500万&#xff0c;需要变更企业名称&#xff0c;官网也不能用“小米智能大家居”等&#xff0c;还有其它的赔偿&#xff0c;普推知产商标老杨分析&#xff0c;“小米智能大家居”“小米”&#xff0c;后…

ArduPilot开源飞控之AP_Mount_Topotek

ArduPilot开源飞控之AP_Mount_Topotek 1. 源由2. 框架设计3. 重要函数3.1 动态过程3.1.1 AP_Mount_Topotek::update3.1.2 AP_Mount_Backend::calculate_poi 3.2 基础能力3.2.1 AP_Mount_Topotek::healthy3.2.2 AP_Mount_Topotek::has_pan_control 3.3 设备功能3.3.1 AP_Mount_T…

第一次构建一个对话机器人流程解析(一)

1.问答机器人的组成 1.1 问答机器人的组成结构图 2. 问答机器人的组成-机器人的个人属性 所谓的机器人一般具备有个人的属性&#xff0c;这些属性固定&#xff0c;形成了机器人的个人偏好 在实现过程中&#xff0c;此处使用一个xml配置文件&#xff0c;配置了机器人的个人年…

卡码网KamaCoder 99. 岛屿数量

题目来源&#xff1a;99. 岛屿数量 C题解&#xff1a;来源代码随想录 懒得自己写了。直接搬运。。。 1. 深度优先搜索&#xff1a;它的循环在main函数里&#xff0c;遍历每个位置&#xff0c;判断 是否为陆地 及 是否访问过。 #include <iostream> #include <vecto…

自养号测评补单:速卖通卖家如何打造爆款?

在跨境电商的激烈竞争中&#xff0c;速卖通卖家们为了打造店铺的爆款商品&#xff0c;不仅需要紧跟市场趋势&#xff0c;还需理解爆款商品的生命周期。以下是一些实用的策略&#xff0c;帮助卖家们更有效地打造爆款&#xff1a; 一、精准选品策略 面对全球多样化的消费者群体&…

算法复杂度<数据结构 C版>

什么是算法复杂度&#xff1f; 简单来说算法复杂度是用来衡量一个算法的优劣的&#xff0c;一个程序在运行时&#xff0c;对运行时间和运行空间有要求&#xff0c;即时间复杂度和空间复杂度。 目录 什么是算法复杂度&#xff1f; 大O的渐近表达式 时间复杂度示例 空间复杂度…

Open-TeleVision——通过VR沉浸式感受人形机器人视野的远程操作

前言 7.3日&#xff0c;我司七月「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接&#xff0c;我当时快速看了一遍&#xff0c;还是有价值的一个工作(其有受mobile aloha工作的启发…

编程题目积累(day5)

题目&#xff1a; 源数组a&#xff0c;将a中所有元素乘以2之后添加进a&#xff0c;则这个a就叫双倍数组&#xff0c;给你一个数组a&#xff0c;判断它是不是双倍数组&#xff0c;如果是则输出源数组&#xff0c;不是则输出空数组。 补充知识&#xff1a; python中枚举和字典…

一个很变态但是有用的变现手段:用AI技术搞电商模特图,接单接到手软~

前言 今天带大家拆解一个特别有趣的项目&#xff0c;必须得跟大家分享一下&#xff1a;用AI技术搞电商模特图。 是不是感觉挺科幻的&#xff1f;但这真不是科幻小说里的情节&#xff0c;而是咱们现实生活中已经实现的事情。 想想看&#xff0c;咱们平常在网上看到的那些漂亮…

【RHCE】基于密钥的身份验证(Win-Linux)

目的&#xff1a;要提⾼系统安全性&#xff0c;通过在 OpenSSH 服务器上禁⽤密码⾝份验证来强制进⾏基于密钥的⾝份验证。 1、一台虚拟机无需密码连接另一台虚拟机 .ssh目录 > 保存了ssh相关的key和一些记录文件 &#xff08;1&#xff09;生成密钥对 使⽤这个流程在本地…

基于pytesseract的OCR图片识别

简介 pytesseract是基于谷歌的tesseract的OCR包&#xff0c;支持识别一些简单的数字、字母、中文。 安装 安装引擎 下载地址&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 一般是Windows 64位系统最新版&#xff1a; 如果要识别中文&#xff0c;注意选中中文…