第6节 选择结构的程序设计
1.if语句和switch语句
1、if语句
►if语句的作用是计算给定的表达式,根据结果选择执行相应的语句。语句形式有两种:
► ①if形式:
if (表达式) 语句1;
如: if ( a>b ) t=a, a=b, b=t;
►②if-else形式:
if (表达式) 语句1; else 语句2;
如: if ( x>=y ) cout<<x<<endl;
else cout<<y<<endl;
►(1)if语句中的子语句既可以是简单语句,又可以是复合语句或控制语句,但必须是“一个语句”的语法形式
1 if (a>b) //此段程序代码编译有错误
2 x=a+b; y=a-b;
3 else
4 x=a-b; y=a+b;
1 if (a>b) { //此段程序代码正确
2 x=a+b; y=a-b;
3 }
4 else {
5 x=a-b; y=a+b;
6 }
►(2)if语句的表达式一般为关系、逻辑运算表达式,但也可以为其他表达式,但按逻辑值来理解:
a=5,b=2;
if ( a ) x=a*10; //等价于a!=0
【例6.1】计算三角形的面积。
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4 int main()
5 {
6 double a,b,c;
7 cin>>a>>b>>c; //输入三角形三边长
8 //判断三边长是否构成三角形
9 if (a+b>c && a+c>b && b+c>a) {
10 double s,t;
11 t=(a+b+c)/2.0;
12 s=sqrt(t*(t-a)*(t-b)*(t-c)); //Heron公式计算三角形面积
13 cout<<"area="<<s<<endl;
14 }
15 else cout<<"error"<<endl;
16 return 0;
17 }
/*输出结果
3 4 5
area=6
*/
2、switch语句
►switch语句的作用是计算给定的表达式,根据结果选择从哪个分支入口执行,语句形式为:
switch ( 表达式 ) {
case 常量表达式1 : … 语句序列1
case 常量表达式2 : … 语句序列2
┇
case 常量表达式n : … 语句序列n
default : … 默认语句序列
}
►switch语句的使用说明:
►(1)switch语句中case分支的语句序列可以是一个语句,也可以是任意多的语句序列,也可以没有语句;
►(2)如果case后没有语句,则一旦执行到这个case分支,什么也不做,继续往下执行。
1 switch (n) {
2 case 7 : cout<<“step5”<<endl;
3 case 6 :
4 case 5 : cout<<“step4”<<endl;
5 case 4 :
6 {
7 cout<<“step3”<<“step2”<<endl;
8 }
9 case 2 : cout<<“step1”<<endl;
10 default: cout<<“step0”<<endl;
11 }
►(3)switch语法中各个case分支和default分支的出现次序在语法上没有规定,但次序的不同安排会影
响执行结果。
1 //①程序A
2 switch (n) {
3 case 1 : cout<<"1";
4 case 2 : cout<<"2";
5 default: cout<<"0";
6 }
1 //②程序B
2 switch (n) {
3 default: cout<<"0";
4 case 1 : cout<<"1";
5 case 2 : cout<<"2";
6 }
►(4)switch语法中default分支是可选的,若没有default分支且没有任何case标号的值相等时,
switch语句将什么也不做,直接执行后续语句。
►(5)switch语句的分支表达式可以是C++语言的任意表达式,但其值必须是整数(含字符类型)、
枚举类型。
►(6)switch语法中的case后的表达式必须是常量表达式且互不相同,即为整型、字符型、枚举类型的常
量值,但不能包含变量。
►例如:若c是变量,如 :“case c>=‘a’ && c<=‘z’:”的写法是错的。
►(7)在switch语句中任意位置上,只要执行到break语句,就结束switch语句的执行,转到后续语句。
break;
►更常见的switch结构应该如下,它提供了程序多分支选择执行流程。
switch ( 表达式 ) {
case 常量表达式1: … 语句序列1; break;
case 常量表达式2: … 语句序列2; break;
┇
case 常量表达式n: … 语句序列n; break;
default : … 默认语句序列
}
【例6.2】按照考试成绩的等级输出百分制分数段
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4 int main()
5 {
6 int g;
7 cin>>g; //输入成绩等级
8 switch(g)
9 {
10 case 'A':cout<<"85~100\n"; break;
11 case 'B':cout<<"70~84\n"; break;
12 case 'C':cout<<"60~69\n"; break;
13 case 'D':cout<<"<60\n"; break;
14 default: cout<<"error\n";
15 }
16 return 0;
17 }
2.选择结构的嵌套
3、if语句的嵌套
►1. 第一种形式,在else分支上嵌套if语句,语法形式为:
if ( 表达式1 ) 语句1
else if ( 表达式2 ) 语句2
else if ( 表达式3 ) 语句3
......
else if ( 表达式n ) 语句n
else 语句m
【例6.3】编程输出成绩分类。
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 int score;
6 cin>>score;
7 if (score >= 90 ) cout<<"A"<<endl; //90分以上
8 else if (score >= 80 ) cout<<"B"<<endl; //80~89分
9 else if (score >= 70 ) cout<<"C"<<endl; //70~79分
10 else if (score >= 60 ) cout<<"D"<<endl; //60~69分
11 else cout<<"E"<<endl; //60分以下
12 return 0;
13 }
►2. 第二种形式,在if和else分支上嵌套if语句,语法形式为:
if ( 表达式1 )
if ( 表达式2 ) 语句1
else 语句2
else
if ( 表达式3 ) 语句3
else 语句4
►注意:嵌套的if语句可以实现多路分支。在结构上else语句总和距离自己最近的if相匹配。
我们可以通过加“{}”来改变else的层位,从而改变程序的执行流程。
【例6.4】计算分段函数:
x-1 (x<-3 )
y = 9-x2 (-3≤x≤3)
x+1 (x>3 )
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4 int main( )
5 {
6 double x, y;
7 cin>>x;
8 if(x<-3.0) y=x-1.0;
9 else
10 if(x>= -3.0 && x<=3.0)
11 y=sqrt(9.0-x*x);
12 else
13 y=x+1;
14 cout<<"x="<<x<<",y="<<y<<endl;
15 return 0;
16 }
4、switch语句的嵌套
►switch语句是可以嵌套的,如:
1 int a=15, b=21, m=0;
2 switch(a%3) {
3 case 0: m++;
4 switch(b%2) {
5 default: m++;
6 case 0 : m++; break;
7 }
8 case 1: m++;
9 }
【例6.5】输入某天的日期,输出第二天的日期。
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 int y,m,d,Days;
6 cin>>y>>m>>d; //输入日期
7 switch(m) { //计算每月的天数
8 case 2 :
9 Days=28;
10 if((y%4==0&&y%100!=0)|| (y%400==0)) Days++; //闰年天数加1
11 break;
12 case 4 : case 6 :
13 case 9 : case 11 : Days=30;break;
14 default: Days=31; //其余月份为31天
15 }
16 d++;
17 if (d>Days) d=1,m++; //判断月末
18 if (m>12) m=1,y++; //判断年末
19 cout<<y<<“-”<<m<<“-”<<d<<endl; //输出第二天的日期
20 return 0;
21 }
标签:语句,case,int,else,选择,switch,程序设计,表达式,结构
From: https://blog.csdn.net/m0_69088645/article/details/140154171