一、选择语句
(1)if语句
if语句的作用是计算给定的表达式,根据判断结果选择执行相应的语句。
//形式1
if (表达式) 语句1;
//例:
int a=5,b=1,t;
if(a>b) t=a,a=b,b=t;
//形式2
if(表达式) 语句1;
else 语句2;
//例:
int x=5,y=6;
if(x>=y) cout<<x<<endl;
else cout<<y<<endl;
注:①if语句中的子语句既可以是一个简单语句,也可以是复合语句或控制语句,但必须是“一个语句”的语法形式。
if(a>b)
x=a+b;
y=a-b;
else
x=a-b;
y=a+b;
//错误,无大括号if语句只控制其下一句,即当a>b时x=a+b,而y=a-b不论条件是否成立,都会执行
// else同理。
//正确代码
if(a>b)
{
x=a+b;
y=a-b;}
else
{
x=a-b;
y=a+b;}
//控制下面语句块
②if语句的表达式一般为关系、逻辑运算表达式,但也可以为其他表达式。
a=5,b=2;
if(a) x=a*10;
//if(a)等价于a!=0
例:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double a,b,c;
cin>>a>>b>>c; //输入三遍长
if(a+b>c && a+c>b && b+c>a) //判断能否构成三角形
{
double t,s;
t=(a+b+c)/2.0;
s=sqrt(t*(t-a)*(t-b)*(t-c)); //计算面积
cout<<"area="<<s<<endl;
}
else
cout<<"error\n";
return 0;
}
(2)switch语句
switch语句作用是计算给定表达式,根据结果选择从那个分支入口执行。
①形式
switch(表达式)
{
case 常量表达式1 : .....语句序列1
case 常量表达式2 : .....语句序列2
case 常量表达式3 : .....语句序列3
.
.
.
case 常量表达式n : .....语句序列n
default : .....默认语句序列 //其它情况
}
②switch流程图
(*********)
注:①switch语句中case分支的语句序列可以是一个语句,也可以是任意多的语句序列,也可以没有语句。
②如果case后没有语句,则一旦执行到这个case分支,什么也不做,继续往下执行。
例:
switch(n){
case 7 : cout<<"setp5\n";
case 6 :
case 5 : cout<<"setp4\n";
case 4 : {
cout<<"setp3 "<<"setp2\n"; }
case 2 : cout<<"setp1\n";
default : cout<<"setp10\n";
}
③switch语法中各各case分支和defalt分支的出现次序在语法上没有规定,但次序不同,可能会影响结果。
//1
switch(n){
case 1 : cout<<"1\t";
case 2 : cout<<"2\t";
default cout<<"0\t";
}
//输入1 输出 1 2 0
//输入2 输出 2 0
//输入其他 3 输出 0
//2
switch(n){
default cout<<"0\t";
case 1 : cout<<"1\t";
case 2 : cout<<"2\t";
}
//输入3 输出 0 1 2
//输入1 输出 1 2
//输入2 输出 2
④switch语法中default分支是可选的,若没有default分支且没有任何case标号相等时,switch语句将什么也不做,直接执行后续语句。
⑤switch语句的分支表达式可以是C++语言的任意表达式,但其值必须是整数(含字符类型)、枚举类型。
⑥switch语法中的case后表达式必须是常量表达式且互不相同。
case c>=a && c<=b //错误
⑦在switch语句中任意位置上,只要执行break语句,就要结束switch语句的执行,转到后续语句。
break;
switch(表达式)
{
case 常量表达式1 : .....语句序列1 break;
case 常量表达式2 : .....语句序列2 break;
case 常量表达式3 : .....语句序列3 break;
.
.
.
case 常量表达式n : .....语句序列n break;
default : .....默认语句序列 //其它情况
}
含break语句的switch语句流程图:
例:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int g;
cin>>g;
switch(g){
case 'A': cout<<"85~100\n"; break;
case 'B': cout<<"70~84\n"; break;
case 'C': cout<<"60~69\n"; break;
case 'D': cout<<"<60\n"; break;
default : cout<<"error\n";
}
return 0;
}
二、选择语句的嵌套
(1)if语句的嵌套
//形式1
if(表达式1) 语句序列1;
else if(表达式2) 语句序列2;
else if(表达式3) 语句序列3;
else if(表达式4) 语句序列4;
......
else if(表达式n) 语句序列n;
else 语句序列m;
流程图:
例:
#include<iostream>
using namespace std;
int main()
{
int score;
cin>>score;
if(score>=90) cout<<"A\n";
else if(score>=80) cout<<"B\n";
else if(score>=70) cout<<"C\n";
else if(score>=60) cput<<"D\n";
else cout<<"E\n";
retuen 0;
}
//形式2
if(表达式1)
{
if(表达式2)
语句1;
else
语句2;
}
else
{
if(表达式3)
语句3;
else
语句4;
}
流程图:
注:else语句总和距离自己最近的上面的if相匹配。
例:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double x,y;
cin>>X;
if(x<-3.0) y=x-1.0;
else
if(x>=-3.0 && x<=3.0)
y=sqrt(9.0-x*x);
else
y=x+1;
cout<<"x= "<<x<<" ,y= "<<y<<endl;
return 0;
}
(2)switch语句的嵌套
int a=15,b=21,m=0;
switch(a%3){
case 0 : m++;
switch(b%2) {
default : m++;
case 0 : m++; break;
}
case 1 : m++;
}
例:
#include<iostream>
using namespace std;
int main()
{
int y,m,d,Days;
cin>>y>>m>>d; //输入今天日期
switch(m){ //计算每月天数
case 2 : Days=28;
if(y%4==0&&y%100!=0||(y%400==0))
Days++;
break;
case 4:
case 6:
case 9:
case 11: Days=30;
break;
default : Days=31;
}
d++;
if(d>Days) d=1,m++; //判断月末
if(m>12) m=1,y++; //判断年末
cout<<"明天是:"<<y<<"-"<<m<<"-"<<d<<endl; //输出第二天日期
return 0;
}