第七课 选择结构-switch
目 标
01.掌握 switch 语句的格式和含义。
02、学会应用 switch 语句解决一些实际问题。
多分支语句—switch
在一些实际问题中,分类情况特别多,用if语句嵌套实现起来,层数太多,容易出错。为此,C++提供了一种多分支语句——switch。
switch 语句的一般格式为:
switch (表达式){
case 常量表达式1: 语句组1; [break;]
case 常量表达式2: 语句组2; [break;]
…
case 常量表达式n: 语句组n; [break;]
[default: 语句组n+1]
}
说明
该语句中可以使用一次或多次case标号,但只能使用一次default标号,或者省略整个default部分;多个case标号也允许使用在同一个语句序列的前面;每个语句标号有保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为字面常量,如常数或字符。
执行过程
switch语句执行过程分为以下3步描述。
(1)计算出switch后面圆括号内表达式的值,假定为M,若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值。
(2)依次计算出每个case后常量表达式的值,假定它们为M1、M2、…,同样若它们的值不是整型,则自动转换为整型。
(3)让M依次同M1、M2、…进行比较,一旦遇到M与某个值相等,则就从对应标号的语句开始执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。
(4) 在实际使用switch语句时,通常要求当执行完某个case后的一组语句序列后,就结束整个语句的执行,而不让它继续执行下一个case语句后面的语句序列,为此,可通过使用break语句来实现。该语句只有保留字break,而没有其它任何成分。它是一条跳转语句,在switch中执行到它时,将结束该switch语句,系统接着向下执行其它语句。
例1、阅读下面程序,思考输入“-”,则输出什么。
#include
using namespace std;
int main(){
char symbol;
cin >> symbol;
switch(symbol){
case ‘ + ’ :cout << “ + ” << endl; break;
case ‘ - ’ :cout << “ - ” << endl; break;
case ‘ * ’ :cout << “ * ” << endl; break;
case ‘ / ’ :cout << “ / ” << endl; break;
default:cout << “ Input Invalid! ” ;
}
return 0;
}
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
例2、阅读程序,思考分别输入 “A”“B”“C”,则程序输出什么。
#include
using namespace std;
int main(){
char ch;
cin >> ch;
switch(ch){
case ‘ A ’ :
case ‘ B ’ :
case ‘ C ’ :cout << “ Pass ” << endl; break;
}
}
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
例3:根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。
问题分析:用1对应Monday ,用2对应Tuesday ,用3对应Wednesday, 用4对应Thurday,用5对应 Friday ,用6对应Saturday,用7对应Sunday。
算法设计:用switch语句建立数字与英文单词的对应关系比较容易实现。
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
参考程序:
#include
using namespace std;
int main()
{
int weekday;
cin>>weekday;
switch(weekday)
{
case 1:cout<<"Monday"<case 2: cout<<"Tuesday"<case 3: cout<<"Wednesday"<case 4: cout<<"Thursday"<case 5: cout<<"Friday"<case 6: cout<<"Saturday"<case 7: cout<<"Sunday"<default:cout<<"input error!";
}
return 0;
}
#include
using namespace std;
int main()
{
int y,m,d;
scanf("%d%d",&y,&m);
switch(m)
{
case 4:
case 6:
case 9:
case 11:d=30;break;
case 2:if(y%4==0&&y%100!=0||y%400==0) d=29;
else d=28; break;
default:d=31;
}
printf("%d\n",d);
return 0;}
分析:因为先输出小数,所以判断时小数在前,大数在后。
#include
int main() {
int n;
scanf("%d",&n);
if(n%3==0) printf("3 ");
if(n%5==0) printf("5 ");
if(n%7==0) printf("7 ");
if(n%3!=0&&n%5!=0&&n%7!=0) printf("n");
return 0;
}
作业
训练:简单计算器
一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而:
1. 如果出现除数为0的情况,则输出:Divided by zero!
2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
输入:
输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。
输出:
输出只有一行,一个整数,为运算结果。然而:
1.如果出现除数为0的情况,则输出:Divided by zero!
2.如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
样例输入:
1 2 +
样例输出
3