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

打印 上一主题 下一主题

主题 739|帖子 739|积分 2217

说明

看《C++ Primer Plus》时整理的学习笔记,部分内容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,张海龙 袁国忠译,人民邮电出版社。只做学习记录用途。

目录

本章介绍分支语句条件运算符逻辑运算符
6.1 if 语句

6.1.1 if 语句

if语句的语法和while相似:
  1. if (test-expression)
  2. {
  3.     statements;
  4. }
复制代码
和循环测试条件一样,if测试条件也将被强制转换为bool值,如果test-expression(测试条件)为true,则程序将执行statements(语句),如果测试条件为false,则程序将跳过语句。
通常将测试条件variable == value写为反转形式value == variable,用以捕获将相等运算符 == 误写为赋值运算符 = 的错误,例如将 x == 3写为 3 == x。
6.1.2 if else 语句

if语句让程序决定是否执行特定的语句或语句块,而if else语句则让程序决定执行两条语句或语句块中的哪一条,if else语句的通用格式如下:
  1. if (test-expression)
  2. {
  3.     statements1;
  4. }
  5. else
  6. {
  7.     statements2;
  8. }
复制代码
如果测试条件为true或非零,则程序将执行statements1,跳过statements2;如果测试条件为false或零,则程序将跳过statements1,执行statements2。
6.1.3 多层 if else 结构

将一个if else包含于另一个if else的else语句中,可得到多层条件分支语句,通常将其写为如下易于阅读的形式:
  1. if (test-expression1)
  2. {
  3.     statements1;
  4. }
  5. else if (test-expression2)
  6. {
  7.     statements2;
  8. }
  9. else
  10. {
  11.     statements3;
  12. }
复制代码
如果测试条件test-expression1为true或非零,则程序将执行statements1,跳过statements2与statements3;如果测试条件test-expression1为false或零且测试条件test-expression2为true或非零,则程序将执行statements2,跳过statements1与statements3;如果测试条件test-expression1与test-expression2都为false或零,则程序将跳过statements1与statements2,执行statements3
6.2 逻辑运算符

C++ 提供了三种逻辑运算符,分别是逻辑 OR||)、逻辑 AND&&)和逻辑 NOT!)。
6.2.1 逻辑 OR 运算符:||

C++ 可以采用逻辑 OR 运算符(||)将两个表达式组合在一起,如果原来表达式中的任何一个或全部都为true(或非零),则得到的表达式的值为true,否则,表达式的值为false。C++ 规定,||运算符是个顺序点,其左边的子表达式优先于右边的子表达式,如果左侧的表达式为true,则 C++ 不会去判定右侧的表达式。expr1 || expr2的值如下表所示:
expr1 == trueexpr1 == falseexpr2 == truetruetrueexpr2 == falsetruefalse6.2.2 逻辑 AND 运算符:&&

C++ 采用逻辑 AND 运算符(&&)将两个表达式组合在一起,当且仅当原来的两个表达式都为true(或非零)时,则得到的表达式的值为true,否则,表达式的值为false。&&运算符是个也是个顺序点,其左边的子表达式优先于右边的子表达式,如果左侧的表达式为false,则 C++ 不会去判定右侧的表达式。expr1 && expr2的值如下表所示:
expr1 == trueexpr1 == falseexpr2 == truetruefalseexpr2 == falsefalsefalse逻辑 AND 运算符(&&)通常用于设置取值范围,例如:age >= 35 && age < 50。
6.2.3 逻辑 NOT 运算符:!

逻辑 NOT 运算符(!)将它后面的表达式的真值取反。!expr的值如下表所示:
expr == trueexpr == falsefalsetrue6.2.4 逻辑运算符的优先级以及另一种表示方式

C++ 逻辑 OR 和逻辑 AND 运算符的优先级都低于关系运算符,但逻辑 NOT 运算符的优先级高于所有关系运算符和算术运算符,逻辑 AND 运算符的优先级高于逻辑 OR 运算符。
  1. //逻辑OR优先级低于关系运算符,以下两种方式等价
  2. x > 5 || x < -5
  3. (x > 5) || (x < -5)
  4. //逻辑AND优先级低于关系运算符,以下两种方式等价
  5. x > 5 && x < 10
  6. (x > 5) && (x < 10)
  7.    
  8. //逻辑NOT优先级高于所有关系运算符和算术运算符,以下两种方式等价
  9. !x > 5                //值总为false
  10. (!x) > 5
  11.    
  12. //逻辑AND优先级高于逻辑OR,以下两种方式等价
  13. age > 30 && age < 45 || weight > 300
  14. (age > 30 && age < 45) || (weight > 300)
复制代码
并不是所有的键盘都提供了用作逻辑运算符的符号,因此 C++ 标准提供了另一种表示方式(C++ 保留字),如下表所示。当 C 语言程序包含头文件 iso646.h后,也可以使用对应逻辑运算符的另一种表示方式。
运算符另一种表示方式&&and!not||or6.3 字符函数库 cctype

C++ 从 C 语言继承了一个与字符相关的、非常方便的函数库cctype,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作。例如,测试字符ch是否是字母字符有以下两种方式,但显然第二种方式更简洁:
  1. //方式一:使用关系运算符以及逻辑运算符
  2. if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
  3. //方式二:使用cctype库中的isalpha()函数
  4. if (isalpha(ch))
复制代码
条件表达式可以嵌套使用,例如expression2或expression3为另一个条件表达式。
6.5 switch 语句

相比于if else语句,C++ 的switch语句更适合多选择分支的结构。
  1. //条件运算符写成的条件表达式
  2. expression1 ? expression2 : expression3
复制代码
执行到switch语句时,程序将跳到使用integer-expression值标记的那一行。因此,integer-expression必须是一个结果为整数值的表达式,另外,每个标签都必须是整数常量表达式。最常见的标签是int或char常量,也可以是枚举量。如果integer-expression不与任何标签匹配,则程序将跳到标签为default的那一行。default标签是可选的,如果其被省略,而又没有匹配的标签,则程序将跳出switch语句,执行switch语句后面的部分。
注意:程序跳到switch中特定代码行后,将依次执行之后的所有语句,包括其后所有标签对应的语句,除非有明确的其他指示(比如使用break跳出switch)。
6.6 break 和 continue 语句

break和continue语句都使程序能够跳过部分代码。可以在switch语句或任何循环中使用break语句,使用break语句后,程序将跳出switch语句或循环,如果break语句在多层循环的内部,则break将跳出包含它且离他最近的那一层循环。continue语句用于循环中,可以让程序跳过当前循环体中余下的代码,并开始新一轮循环。
  1. //条件表达式应用实例:令c等于a,b中的最大值
  2. int c = a > b ? a : b;
复制代码
和 C 语言一样,C++ 也有 goto语句,但应尽量不使用使用goto语句。下面的语句将跳到使用paris:作为标签的位置:
[code]//运行到goto时直接跳到指定标签处char ch;cin >> ch;if (ch == 'P')    goto paris;statements;paris: cout  value;while (inFile.good()){    sum += value;    inFile >> value;}//输出结果cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表