第四节 C++ 选择结构

前言介绍

  1. C++中支持的三种基本的运行流程:顺序结构,选择结构,循环结构(后面再讲)。
  2. 什么是 顺序结构?
    • 程序按照顺序执行,不发生跳转,写代码的解决思路也是如此 。

1. if 选择结构

1.1 概述

  1. 怎么理解选择结构 ? 如日常生活中,出现了 需要判断选择 的时候,需要参考某些特定的条件,根据这些条件的结果,作为依据来选择 是否执行 自己的选择。
    • 当我们走出家门时,通常会看下外面的天气,如果下雨就带上雨伞。
    • 过马路时,会根据红绿灯的信息选择是否过马路。
  2. 在计算机的语言中,同样需要引入 选择结构(分支结构)描述事件 的解决过程。
  3. 判断结构要求,指定一个或多个要测试的条件,以及条件为真时要执行的语句 (必需的) 和 条件为假时要执行的语句 (可选的)

1.2. 单 if 语句执行

  1. 就是根据某个条件进行判断,符合条件就执行条件里面的代码,不符合条件。

    • 执行流程如下所示:
      在这里插入图片描述
  2. 使用案例,注意语法格式{} 括号 的使用。

    • 从控制台输入考试成绩, 考试成绩小于60分就算不及格,请设计程序。
    #include <iostream> 
    using namespace std;
    
    
    int main(){
    	/*1.单个if的语法格式: 
    		if(条件判断){
    			成立执行; 
    		} 
    		判断外语句; 
    	*/
    	double score ; //定义考试成绩 
    	cout<<"请输入考试成绩:" <<endl; 
    	cin>> score ; //接受控制台输入成绩 
    	
    	//判断语法结构 
    	if(score<60){
    		//满足条件执行语句 
    		cout<<"考试成绩不合格"<<endl;		
    	}
    	 
    	//判断外条件
    	cout << "程序结束" <<endl; 
    	return 0;
    } 
    

1.2.1 分号和中括号注意事项

  1. 注意事项1: 切勿在 if(); 后面加分号,这样会导致不会根据判断条件执行,不管条件是否符合,都会执行{}中的语句体。

    • 下列代码为 上述代码片段。
    //判断语法结构 
    	if(score<60);{
    		//满足条件执行语句 
    		cout<<"考试成绩不合格"<<endl;		
    	}
    

    在这里插入图片描述

  2. 注意事项2:关于{}的约束范围(如果if 选择结构没有使用{}),只有最近的一个会被约束,第二行就不会被约束。

    • 下列代码为 上述代码片段。
    //判断语法结构 
    	if(score<60)
    		//满足条件执行语句 
    		cout<<"考试成绩不合格"<<endl;		
    		cout<<"我被约束了么?"<<endl;
    

    在这里插入图片描述

1.2.2 案例:判断天气

  1. 上述知道如何使用了if单分支结构,请思考下列案例。
    • 根据天气情况判断,如果天气好 (晴), 输出,出去玩,天气不好 (雨) ,输出,在室内玩。
    • 判断 两个字符串是否相同,使用比较运算符 ==
    #include <iostream>
    using namespace std;
    
    int main(){
    	/*输出两个结果?
    		思考,怎么处理 
    	*/
    	//从控制台输入  
    	string weather; 
    	cout<<"请输入今天,天气情况(晴或者雨)"<<endl;
    	cin>>weather; 
    	//开始使用if判断
    	if (weather=="晴"){
    		cout<< "去室外" <<endl; 
    	}
    	if (weather=="雨"){
    		cout<< "在室内" <<endl; 
    	}
    	cout<< "end.."<<endl; 
    } 
    

1.3. if - else 语句结构

  1. 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
    • 回想两个单if 解决的问题,还有其它问题怎么解决,所以使用 if-esle 结构。
    #include <iostream>
    using namespace std;
    #include <string> //使用string空间 
    int main(){
    	/*
    	1. 使用选择结构 if-esle
    			来解决双if结构的使用
    			天气的例子. 
    	*/
    	string weather; 
    	cout<<"请输入天气状况"<<endl;
    	cin >> weather ; 
    	if (weather == "晴"){//符合 
    		cout<<"今天天气状况"<<weather<<"在室内玩"<<endl; 
    	}else{ //不符合走else 
    		cout<<"今天天气状况" <<weather<<"在室外玩"<<endl; 
    	} 
    	//程序执行结束. 
    	cout<< "end..." << endl; 
    	return 0 ;
    } 
    

