选择结构
选择结构一般用if语句表示。if语句是用来判定所给定的条件是否满足,根据判定的结果是真或假来决定执行给出的两种操作之一。
if语句的形式
if语句的一般形式为:
if(表达式)语句1
[else 语句2]
其中方括号一项内容是可选的,可以有,也可以没有。
语句1和语句2可以是简单的语句,也可以是复合语句,也可以是一个内嵌的if语句。
if语句一般可派生出三种形式
1、if(表达式)语句
if (x > y) cout << x << endl;
2、if(表达式)语句1 else 语句2
if (x > y) cout << x;
else cout << y;
3、if(表达式1)语句1 ... else if(表达式m)语句m else 语句n
if (n > 500) s = 0.15;
else if (n > 300) s = 0.1;
else if (n > 100) s = 0.75;
else if (n > 50) s = 0.05;
else s = 0;
以上三种形式的if语句都是由一个入口进来,经过对表达式的判断,分别执行相应的语句,最后归到一个共同的出口,这种形式的程序结构称为选择结构。在C++中,if语句是实现选择结构主要的语句。
在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。
if (a + b > c && b + c > a && a + c > b)
{ //复合语句开始
s = 0.5 * (a + b + c);
area = sqrt(s * (s - a) * (s - b) * (s - c));
cout << area;
} //复合语句结束
else cout << "it is not a trilateral"; //if语句结束
在复合语句中可以定义变量,此变量只在复合语句内生效。
如:求三角形面积
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a, b, c;
cout << "请输入三角形三条边的值:";
cin >> a >> b >> c;
if (a + b > c && b + c > a && a + c > b)
{
double s, area;
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c));
cout << setiosflags(ios::fixed) << setprecision(4);
cout << "三角形面积为:" << area << endl;
}
else
cout << "这不能构成一个三角形!" << endl;
return 0;
}
结果如下:
if语句的嵌套
在if语句中又包含一个或多个if语句,成为if语句的嵌套。
一般形式为
if()
if()语句1
else 语句2
else
if()语句3
else 语句4
注意if和else的配对关系,else总是与它上面最近的且未配对的if配对。
如果if和else的数目不一致,为实现正常算法,可以加花括号来确定配对关系。
if()
{ if()语句 }
else 语句2
条件运算符
在if语句中,当被判别的表达式的值为真或为假时,都执行一个赋值语句且给同一个变量赋值时,可以用简单的条件运算符来处理。
如有以下if语句
if (a > b) max = a;
else max = b;
可以用条件运算符(?:)来处理
max = (a > b) ? a : b;
其中(a>b)? a:b是一个条件表达式。如果(a>b)为真,则条件表达式的值就取?后面的值,否则,条件表达式的值就是:后面的值。
条件运算符要求有3个操作对象,成为三目(元)运算符,它是C++中唯一的一个三目运算符。
其表达式的一般形式为 表达式1 ? 表达式2 : 表达式3
条件运算符的执行顺序是:先求解表达式1,若为非0(真),则求解表达式2,此时表达式2的值就是整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
如:输入一个字符,判断它是否为大写字母,如果是,将它转换为小写字母,如果不是,则不转换。
#include <iostream>
using namespace std;
int main()
{
char character;
cout << "请输入一个字符:";
cin >> character;
character = (character >= 'A' && character <= 'Z') ? (character + 32) : character;
cout << "输出字符为:" << character << endl;
return 0;
}
结果如下:
多分支选择结构
switch语句是多分支选择语句,用来实现多分支选择结构。
一般形式为
switch(表达式)
{
case 常量表达式1:语句1
case 常量表达式2:语句2
·
·
·
case 常量表达式n:语句n
default :语句n + 1
}
这些都可以用嵌套的if语句来处理,但如果分支较多,则嵌套的if语句层数多,程序就会冗长,而且可读性降低。
使用switch实现:按照考试的等级打印出百分制分数段。
switch(grade)
{
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";
}
说明:
1、switch后面括号内的表达式,可以是数值类型数据。
2、当switch表达式的值与某一个case子句中的常量表达式的值相匹配时,执行此case子句中的内嵌语句,若所有case子句中的常量表达式的值都不能与switch表达式的值相匹配,就执行default子句的内嵌语句。
3、每一个case表达式的值必须互不相同,否则就会出现互相矛盾的现象。
4、各个case和default的出现顺序不影响执行结果。
5、执行完一个case子句后,流程控制移动到下一个case子句继续执行。为避免匹配子句后,此子句后续所有子句都执行,在执行一个case子句后,加上一个break语句,使流程跳出switch结构。
6、多个case可以共用一组执行语句。
case 1:
case 2:
case 3:cout<<"输出数据A\n";break; //当switch括号中表达式与1、2、3相匹配时,都会输出“输出数据A”字样。
实例
1、编写程序,判断某一年是否为闰年
①使用if...else语句
#include <iostream>
using namespace std;
int main()
{
int year;
cout << "请输入年份:";
cin >> year;
if (year % 4 != 0)
cout << year << "不是闰年!";
else if (year % 100 != 0)
cout << year << "是闰年!";
else if (year % 400 != 0)
cout << year << "不是闰年!";
else
cout << year << "是闰年!";
return 0;
}
结果如下:
②使用逻辑表达式
#include <iostream>
using namespace std;
int main()
{
int year;
cout << "请输入年份:";
cin >> year;
if((year % 4==0 && year %100 != 0)||(year % 400 == 0))
cout << year << "是闰年!";
else
cout << year << "不是闰年!";
return 0;
}
结果如下:
2、运输公司运输费用计算,基础每公里费用为p,路程s与折扣d的关系如下,求总费用。
s < 250 没有折扣
250≤s < 500 2%折扣
500≤s < 1000 5%折扣
1000≤s < 2000 8%折扣
2000≤s < 3000 10%折扣
3000≤s 15%折扣
#include <iostream>
using namespace std;
int main()
{
int s, t;
float p, d, f;
cout << "请输入每公里费用p,和总路程s:";
cin >> p >> s;
if (s < 250) t = 1;
else if (s >= 250 && s < 500) t = 2;
else if (s >= 500 && s < 1000) t = 3;
else if (s >= 1000 && s < 2000) t = 4;
else if (s >= 2000 && s < 3000) t = 5;
else t = 6;
switch (t)
{
case 1:d = 0; break;
case 2:d = 0.02; break;
case 3:d = 0.05; break;
case 4:d = 0.08; break;
case 5:d = 0.10; break;
case 6:d = 0.15; break;
}
f = s * p * (1 - d);
cout << "总费用为:" << f<<endl;
return 0;
}
结果如下: