内容思维导图
第5章 循环和关系表达式1. for循环
- 循环的四个部分:
- 循环的初始化(loop initialization)
- 循环测试(loop test)
- 循环体(loop body)
- 循环更新(loop update)
-
for
循环执行重复操作的步骤:- 设置初始值。
- 执行测试,看看循环是否应当继续执行。
- 执行循环操作。
- 更新用于测试的值。
for (initialization; test_expression; update-expression)
body
- C++并没有将
test-expression
的值限制为只能为真或假,可以使用任意表达式,C++将强制把结果转换为bool
类型。 - 当表达式的操作改变了内存中数据的值时,我们说表达式有副作用(side effect)。
2. 关系表达式
- C++的6种关系操作符:
操作符 | 含义 |
---|---|
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
== | 等于 |
!= | 不等于 |
- 数组名是数组的地址,同样,用引号括起来的字符串常量也是其地址。
// 其中word为字符数组,下面的语句是判断word数组的地址与字符串常量"mate"的地址是否相同
word == "mate";
- C-风格字符串是通过结尾的空值字符定义的,不是由其所在数组的长度定义的,这意味着两个字符串即使被存储在长度不同的数组中,也可能是相同的。如下所示:
char big[80] = "Daffy";
char little[6] = "Daffy";
3. while循环
-
while
循环是没有初始化和更新部分的for
循环,它只有测试条件和循环体:
while (test-condition)
body
-
逐字符遍历字符串直到遇到空值字符的技术是C++处理字符串的标准方法。
-
设计循环的几条指导原则:
- 确定循环终止的条件。
- 在首次测试之前初始化条件。
- 在条件被再次测试之前更新条件。
-
C++为类型建立别名的两种方式:
- 使用预处理器:
#define BYTE char
。
- 使用预处理器:
- 使用C++
typedef
关键字:typedef char byte
,即将byte
作为char
类型的别名,其通用格式是:typedef typeName aliasName
。
- 使用C++
4. do while循环
- do while循环句法:
do
body
while (test-expression);
5. 循环和文本输入
-
cin
读取char
值时,与读取其他基本类型一样,cin
将忽略空格和换行符。 - 发送给
cin
的输入被缓冲,这意味着只有在用户按下回车键后,输入的内容才会被发送给程序。 - 很多PC编程环境将
ctrl+Z
视为模拟的EOF
(检测文件尾)。 -
cin
的一些成员函数-
cin.get()
:读取输入中的下一个字符(即使是空格),有多个重载版本。 -
cin.eof()
:查看eofbit
是否被设置1. -
cin.fail()
:查看eofbit
或failbit
是否被设置为1。
-
-
eof()
和fail()
是事后报告,而不是预先报告,因此应将cin.eof()
或cin.fail()
测试放在读取后。
char ch;
cin.get(ch); // read a char
while (cin.fail() == false) // test for EOF
{
// do something
cin.get(ch); // read another char
}
-
EOF
值必须不同于任何有效的字符值,以便程序不会将EOF
与常规字符混淆。通常EOF
被定义为值-1。由于EOF
表示的不是有效字符编码,因此不能与char
类型兼容。如果使用cin.get()
并测试EOF
,则必须将返回值赋给int
变量。
6. 嵌套循环和二维数组
- C++没有提供二维数组类型,但用户可以创建每个元素本身是数组的数组。声明示例如下:
int maxtemps[4][5];
- 二维数组初始化
// 一维数组初始化
int buts[5] = { 23, 26, 24, 31, 28 };
// 二维数组初始化
int maxtemps[2][5] =
{
{ 94, 98, 87, 103, 101 },
{ 98, 99, 91, 107, 105 }
}
// 字符指针数组初始化
const char* cities[2] =
{
"Gribble City",
"New Gribble"
}
网友评论