1.3.1 案例1:考试成绩

  1. 通过上述案例,使用if-esle结构完成案例分析,找出关键条件。
    • 妈妈承诺,如果小明语文成绩大于90,或者 数学成绩大于80,给买游戏机,否则好好学习。
    • 提示:参考 配合第三节的 逻辑运算符使用。
    #include <iostream>
    using namespace std;
    int main(){
    	/*1.考试成绩.语文成绩大于90 
    				 数学成绩大于80 
    			或者条件 || 
    			否则
    				就需要好好学习. 
    	*/
    	double Chinese;  //语文 
    	double Maths;  //数学 
    	cout<<"请输入语文考试成绩:"<<endl;
    	cin>>Chinese;  
    	cout<<"请输入数学考试成绩:"<<endl;
    	cin>>Maths; 
    	if (Chinese>=90||Maths>=80){ 
    		cout<< "买游戏机" <<endl; 
    	} else{
    		cout<< "好好学习,下次努力"<<endl; 
    	} 
    	return 0;
    } 
    
  • 如果要是 并且 的条件呢 ?

1.3.2 案例2:判断闰年

  1. 什么是闰年 ? 需要搞清楚这样的一个事情 。
    • 涉及到一个普通闰年,是4的倍数,但不是100的倍数, 例如2008 。
    • 世纪闰年,是400的倍数。 例如:2000年。
    #include <iostream>
    using namespace std;
    
    int main(){
    	/*1.判断闰年 
    			普通闰年, 能被4整除,不能被400整除.
    			世纪润年, 能被400整除  
    	*/
    	int year; 
    	cout<<"请输入年份"<<endl;
    	cin >> year;
    	//判断是否闰年 需要满足条件
    	if(year%4==0&&year%400!=0||year%400==0){
    		cout<< "是闰年" <<endl; 
    	}else{
    		cout<< "不是闰年" <<endl; 
    	} 	
    	return 0; 
    } 
    

1.3.3 案例3:判断三角形

  1. 三角形的三条边,a,b,c的值,判断是否构成三角形,若构成三角形,求三角形面积。

    • 三角形构成定理,三角形三边满足任意两边之和大于第三边的条件。
    • 思考一下,怎么思考问题和分析 ,有几种方式?
    #include <iostream>
    using namespace std;
    
    int main(){
    	//三角形定义规则,两边之和大于一定第三边. 
    	int a;
    	int b;
    	int c;
    	
    	cout<<"请依次输入三个边的值: "<<endl;
    	
    	cin >>a;
    	cin >>b;
    	cin >>c;
    	//判断三角形,核心定理两边之和大于第三边. 
    	if ((a+b)>c && (a+c)>b && (b+c)>a) {
    		cout<<"三角形的面积: "<<a*b*c<< endl;  
    	}else{
    		
    		cout<<"不符合条件"<<endl; 
    	} 
    	
    	return 0; 
    } 
    
    • 另一种思维方式,反向思考方法,小于等于都不符合情况。
    // 下述为代码片段
    	if((a+b)<=c || (a+c)<=b || (b+c)<=a) {
    		cout<<"不符合条件"<<endl; 
    	}else{
    		cout<<"三角形面积"<<a*b*c<<endl; 
    	} 
    	return 0; 
    

1.4. 多分支结构

1.4.1 语法结构

  1. 多分支语法结构,如下:

    • 逐步判断,看哪个条件符合。
    • 最后的 else ,根据情况,可以省略。
    	if(判断条件){
    		执行语句体			
    	} else if(判断条件){
    		执行语句体
    	} else if (判断条件){
    		执行语句体
    	} ...
    		
    	else{
    		执行语句体
    	} 
    
  2. 思考一下,else if 的顺序可以调换么?

