《C++ Primer Plus》第5章学习笔记

内容思维导图

第5章 循环和关系表达式

1. for循环

  • 循环的四个部分:
    • 循环的初始化(loop initialization)
    • 循环测试(loop test)
    • 循环体(loop body)
    • 循环更新(loop update)
  • for循环执行重复操作的步骤:
      1. 设置初始值。
      1. 执行测试,看看循环是否应当继续执行。
      1. 执行循环操作。
      1. 更新用于测试的值。
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++为类型建立别名的两种方式:

      1. 使用预处理器:#define BYTE char
      1. 使用C++typedef关键字:typedef char byte,即将byte作为char类型的别名,其通用格式是:typedef typeName aliasName

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():查看eofbitfailbit是否被设置为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"
}

你可能感兴趣的:(《C++ Primer Plus》第5章学习笔记)