课程介绍
Switch语句介绍+讲解
- 当出现分支比较多的时候,虽然可以用嵌套if语句来解决,但是程序结构会显得凌乱。
C++提供了一种switch开关语句
Switch语句运行过程
- 表达式只被计算一次,结果为整数类型。若表达式结果不是整型,系统会强制转换为整型
- 表达式的值将和每一个case后面的常量表达式比较。如果常量表达式的值不是整型,系统也会强制转换为整型
- 如果相等,当前case下的语句块将被执行。
- break可以省略,但实际使用switch语句时,通常要求当执行完某个case后,就结束
Switch注意事项:
- 每个case语句后的常量表达式的值不能相同,否则报错.
- 每个case或者default后,可以包含多条语句,不需要使用{}.
- case顺序可以变动,不会影响执行结果.
- default可以省略,default后面的语句末尾可以不写break.
Switch代码演示:
switch (表达式)
{
case 常量表达式1
语句块1
break;
case 常量表达式2
语句块2
break;
.......
case 常量表达式 n;
语句块 n;
break;
default
语句块 n+1
}
Switch代码练习:
实例一
请听题:根据从键盘上输入的表示星期几的数字,对应输出它的英文名称:
1 – Monday
2 – Tuesday
3 – Wednesday
4 – Thursday
5 – Friday
6 – Saturaday
7 – Sunday
#include <bits/stdc++.h>
using namespace std;
int day;
cin >> day;
int main(){
switch(day) {
case 1:cout<<"Monday";break;
case 2:cout<<"Tuesday";break;
case 3:cout<<"Wednesday";break;
case 4:cout<<"Thursday";break;
case 5:cout<<"Friday";break;
case 6:cout<<"Saturday";break;
case 7:cout<<"Sunday";break;
default:cout<<"输错了";
}
return 0;
}
实例二
一个最简单的计算器支持+、-、*、/四种运算。输入只有一行,两个参加运算的数和一个(+、-、*、/)。输出运算表达式的结果。考虑下面两种情况。
(1)如果出现除数为0的情况,则输出:Divided by zero!
(2)如果出现无效的操作符(即不为+、-、*、/ 之一),则输出:Invalid operator!
3 2 1 答案出示
#include<iostream>
using namespace std;
int main(){
int a,b;
char c;
cin>>a>>b>>c;
switch (c)
{
case '+':cout<<a+b<<endl;break;
case '-':cout<<a-b<<endl;break;
case '*':cout<<a*b<<endl;break;
case '/':
if(b == 0){cout<<"Divided by zero!\n";}
else{cout<<a/b<<endl;break;}
default:cout<<"Invalid operator!"<<endl;break;
}
return 0;
}
实例三
期末来临了,班长小Q决定将剩余班费x元,用于购买若干枝钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价分别为6元、5元和4元。小Q想买尽可能多的笔去鼓励尽可能多的同学。同时他又不想有剩余钱。请你编一程序,帮小Q制订出一种买笔的方案
【输入样例】:90
【输出样例】:1 0 21
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b,c,money, change;
scanf("%d", &money);
c = money/4;
change = money%4;
switch (change)
{
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;
}
printf("%d %d %d\n", a,b,c);
return 0;
}
实例四
1949年10月1日是星期六,现在输入一个年、月、日,问这一天是星期几?输入三个整数,分别代表年(1950-2023),月(1-12),日(1-当月最大天数)例:2022 11 17 ===》星期四
实例四解释:
我们要求输入的日期是星期几,只需要求我们输入的
日期和1949年10月1日相差多少天。
如果相差0天,则“星期六”
如果相差1天,则“星期日”
如果相差2天,则“星期一”
如果相差3天,则“星期二”
如果相差4天,则“星期三”
如果相差5天,则“星期四”
如果相差6天,则“星期五”
代码出示
#include<iostream>
using namespace std;
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int leapyear1 = 1948/4-1948/100+1948/400;
int sum1 = 1948*365+leapyear1+31*5+28+30*3+1;
int leapyear2 = (a-1)/4-(a-1)/100+(a-1)/400;
int isLeap = 0;
int sum2 = (a-1)*365+leapyear2+c;
int gap;
if ((a%4==0 && a%100!=0) || a%400==0){isLeap = 1;}
switch (b)
{
case 1:gap = sum2-sum1;break;
case 2:gap = sum2-sum1+31;break;
case 3:gap = sum2-sum1+59+isLeap;break;
case 4:gap = sum2-sum1+90+isLeap;break;
case 5:gap = sum2-sum1+120+isLeap;break;
case 6:gap = sum2-sum1+151+isLeap;break;
case 7:gap = sum2-sum1+181+isLeap;break;
case 8:gap = sum2-sum1+212+isLeap;break;
case 9:gap = sum2-sum1+243+isLeap;break;
case 10:gap = sum2-sum1+273+isLeap;break;
case 11:gap = sum2-sum1+304+isLeap;break;
case 12:gap = sum2-sum1+334+isLeap;break;
default:
break;
}
int diff = gap%7;
switch (diff)
{
case 0:printf("星期六");break;
case 1:printf("星期日");break;
case 2:printf("星期一");break;
case 3:printf("星期二");break;
case 4:printf("星期三");break;
case 5:printf("星期四");break;
case 6:printf("星期五");break;
}
return 0;
}
break有无情况
break无情况代码
#include<bits/stdc++.h>
using namespace std;
int main(){
cout <<"请输入A-C之间的路口名";
char roadName;
cin>>roadName;
switch(roadName){ //表达式
case 'A’: //当表达式与case相匹配时,程序从该分支开始执行
cout <<"A路口";
case 'B’:
cout <<"B路口";
case 'C’:
cout <<"C路口";
default:
cout <<"没有你要走的路口"; //当表达式的值与case值都不匹配时,程序进入default分支行
}
return 0;
}
break有情况代码
#include<bits/stdc++.h>
using namespace std;
int main(){
cout <<"请输入A-C之间的路口名";
char roadName;
cin>>roadName;
switch(roadName){
case 'A’:
cout <<"A路口";break;
case 'B’:
cout <<"B路口";break;
case 'C’:
cout <<"C路口"; break;
default:
cout <<"没有你要走的路口";
}
return 0;
}
取地址运算符
介绍:
取地址运算符
当一个变量被定义并且被赋予值的时候,4个基本属性就必须存在了:
1. 变量名
2. 变量类型
3. 变量的值
4. 变量的存储地址
例如:
int a = 20;
引用 [初级]
- 引用(reference)变量是一个别名。它是某个已经存在的变量的另外一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称(别名)或者变量名称(原名)来指向变量。引用类似于人的绰号,使用绰号和本名都能表示一个人。
- 因为引用和原变量都指向同一个地址中的数据,所以无论通过引用还是原变量都可以去修这个数据。
#include<iostream>
using namespace std;
int main(){
int a = 20;
int& b = a;
b = 30;
cout<<a<<endl;// 输出结果30
cout<<b<<endl;// 输出结果30
return 0;
}
课堂总结
- switch语句:也是一种分枝结构,用来解决多分枝问题,让程序看起来有条理(容易debug)
- 取地址运算符:地址运算符/求地址运算符/取地址符等,用来获取变量存储的地址。
- 引用:为变量起一个别名。