语句一般是顺序执行的,但程序设计语言提供了多种不同的控制流语句,允许我们写出更复杂的执行路径。
1.4.1 while语句
格式:
whlie(condition条件)
{
statement语句
}
作用:反复执行一段代码,直至条件为假为止。
例如,我们用while编写从1到10相加的和。
#include<iostream>
int main()
{
int a=1,sum=0;
while (a <= 10)
{
sum = sum + a;
a++;
}
std::cout << "sum=" << sum << std::endl;
}
可以算出sum=55
在代码中,sum用于保存和,而a当作一个变量,从1开始,每次加1,加到10,来达到递增的效果。
condition条件只有真假之分,计算机中0表示假,非0表示真。
只要condition为真statement就会被执行,执行完statement就会继续检测condition是真还是假,如果是假则停止执行,如果是真那么继续执行,以此类推。
条件condition中,使用了<=,这是一个小于等于运算符
用花括号包括的的我们称为循环体,此循环体是由两条语句组成的语句块。其中
sum = sum + a;可以换成sum+=a
+= 复合赋值运算符 此运算符将其右侧运算对象加到左侧,再将这个结果储存到左侧运算对象中。
a++ 中的++是前缀递增运算符,其作用是将运算对象加1
1.4.2 for语句
for语句也是一种循环,其格式是:
for(初始化语句;循环条件;表达式)
{
循环体
}
for语句包含两个部分,循环头和循环体
循环头就是()包着的部分,包含初始化语句、循环条件和表达式。
循环体就是{}包着的部分,有些程序可能没有{}包着。(没有{}包着的循环体就是for下一行,注意只有一行)
示例:要计算出1到20的整数和:
#include<iostream>
using namespace std;
int main()
{
int sum = 0;
for (int a = 1; a <= 20; a++)
{
sum += a;//(等价于sum=sum+a;)
}
cout << sum << endl;
}
我们可以使用namespace来省去每次些std
在这段代码中
int a = 1 是for的初始化语句,变量a只在for循环内存在,循环结束后变量a不能再使用。
a <= 20 是循环条件
a++是表达式
sum += a;是循环体
for循环的总体循环流程就是:
1、初始化。初始化变量a
2、检测。检测循环条件是否成立。如果不成立,则退出循环。
3、执行。如果成立,则执行循环体中的内容,然后执行表达式中的内容。
4、再检测。再次检测循环条件是否成立,重复步骤2、3、4,直到不成立退出循环。
1.4.3 读取数量不定的输入数据
在这里指明一下《C++ Primer》第13页的程序的一个错误,输入3 4 5 6并不会让程序输出Sum is:18 以下是实际测试:
可以看出程序还在运行中,按下enter,程序会跳到下一行,说明程序还没有结束,但我们按下一个不属于int类型的字符再按下enter时,程序才能结束。
由于用while判断输入的是否为int类型的数,这可以达到无论你输入多少个数都能准确算出结果来,代码如下:
#include<iostream>
int main()
{
int sum = 0,value = 0;
while(std::cin >> value)
{
sum += value;
}
std::cout << "Sum is:" << sum <<std:: endl;
return 0;
}
但是,结束时要按到一个不属于int类型(无效输入)的数才能结束,或者按一个文件结束符。
在Windows平台中,输入文件结束符的方法是:按Ctrl+z,然后按Enter。在Unix或Linux下是按Ctrl+d,无需Enter,当然,由于当你输入Ctrl+d后,它仍然停留在系统的输入缓冲区中,所以你还是需要使用一个Enter使其生效。