第六章——分支语句和逻辑运算符

设计智能程序的一个关键是使程序具有决策能力。上一章介绍了一种决策方式——循环,在循环中程序决定是否继续循环。本章我们来研究一下如何使用分支语句在可选择的操作中做出决定

if语句

当C++ 程序必须决定是否执行某个操作时,通常使用if语句来实现选择。if有两种格式:if和if else

if(test-condition)
    statement

如果(test-condition)为true,则程序执行statement,后者既可以是一条语句也可以是一个语句块;如果(test-condition)为false,则程序将跳过该语句。

通常情况下,测试条件都是关系表达式,例如那些用来控制循环的表达式

假设希望计算输入字符中的空格总数和总字符数(用英文句号来确定句子的结尾)

#include<iostream>
using namespace std;
int main()
{
	char ch;
	int space = 0;
	int total = 0;
	cin.get(ch);
	while (ch != '.')
	{
		if (ch == ' ')
			++space;
		++total;
		cin.get(ch);
	}
	cout << space << " spaces, " << total << " characters total in setence" << endl;
	return 0;
}

 

 if else语句

上面提到的if语句让程序决定是否执行特定的语句或语句块,而if else语句则让程序决定执行两条语句或语句块中的哪一条(类似于你选择中午吃米饭还是面条)

if(test-condition)
    statement1
else
    statement2

如果测试条件为true或非零,则程序将执行statement1,跳过statement2;相反如果测试条件为false或0,则程序将跳过statement1,执行statement2。每条语句都可以是一条语句,也可以是大括号括起来的语句块。

 if else if else结构

和我们的现实生活一样,计算机程序也可能提供两个以上的选择,遂可以将if else语句进行扩展,也就是嵌套if else语句,在一个if else 语句里面再加入一个if else语句

逻辑表达式

  •  逻辑OR运算符:||
  • 逻辑AND运算符:&&
  • 逻辑NOT运算符:!

逻辑OR 

当两个条件中有一个或全部满足某个要求时,可以用or来说明这种情况。

C++会采用逻辑OR运算符(||)将两个表达式组合在一起。如果原来表达式中的任何一个或全部都为true(或非0),则得到表达式的值为true,否则为false。 

同时C++还规定,||运算符是个 sequence point。也就是先判定左侧的值,再对右侧的值进行判定

 逻辑AND

 将两个表达式组合在一起。仅当两个表达式的值都为true时,得到的表达式的值才能为true

 逻辑NOT

!运算符将它后面的表达式的真值取反。也就是说,如果expression为true,则!expression为false,反之亦然。 

字符函数库

C++ 从C语言继承了一个与字符相关的非常方便的函数包。它可以简化一些工作——确定字符串是否是大写字母、数字、标点符号等工作,这些函数的原型是在cctype种定义的。

 ?:运算符

C++有一个常被用来代替if else语句的运算符——就是我们将要学习的(?:),它是C++中唯一一个需要3个操作数的运算符,通用格式如下:

expression1 ? expression2 : expression3

如果expression1为true,则整个表达式的值为expression2的值;否则,整个表达式的值为expression3的值

x = 5 > 3 ? 10 : 12  //因为5>3为true,故x的值为10
y = 3==9 ? 25 :18    //因为3==9为false,故y的值为18

 与if else 语句相比,条件运算符更简洁

switch语句

假设程序要选择的条件选项很多,可以通过嵌套if else 语句来处理,但是C++的switch语句能够更容易地从大型列表中进行选择。下面是switch语句的通用格式:

switch(integer-expression)
{
    case lable1: statement(s)
    case lable2: statement(s)
    ...
    default:statement(s)
}

C++的switch语句就像指路牌,告诉计算机应执行哪行代码。执行到switch语句时,程序将跳到使用integer-expression的值标记的那一行 。

integer-expression必须是一个结果为整数的表达式。另外每个标签都必须是整型常量表达式。最常见的标签是int 或char 常量。如果integer-expression不与任何标签匹配,则程序将跳到标签为default的那一行。(default标签是可选的,如果省略没写,而又没有匹配的标签,则程序将跳到switch后面的语句处执行)

这里需要注意的是:

C++中的case标签只是行标签,而不是选项之间的界线。也就是说,程序跳到switch中特定代码行后,将依次执行之后的所有语句,除非有明确的其他指示。程序不会在执行到下一个case处自动停止,要让程序执行完一组特定语句后停止,必须使用break语句

 

#include<iostream>
using namespace std;
void showmenu()
{
	cout << "Please enter 1,2,3,4 or 5:\n"
		"1)alarm           2)report\n"
		"3)abili           4)comfort\n"
		"5)quit\n";
}
void report()
{
	cout << "It's been an excellent week for business.\n"
		"Sales are up 120%.Expenses are down 35%.\n";
}
void comfort()
{
	cout << "Your employees think you are the finest CEO\n"
		"in the industry.";
}
int main()
{
	showmenu();
	int choice;
	cin >> choice;
	while (choice != 5)
	{
		switch (choice)
		{
		case 1:cout << "\a\n";
			break;
		case 2:report();
			break;
		case 3:cout << "The boss was in all day.\n";
			break;
		case 4:comfort();
			break;
		default:cout << "That's not a choice.\n";
		}
		showmenu();
		cin >> choice;
	}
	cout << "Bye!\n";
	return 0;
}

 

 break和continue语句

break和continue语句都能使程序跳过部分代码。可以在switch语句或任何循环中使用break语句,使程序跳到switch或循环后面的语句处执行。continue语句用于循环中,让程序跳过循环体中余下的代码,并开始新一轮循环(个人理解是,break直接跳出整个循环语句,continue是跳出单次循环,但要继续执行下轮循环)

 

猜你喜欢

转载自blog.csdn.net/yangSHU21/article/details/131621339
今日推荐