控制流
C++提供了多种不同的控制流语句,允许程序不以顺序执行语句
种类
- 主要有:while、for、if
while语句
- 反复执行一段代码,直到给定条件为假
e.g.
#include <iostream>
using namespace std;
int main() {
int sum = 0, val = 1;
// 当 val <= 10 时,该语句会一直执行
while (val <= 10)
{
sum += val;
++val;
}
cout << "Sum of 1 to 10 inclusive is " << sum << endl;
return 0;
}
- while语句的形式:
while (condition)
{
statement
}
即使就一行代码,仍建议使用花括号括起来
- while语句执行过程是交替检测 condition 条件和执行关联语句 statement,直至 condition 为假
- 条件(condition):是一个产生真或假结果的表达式
- 语句块(block):用花括号包围的零条或多条语句的序列
习题(编译运行于VS 2019):
int sum = 0, val = 50;
while (val <= 100)
{
sum += val;
++val;
}
cout << "Sum of 50 to 100 inclusive is " << sum << endl;
return 0;
int val = 10;
while (val >= 0)
{
cout << val << " ";
--val;
}
return 0;
int v1, v2, value, sum = 0;
cout << "Input 2 numbers as to print the sum from the first to the last" << endl;
cin >> v1 >> v2;
value = v1;
while (v1 <= v2) {
sum += v1;
++v1;
}
cout << "Sum of " << value << " to " << v2 << " inclusive is " << sum << endl;
for语句
- 适用于需要在循环条件中检测变量,在循环体中递增变量的情况
重写上述 e.g.
int sum = 0;
for (int i = 0; i <= 10; ++i)
{
sum += i;
}
cout << "Sum of 0 to 10 inclusive is " << sum << endl;
同样的,即使循环体中仅有一条语句,仍需加花括号括起来便于阅读
- 一个for循环包含两个部分:循环头和循环体
- 循环头由三部分构成:初始化语句(init-statement)、循环条件(condition)、表达式(expression)
习题(编译运行于VS 2019):
- 下面语句的作用
int sum = 0;
for (int i = -100; i <= 100; ++i)
{
sum += i;
}
从 -100 加到 100,和为 0
- 重写while中的习题
- for循环 与 while循环 的优缺点如下:
1)在for循环中,循环条件的初始化和修改都放在语句头部分,形式较简洁,特别适用于循环次数已知的情况
2)在while循环中,循环条件的初始化一般放在while语句之前,循环条件的修改一般放在循环体中,形式上不如for语句简洁,但其较适用于循环次数不易预知的情况
3)功能等价,可以互相转换
读取数量不定的输入数据
e.g.
int sum = 0, value = 0;
while (cin >> value)
{
sum += value;
}
cout << "sum is " << sum << endl;
- 只有在输入无效时(如输入的不是一个 int )或遇到文件结束符(end-of-file)时,istream对象才会为假,跳出循环
windows系统中的文件结束符的输入方式是敲 “ Ctrl + Z ”
if语句
int currVal = 0, val = 0;
if (cin >> currVal) {
int cnt = 1;
while (cin >> val)
{
if (val == currVal) {
++cnt;
}
else
{
cout << currVal << " occurs " << cnt << " times" << endl;
currVal = val;
cnt = 1;
}
}
// 跳出while循环,打印最后一个输入的值
cout << currVal << " occurs " << cnt << " times" << endl;
}
- 括号内的条件为真则执行,为假则跳出或执行 else
习题(编译运行于VS 2019):
- 全相等
全不等