1.4.2 案例:成绩区间使用

  1. 如果判断成绩区间使用,就需要使用多分支情况。

    • 输入一个成绩: 判断分数段,所给出评级。
      • 90 ~100 评级 A
      • 80 ~ 89 评级 B
      • 70 ~ 79 评级 C
      • 60 ~ 69 评级 D
      • 0 ~ 59 评级 E
    • 思考使用 单分支if , 或者 if-else 结构 能否解决上述问题 ?
    #include <iostream>
    using namespace std;
    
    int main(){
    //		- 90 ~100 之间  评级 A
    //		- 80 ~ 89  之间  评级 B
    //		- 70 ~ 79  之间  评级 C
    //		- 60 ~ 69  之间  评级 D
    //		- 0 ~  59  评级 E
    	//使用if方式进行操作 
    	cout<<"请输入考试成绩:"<<endl;
    	int num; //定义num的值 
    	cin >> num;
    	//使用逻辑运算符控制范围 
    	if(num>=90 && num<=100){
    		cout<< "评级为: A"<<endl;
    	}else if (num>=80 && num<=89){
    		cout<< "评级为: B" <<endl;
    	}else if (num>=70 && num <=79){
    		cout<< "评级为: C" <<endl;
    	}else if (num>=60 && num <=69){
    		cout<< "评级为: D" <<endl;
    	}else{
    		cout<< "评级为: E" <<endl; 
    	}
    	return 0;
    } 
    
  2. 还有更简洁的代码实现么?

    • 边界值考虑。
    • 其中思考一个很重要的问题,下列else if顺序能调换么?
    #include <iostream>
    using namespace std;
    
    int  main(){
    	/**
    		- 90 ~100 之间  评级 A
    		- 80 ~ 89  之间  评级 B
    		- 70 ~ 79  之间  评级 C
    		- 60 ~ 69  之间  评级 D
    		- 0 ~  59        评级 E
    	*/
    	//对于边界值的思考.
    	cout << "请输入考试成绩: ";
    	int num;
    	cin >> num; 
    	if(num>=90){
    		cout << "评级为A" << endl;
    	}else if (num>=80){
    		cout << "评级为B" << endl;
    	}else if (num>=70) {
    		cout << "评级为C" << endl;
    	}else if (num>=60){
    		cout << "评级为D" << endl;
    	}else {
    		cout << "评级为E" << endl;
    	} 
    	
    	return 0;
    }
    

1.5. 嵌套选择结构

1.5.1 如何嵌套

  1. 回想今日课堂所学内容, 选择结构的几种方式,都能根据不同的场景解决问题, 现在如果有以下场景怎么解决?

    • 游泳馆游泳,买票的人才能进入, 进入之后会根据男女分别今不同的更衣室,请设计该程序。
  2. 上述分析,结果就需要再判断中,在一次进行判断,这样就是嵌套结构。

    • 语法格式如下:
    if (){
    		//满足条件执行里面的分支结构
    		if (){
    		}else if (){
    			
    			...
    		}
    	} 
    
  3. 案例分析,使用嵌套结构设计程序。

    #include <iostream>
    using namespace std;
    
    int main(){
    	/**
    		 游泳馆游泳,买票的人才能进入, 
    		 进入之后会根据男女分别今不同的更衣室。
    	*/
    	//先分析结构
    	string ticket; 
    	string sex;
    	cout << "请问是否有票: "; 
    	cin>> ticket; 
    	if (ticket == "yes"){
    		cout<< "请根据性别选择浴室: ";
    		cin >>sex; 
    		if (sex=="男"){
    			cout<<"进男生"; 
    		}else if (sex =="女") {
    			cout<<"进女生";
    		}
    		//可以省略else
    		else{
    			cout<<"填写有误,请重新填写" ;
    		} 
    	} else{
    		cout<< "请先买票!"<<endl; 
    	} 
    	return 0;
    } 
    

1.5.2 案例 :上车找座位程序设计

  1. 日常做公交车,上车需要先买票,买票需要金额大于2元,然后根据是否有空座位进行,找到了就输出,有座位,没有找到,就输出没有座位。

    • 请分析上述需求,使用分支结构设程序。
    #include <iostream>
    using namespace std;
    
    int main(){
    	//1.上车买票需要金额大于2元
    	int money;
    	cout<< "请刷卡: ";
    	cin >>money;
    	
    	if (money>=2){
    		cout<<"欢迎上车,寻找座位中...有坐么?"<<endl;
    		int seat; 
    		cin>> seat;
    		if (seat>=1){
    			cout<<"有"<<seat<<"座位."<<endl; 
    		}else{
    			cout<<"没有座位,只能站着"<<endl; 
    		} 
    	}else{
    		cout<<"金额不够,请充值在乘坐"<<endl; 
    	} 
    	return 0; 
    } 
    

1.6. if 阶段编程测试

1.6.1 判断奇数和偶数

  1. 输入一个正整数,判断他是奇数还是偶数,并输出信息。

    • 什么是奇数?什么是偶数 ?
    #include <iostream>
    using namespace std;
    
    int main(){
    	//判断奇数还是偶数
    	cout<<"请数一个正整数:";
    	int num; 
    	cin>> num;
    	//逻辑分析,什么是奇数?什么是偶数? 
    	if (num%2==0){
    		cout<<"偶数"<<endl; 
    	}else{
    		cout<<"奇数"<<endl; 
    	} 
    	return 0; 
    } 
    

1.6.2 输入三个数,判断哪个数最大

  1. 输入三个数,输出其中最大的数。

    • 要求设置变量,使用max存放最大值。
    #include <iostream>
    using namespace std;
    
    int main(){
    	//输入三个数,使用max存放最大值.
    	int a,b,c,max;
    	cout<<"输入三个数: "<<endl;
    	cin>>a;
    	cin>>b;
    	cin>>c;
    	
    	if (a>=b&&a>=c){
    		max = a; 
    	} else if (b>=c&&b>=a){
    		max = b; 
    	} else if (c>=a&&c>=b){
    		max = c; 
    	} 
    	//else 可以省略 
    	cout <<"最大值为"<<max<<endl; 
    	return 0; 
    } 
    

1.6.3 商场购物哪家划算

  1. 商场购物,口渴想买可乐,可乐正常价格3元,家乐福打折88折,沃尔玛优惠政策“买8送一个”。

    • 从控制台输入数量,到底买哪家合适 ?
    #include <iostream>
    using namespace std;
    
    int main(){
    	 同样买num个可乐,哪个合适 ? 
    	1.家乐福实际花钱, a_money  =  num * 0.88 * 3          //每一个价格 
    	2.沃尔玛实际花钱, b_money  =  num * 3 - num*1/9 *3   //买8送一,用8个钱买9个 
    	int num;
    	cout<<"请输入买的个数"<<endl;
    	cin >> num;
    	//3. 在逻辑核心代码 
    	int a_money  =  num * 0.88 * 3;
    	int b_money  =  num * 3 - num*1/9 *3;  
    	if (b_money < a_money){
    		cout<<"沃尔玛好"<<endl; 
    	} else {
    		cout<<"家乐福好"<<endl; 
    	} 
    	return 0; 
    } 
    

1.6.4 快递业务计费I

  1. 某快递业务 收费标准, 1kg以内收费13元, 之后超过1kg部分每400g加收3元, 请根据收费标准,设计出相应程序。

    • 输入重量计算金额 (重量声明类型为int类型)。
    • 提示主要在于额外费用计算, 例如, 1200即使每超过
    #include <iostream> 
    using namespace std;
    
    int main(){
    	//1.创建重量变量
    	int weight; //单位是克. 
    	int money=13; //基础费用13元 
    	cout<<"请输入重量"<< endl; 
    	cin >> weight;
    	//2.逻辑计算1000g以内13元,每超出400g的部分加收3元 
    	if (weight<=1000 && weight>=0) {
    		cout<<"快递的费用"<<money<<endl; 
    	}else if(weight>1000){
    		//处理费用逻辑,超出的部分钱数 
    		int extraWeight = weight - 1000;
    		//核心代码,根据重量计算,不足400的按照3元收费 
            int extraMoney = (extraWeight + 400) / 400 * 3; 
            int cash = money + extraMoney;
            cout << "总价格" << cash << "元" << endl;
    	} 
    	return 0;
    }
    
    

