1、分支语句 if 和 else if
设计产能程序的一个关键是使程序具有决策能力。当 c++ 程序必须决定是否执行某个操作时,通常使用 if 语句来实现选择。if 有两种格式: if 和 if else。
- if 语句组成(一层条件):
if (test-condition)
statement
如果 test-condition 为 TRUE,则程序将执行 statement,后者既可以是一条语句,也可以是语句块。如果测试程序为 FALSE,则程序将跳过语句。
- if else 语句构成(两层条件):
if (test-conditon)
statement1
else
statement2
- if else if else 语句(三层或多层条件):
if (test-condition)
statement1
else if (test-condition)
statement2
...
else
statementn
分支结构与循环结构套用程序:
该程序让用户猜测目标数字是多少,使用分支结构帮助用户判断是应该继续增大还是减小,使用循环结构帮助用户重复猜测:
#include <iostream>
const int num = 27;
int main()
{
using namespace std;
int n;
cout << "Enter a number in the range 1-100 to find "
<< "my favorite number: ";
do
{
cin >> n;
if (n < num)
cout << "Too low -- guess again: ";
else if (n > num)
cout << "Too high --guess again: ";
else
cout << "Yes, " << num << " is right." << endl;
} while (n != num);
return 0;
}
2、逻辑表达式
逻辑表达式有逻辑 OR 运算符(||)、逻辑 AND 运算符(&&)和逻辑 NOT 运算符(!)。
2.1 逻辑 OR 运算符
如果原来表达式中的任何一个或全部为 TRUE,则得到的表达式的值为 TRUE,否则,表达式的值我 FALSE。如下:
5 == 5 || 5 == 9 // true
5 > 3 || 5 > 10 // true
5 > 8 || 5 < 10 // true
5 > 8 || 5 < 2 // false
注意:逻辑运算符的优先级低于关系运算符,因此不需要给关系运算加括号。
另外,c++ 规定,|| 运算符是一个顺序点,也就是说,计算机先修改左侧的值,再对右边的值进行判定,例如:
i++ > 6 || i == 7
假设原来 i 的值为10,则在对 i 和 7 进行比较时,i 的值已经变成 11。另外,如果左侧的表达式为 TRUE,则 c++ 将不会去判定右侧的表达式,因为只要一个表达式为 TRUE,则整个表达式为 TRUE。
II 运算符的逻辑框如下:
- | expr1 == true | expr1 == false |
---|---|---|
expr2 == true | ture | true |
expr2 == false | true | false |
2.2 逻辑 AND 运算符
当且仅当两个表达式都为 TRUE时,得到的表达式的值才为 TRUE。
5 == 5 && 9 == 9 // true
5 > 3 && 5 > 1 // true
5 > 8 && 5 < 10 // false
5 > 8 && 5 < 2 // false
&& 运算符的逻辑框如下:
- | expr1 == true | expr1 == false |
---|---|---|
expr2 == true | ture | false |
expr2 == false | false | false |
在 c++ 中,不支持类似于 5 < x <= 10 这样的表达式,需要使用 &&逻辑运算符。写成:
x > 5 && x <= 10
比如分支结构中的测试条件:
if (age > 17 && age < 35)
... // body
2.3 逻辑 NOT 运算符
! 运算符将它后面的表达式的值取反。也就是说,如果 expression 为 TRUE,则 !expression 为 FALSE;如果 expression 为 FALSE,则 !expression 为 TRUE。
注意:在比较复杂的表达式中,尽量使用括号表达优先级,使得代码更容易阅读且不容易出错。
比如下面表达式:
age > 30 || weight >300 && donation >1000 // expr1
(age > 30 || weight >300) && donation >1000 // expr2
由于 && 的优先级比 || 的优先级高,如果想要表达 age > 30 或 weight > 300 和 donation > 1000 的意思,那么必须像 expr2 那样书写。
3、其它
3.1 字符函数库
c++ 继承了一个字符相关的、非常方便的函数软件包,可以确定字符是否为大写字母、数字、标点符号等工作。部分 cctype 中的字符函数如下表:
函数名称 | 返回值 |
---|---|
isalpha() | 如果参数是字母,返回 TRUE |
isdigit() | 如果参数是数字(0~9),返回 TRUE |
ispunct() | 如果参数是标点符号,返回 TRUE |
其它更多函数参考《c++ premier plus 第 6 版》第148 页
3.2 ?: 运算符
3.2.1 使用方法
c++ 有一个常被用来代替 if else 的运算符—条件运算符(?:),它是 c++ 中唯一一个需要 3 个操作数的运算符。该运算符的通用格式:
expression1 ? expression2 : expression3
如果 expression1 为 TRUE,则整个表达式的值为 expression2 的值,否则,整个表达式的值为 expression3 的值:
5 > 3 ? 10 : 12
3 == 9 ? 25 : 18
第一个表达式值为 10,第二个表达式的值为 18。
3.2.2 ?: 的优势
?: 运算符更加简洁,该条件运算符生成一个表达式,因此是一个值,可以将其赋给变量或将其放大一个更大的表达式中。比如:
int c = a > b ? a : b
或嵌套使用:
for (int i = 0;i < 3; i++)
cout << ((i < 2) ? !i ? x[i] :y : x[1]);