for循环
很多情况下都需要程序执行重复的任务
#include<iostream>
using namespace std;
int main()
{int i;for (i = 0; i < 5; i++){cout << "C++ knows loop.\n";}cout << "C++ knows when to stop.\n";return 0;
}
for循环的组成部分
for循环的组成部分完成下面这些步骤
1、设置初始值
2、执行测试,看看循环是否应当继续进行
3、执行循环操作
4、更新用于测试的值
初始化、测试和更新操作构成了控制部分,这些操作由括号括起。其中每部分都是一个表达式,彼此由分号隔开。控制部分后面的语句叫做循环体,只要测试表达式为true,它便被执行:
for(initialization;test-expression;update-expression)body
下面就是for循环设计的流程
for语句看上去有些像函数调用,因为它使用一个后面跟一对括号的名称。然而,for是一个C++关键字,因此编译器不会将for视为一个函数。
递增运算符(++)和递减运算符(--)
这两个运算符将循环计数加1或减1。他们分别有两种版本,前缀版本位于操作数前面(如++x),后缀版本位于操作数后面(如--x)。两个版本对操作数的影响是一样的,但是影响的时间不同
#include<iostream>
using namespace std;
int main()
{int a = 20;int b = 20;cout << "a = " << a << " ,b = " << b << endl;cout << "a++ = " << a++ << " , ++b = " << ++b << endl;cout << "a = " << a << " ,b = " << b << endl;return 0;
}
a++意味着使用a的当前值计算表达式,然后将a的值加1;而++b的意思是先将b的值加1,然后使用新的值来计算表达式(区别就在于”使用后修改“和”修改后使用“)
int x = 5;
int y = ++x; //x is 6, y is 6int z = 5;
int y = z++; //y is 5, z is 6
对于内置类型,采用这两种格式不会有差别;但是对于用户定义的类型,则前缀格式的效率更高
组合赋值运算符
逗号运算符允许将两个表达式放到C++句法只允许放一个表达式的地方。(C++规定,逗号表达式的值是第二部分的值)
关系表达式
同时注意不要混淆 等于运算符(==)和赋值运算符(=)
基于范围的for循环(C++11)
C++11新增了一种基于范围的for循环,简化了一种常见的循环任务:对数组(或容器)的每个元素执行相同的操作,例如
double price[5] = { 2.99,10.5,6.78,5.52,8.69 };
for (double x : price)
cout << x << endl;
其中x最初表示数组的第一个元素,显式第一个元素后不断执行循环,而x依次表示数组的其他元素
如果需要修改数组的元素,则需要换一种循环变量的语法
double price[5] = { 2.99,10.5,6.78,5.52,8.69 };
for (double& x : price)x = x * 0.80;
符号&表示x是一个引用变量,就可以修改原始的值
while循环
while循环是没有初始化和更新部分的for循环,它只有测试条件和循环体
while(test-condition)body
首先,程序计算圆括号内的测试条件(test-condition)表达式。如果该表达式为true,则执行循环体中的语句。执行完循环体后,程序返回测试条件,对它进行重新评估,如果该条件非0,则再次执行循环体,测试和执行将一直进行下去,直到测试条件为false为值。显然如果希望循环最终能够结束,循环体中的代码必须完成某种影响测试条件表达式的操作
#include<iostream>
const int ArSize = 20;
using namespace std;
int main()
{char name[ArSize];cout << "Your first name,please: ";cin >> name;cout << "Here is your name,verticalized and ASCIIized:\n";int i = 0;while (name[i] != '\0'){cout << name[i] << ": " << int(name[i]) << endl;i++;}return 0;
}
死循环是常见的循环问题之一。
在设计循环时,需要记住下面几条指导原则
- 指定循环的终止条件
- 在首次测试之前初始化条件
- 在条件被再次测试之前更新条件
do while循环
这种循环首先执行循环体,然后再判定测试表达式,决定是否应继续执行循环。如果条件为false,则循环终止;否则,进入新一轮的执行和测试
这样的循环至少执行一次,因为其程序流必须经过循环体后才能到达测试条件。
do body
while(test-expression);