转载请注明出处:http://blog.youkuaiyun.com/enyusmile/article/details/46592145
本章内容包括:
- for循环.
- 表达式和语句.
- 递增运算符和递减运算符:++和–.
- 组合赋值运算符.
- 复合语句(语句块).
- 逗号运算符.
- 关系运算符:>,>=,==,<=,<和!=.
- while循环.
- typedef工具.
- do while循环.
- 字符输入方法get().
- 文件尾条件.
- 嵌套循环和二维数组.
5.1 for循环
- 程序清单5.1 forloop.cpp
5.1.1 for循环的组成部分
- for循环的组成部分完成下面这些 步骤.
- 1.设置初始值.
- 2.执行测试,看看循环是否应当继续进行.
- 3.执行循环操作.
- 4.更新用于测试的值.
for (initialization;test-expression;update-expression)
body
- 程序清单5.2 num_test.cpp
- 注意,循环在i变为0后结束.
- 提示:C++常用的方式是,在for和括号之间加上一个空格,而省略函数名与括号之间的空格.这样从视觉上抢花了控制语句和函数调用之间的区别.另外,常见的做法是缩进for语句体,使它看上去比较显著.
- 1.表达式和语句
- <<运算符的优先级比表达式中使用的运算符高,因此代码使用括号来获得正确的运算顺序.
- 程序清单5.3 express.cpp
- 注意:老式C++实现可能要求使用ios:boolalpha,而不是ios_base::boolalpha来作为cout.setf()的参数.有些老式实现甚至无法识别这两种形式.
- 注意:C++表达式是值或值与运算符的组合,每个C++表达式都有值.
- 2.非表达式和语句
- 3.修改规则
for (for-init-statement condition;expression)
statement
5.1.2 回到for循环
- 程序清单5.4 formore.cpp
- 提示:通常,定义一个const值来表示数组汇总的元素个数是个好办法.在声明数组和引用数组长度时(如在for循环中),可以使用const值.
5.1.3 修改步长
- 程序清单5.5 bigstep.cpp
5.1.4 使用for循环访问字符串
- 程序清单5.6 forstr1.cpp
5.1.5 递增运算符(++)和递减运算符(–)
- 程序清单5.7 plus_one.cpp
5.1.6 副作用和顺序点
5.1.7 前缀格式和后缀格式
5.1.8 递增/递减运算符和指针
- 注意:指针递增和递减遵循指针算术规则.因此,如果pt指向某个数组的第一个元素,++pt将修改pt,是指指向第二个元素.
5.1.9 组合赋值运算符
5.1.10 符合语句(语句块)
- 程序清单5.8 block.cpp
5.1.11 其他语法技巧—逗号运算符
- 程序清单5.9 forstr2.cpp
5.1.12 关系表达式
5.1.13 赋值,比较和可能犯的错误
- 程序清单5.10 equal.cpp
- 警告:不要使用=来比较两个量是否相等,而要使用==.
5.1.14 C风格字符串的比较
- 程序清单5.11 compstr1.cpp
5.1.15 比较string类字符串
- 程序清单5.12 compstr2.cpp
5.2 while循环
while (test-condition)
body
- 程序清单5.13 while.cpp
5.2.1 for与while
- 提示:在设计循环时,请记住下面几条指导原则.
- 指定循环终止的条件.
- 在首次测试之前初始化条件.
- 在条件被在此测试之前更新条件.
5.2.2 等待一段时间:编写延迟循环
- ANSI C和C++库中有一个函数有助于完成这样的工作.这个函数名为clock(),返回程序开始执行后所用的系统时间.
- 程序清单5.14 waiting.cpp
// waiting.cpp -- using clock() in a time-delay loop
#include <iostream>
#include <ctime> // describes clock() function, clock_t type
int main()
{
using namespace std;
cout << "Enter the delay time, in seconds: ";
float secs;
cin >> secs;
clock_t delay = secs * CLOCKS_PER_SEC; // convert to clock ticks
cout << "starting\a\n";
clock_t start = clock();
while (clock() - start < delay ) // wait until time elapses
; // note the semicolon
cout << "done \a\n";
// cin.get();
// cin.get();
return 0;
}
- 类型别名:C++为类型建立别名的方式有两种.一种是使用预处理器(如:#define BYTE char;),第二种方法是使用C++(和C)的关键字typedef来创建别名.例如,要将byte作为char的别名,格式:typedef typeName aliasName;
- 注意typedef不会创建性类型,而知识为已有的类型建议一个新名称.
5.3 do while循环
- 这样的循环通常至少执行一次.
- 程序清单5.15 dowhile.cpp
5.4 基于范围的for循环(C++11)
5.5 循环和文本输入
- 如何在while循环中使用这三种模式:
5.5.1 使用原始的cin进行输入
- 程序清单5.16 textin1.cpp
- 使用哨兵字符,将其作为停止标记.
5.5.2 使用cin.get(char)进行补救
- 程序清单5.17 textin2.cpp
5.5.3 使用哪一个cin.get()
5.5.4 文件尾条件
- 如果输入来自于文件,则可以使用一种功能更强大的技术—检测文件尾EOF.
- 程序清单5.18 textin3.cpp
- 1.EOF结束输入
- 2.常见的字符输入做法
5.5.5 另一个cin.get()版本
- 注意:最初,put()成员只有一个原型—put(char).可以传递一个int参数给他,该参数将被强制转换为char.C++标准还要求只有一个原型.然而,有些C++实现都提供了3个原型:put(char),put(signed char)和put(unsigned char).在这些实现中,给put()传递一个int参数将导致错误消息,因为转换int的方式不止一种.使用显式强制类型转换的原因(如cin.put(char(ch)))可使用int参数.
- 提示:需要知道的是,EOF不表示输入中的字符,而是指出没有字符.
- 使用cin.get()还有一个微妙而重要的问题.由于EOF表示的不是有效字符编码,因此可能不与char类型兼容.
- 程序清单5.19 textin4.cpp
5.6 嵌套循环和二维数组
5.6.1 初始化二维数组
5.6.2 使用二维数组
- 程序清单5.20 nested.cpp
5.7 总结
5.8 复习题
5.9 编程练习
附件:本章源代码下载地址