C++编程学习(第13天)

选择结构

选择结构一般用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;
}

 结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武当豆豆

为国家GDP快速增长做贡献

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值