1.6.5 快递业务计费II

  1. 假设邮局规定寄邮件时,若每件重量在1公斤以内(含1公斤),按15元计算邮费,如何超过1公斤时,其超出部分每公斤加收8元,不足1公斤按1公斤计算。 请编写计算邮费。

    • 输入:邮件的重量。
    • 输出:应付的邮费。
    #include <iostream>
    using namespace std;
    
    
    int main(){
    	/**
    		思路分析本题考核:
    		1.需要两个变量 重量和费用 
    		2.返回使用分支结构进行判断 
    	*/
    	//1.声明变量 
    	double weight;//声明重量
     	double money;//声明金钱
    	cin >> weight; 
    	//2.做条件判断,当重量小于1kg的情况下 
    	if(weight<=1){
    		money = 15; 
    	} else {
    		//否则就是大于1公斤,大于1公斤有两种情况
    		//1.重量正好为整数, 2.就是大于1公斤,不满足1公斤小数.
    		//提示:怎么判断条件是很重要的? 
    		if(weight>int(weight)) {
    			//重量有小数,取整计算小数 
    			money = int(weight)*8 +15;
    		}else{
    			//就是整数的重量,就需要去除1公斤的基本, 
    			money =(weight-1)*8+15; 
    		} 
    	} 
    	cout <<  money; 
    	return 0; 
    } 
    

在这里插入图片描述

1.6.6 平面直角坐标系

  1. 平面直角坐标系,输入平面直角坐标系中的一点的坐标值,判断该点是在哪一个象限中,原点或坐标轴上。
    • 输入 4 2 输出 第一象限 输入 4 0 输出 x轴。
      在这里插入图片描述
      在这里插入图片描述
#include <iostream>
using namespace std;

int main(){
	int x,y;
	cin >>x>>y;
	//根据平面直角坐标系判断
	//1~4象限 
	if (x>0&&y>0){
		cout <<"第一象限";
	}else if(x<0&&y>0){
		cout<<"第二象限"; 
	}else if(x<0&&y<0){
		cout<<"第三象限"; 
	}else if(x>0&&y<0){
		cout<<"第四象限"; 
	}else if(x==0&&y!=0){
		cout<<"x轴"; 
	}else if(y==0&&x!=0){
		cout<<"y轴";
	}else if(x==0&&y==0){
		cout<<"原点"; 
	}
	return 0;
}

  • 注意: 如果输入的是字符的话,会发生无法转换问题,导致异常,最后会无法赋值,变量值默认为0。

1.6.7 输入三个数由小到大排序

  1. 输入三个数字, 按照由小到大的顺序输出。
    • 思路分析, 只需要比较位置即可。 输入样例 2 4 3 输出 2 3 4 。
    #include <iostream>
    using namespace std;
    
    int main(){
    	//请你输出3个数字,按照由小到大的顺序输出.
    	int a,b,c; 
    	cin>> a >>b>>c;
    	//进行逻辑判断,通过位置上的比较获取
    	//a b c 三个位置进行比较 
    	if (a>b){
    		//swap(a,b); //std中自带的标准库.交换
    		int temp = a;
    		a = b;
    		b = temp; 
    	} 
    	if(a>c){
    		//另一种方式,求和法. 
    		int temp=a+c;
    		a = temp-a;
    		c = temp-c; 
    	} 
    	if(b>c){
    		//C++中的交换方法 
    		swap(b,c); 
    	} 
    	cout<< a <<" "<<b<<" "<<c; 
    	return 0;
    }
    
    

1.6.8 路费计算

  1. 如下所示:

    • 结果保留 4位小数。
      在这里插入图片描述
  2. 注意上述, 无折扣,如何定义。

    • 注意保留4位小数, 头文件 #include <iomanip>
    #include <iostream>
    #include <iomanip> //保留小数 
    using namespace std;
    
    int main(){
    	//根据计算公式,定义变量p是运费, 货物重量w   距离s  总运费 f 
    	// f = p*w*s(1-d)   其中p和w是实数 ,注意实数的概念 
    	double p,w; // 运费, 重量 
    	cin >> p>>w;
    	//根据题目分析,明确定义的变量
    	// 路程, 折扣 连个变量 
    	int s;//路程 
    	double d; //折扣  discount 
    	//区间判断需要使用if-else if-else if--结构
    	//判断区间
    	cin >> s; 
    	if(s<250){
    		//原价 
    		d = 0; //无折扣 
    	}else if(s>=250 && s<500){
    		d = 0.02;// 2%
    	}else if(s>=500 && s<1000) {
    		 d=0.05;
    	}else if(s>=1000&&s<2000){
    		d=0.08; 
    	}else if(s>=2000&&s<3000){
    		d= 0.1; 
    	}else if(s>=3000){
    		d = 0.15; 
    	}
    	//注意导入头文件, 保留4位小数
    	cout<< fixed<<setprecision(4); 
    
    	//计算公式,注意折扣是折扣, 打折是打折 
    	cout << p*w*s*(1-d);
    	return 0;
    }
    

1.6.9 今天是第几天

  1. 输入两个数字 m和d,代表今天是2020你年的m月和d日,问题来了隔壁老王想知道今天是2020年的第几天?
    • 问题分析1: 需要知道每个月有几天, 然后累加即可.
    • 问题分析2: 需要知道2月多少天?
    • 输入样例 1 31 输出31 输入样例 2 27 输出样例 58
#include <iostream>
using namespace std;

int main(){
	//2020年是平年还是闰年决定2月有多少天 29天 
	//并且知道每个月有多少天
	//定义变量月和日
	int m,d,days;
	cin>>m>>d;
	//简单的思路就是逐月递加 
	if(m==1){
		days=d; //没有累加 
	}else if(m==2){
		days = 31+d; //累加 1月 
	}else if(m==3){
		days = 31+29+d; 
	}else if (m == 4) {
        days = 31 + 29 + 31 + d;
    } else if (m == 5) {
        days = 31 + 29 + 31 + 30 + d;
    } else if (m == 6) {
        days = 31 + 29 + 31 + 30 + 31 + d;
    } else if (m == 7) {
        days = 31 + 29 + 31 + 30 + 31 + 30 + d;
    } else if (m == 8) {
        days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + d;
    } else if (m == 9) {
        days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + d;
    } else if (m == 10) {
        days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + d;
    } else if (m == 11) {
        days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + d;
    } else if (m == 12) {
        days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + d; 
	}
    cout <<days; 
	return 0;
}

1.7. 扩展: 三元运算符

1.7.1 语法结构

  1. 为了简化选择结构的判断。
    • 语法格式如下:<表达式1> ? <表达式2> : <表达式3 >
    • 注意事项就是,返回表达式的类型与接受类型一致。
	// <表达式1> ? <表达式2> : <表达式3 >
	//表达式结果为true 即正确, 就执行表达式2的结果,反之就执行表3的结果.
	#include <iostream>
	using namespace std;
	int main(){
		int a = 5;
		int b =10;
		//逻辑计算结果,返回类型与接受类型一致。
		string res =  a>b  ? "a值大" : "b值大"; 
		cout << res <<endl; 	
		return 0; 
} 
	
	
	

1.7.2 案例: 判断奇偶数

  1. 三元运算符的目的,就是简化使用分支结构的语法形式,但是只能在简单的情况下进行减少代码的优化。
    • 使用if esle
    #include <iostream>
    using namespace std;
    
    int main(){
    	//1. 三元运算符测试奇偶数
    	int a;
    	cout<< "请输入一个数: "<<endl;
    	cin >> a; 
    	// 表达式1?表达式2:表达式3;
    	string res = a%2==0 ?"偶数":"奇数";
    	cout<< "结果: " << res << endl; 
    	return 0;
    } 
    

2. switch 选择结构

2.1 概述

  1. 既然有if 选择结构了为什么还需要switch结构?
    • 使用switch语句的主要目的是提供一种结构清晰、执行效率高的多分支选择方案。
    • 当条件表达式的取值是有限且确定的时候,使用switch语句能够更简洁地编写代码,也更易于阅读和维护。
    • 同时,由于switch语句的实现原理是使用跳转表来查找执行位置,所以在某些情况下执行效率会比if语句高。
  2. 但是不适合switch的情况,如果条件表达式的取值范围较广或者需要进行复杂的条件判断时,if语句通常会更加灵活和合适。

2.2 语法结构

  1. switch语法结构,基本格式如下:

    • switch(expression) 中的类型只能是 整型 或者 字符型
    • 注意,每一个表达式结束都要接一个冒号。
    • expression和 表达式必须同一种类型。
    switch(expression){
    		case 表达式1:
    			//语法表达式
    			break; 
    		case 表达式2:
    			//语法表达式
    			break; 
    		...
    		default:
    			//执行语句 
    		
    	} 
    	
    
    • 流程图如下:
      在这里插入图片描述
  2. 案例使用

    • 手机拨打快捷键设置。
#include <iostream>
using namespace std;

int main(){
	//switch语法结构
	int num;
	cout<<"请输入快捷键: "<< endl; 
 	cin >> num; 
	switch(num){
		case 1:
			cout<<"给警察打电话"<<endl;
			break;
		case 2:
			 cout<<"给医生打电话"<<endl;
			break;
		case 3:
			cout<<"给救火员打电话"<<endl; 
			break;
		default:
			cout<<"重新输入快捷键"<<endl; 
			break; 
	} 

	return 0;
} 

2.3 switch 常见问题

  1. 思考几个问题?
    • case 的顺序可以变换么?
    • default可以省略么?或者位置可以发生变化么?
    • break可以不加么?
  2. 思考过后上述情况会产生一个现象叫做 “穿透现象”

2.4 程序设计

2.4.1 练习案例1:设计计算器

  1. 使用 switch结构, 设计,计算器功能, 任意输入两个数,根据输入的选择计算的符号,计算结果。
    • 思考一下使用 if 结构能 解决这样的问题么?
    • 如果是字符型,不能使用双引号" ",需要使用单引号 ' '
#include <iostream>
using namespace std;

int main(){
	
	/**
	1. 输入任意的两个数.
	2. 输入符号, +  - * /  % 
	3. 考虑分母不能为0的时候.
	*/
	//定义变量 
	
	char n;
	int num_1;
	int num_2;
	//定义计算结果
	int total_num; 
	//2.使用键盘输入 
	cout<<"请输入第一个数 "; 
 	cin >> num_1; 
 	cout<<"请输入第二个数 "; 
 	cin >> num_2; 
 	cout <<"请输入符号 + - * / %:  ";
	cin >> n ;
	
	
	//定义一个标志符号
	int flag; 
	switch(n){
		// 只接收整型,或者字符型 ,字符型 
		// 字符型 一定要使用 单引号 '' 双引号会被误认为字符串"" 
		case '+':
			total_num=num_1+num_2;
			break;
		case '-':
			if(num_1>=num_2){
				total_num=num_1-num_2;
			}else{
				total_num=num_2-num_1;
			}
			break;
		case '*':
			total_num=num_1*num_2;
			break;
		case '/':
			if(num_2!=0){
				total_num=num_1/num_2;
			}else{
				flag=2; //标志符号 
			}
			break;
		case '%':
			if(num_2!=0){
				total_num=num_1 % num_2;
			}else{
			//cout<<"分母不能为0"<<endl; 
				flag=2; //标志符号 
			}
			break;
			 
		default:
			cout<<"请重新输入正确的符号"<<endl; 
			break; 
	} 
	//根据情况输出结果
	if(flag==1) {
			cout<<"计算结果是: "<< total_num <<endl; 
	}else{
			cout<<"分母不能为0"<<endl; 
	} 

	return 0;
} 

2.4.2 练习案例2:计算折扣

  1. 超市做活动,消费满50元,加5元,送可口可乐,加10元,送大桶水,加30元,送平底锅一个,同时如果是会员打7折,不是会员满50打9折,然后给出相应的提示信息。
    • 请设计此程序。
在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴琼老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值