程序的控制结构——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++的小伙伴们可以私我拿到免费安装包

  • 30
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值