while语句
while( condition )
statement
/*1.9*/
#include<iostream>
int main() {
int sum = 0;
int val = 50;
while (val<=100)
{
sum += val;//复合赋值运算符(+=)等价于sum = sum + val
++val;//前缀递增运算符(++)等价于val = val + 1
}
std::cout << sum;
}
/*1.10*/
#include<iostream>
int main() {
int no = 10;
while (no >= 0) {
std::cout << no<<std::endl;
--no;
}
}
/*1.11*/
#include<iostream>
int main() {
int v1, v2;
std::cin >> v1 >> v2;
while (v2 >= v1) {
std::cout << v1 << std::endl;
++v1;
}
}
for语句
由于while循环在循环条件中检测变量,在循环体中递增变量的模式使用非常频繁,为简化语句,设计了for语句
每个for语句都包含两部分:循环头和循环体。
循环头包括:一个初始化语句(init_statement),一个循环条件(condition),以及一个表达式(expression)。
示例:
//重写从一加到十的程序
/*1.11*/
#include<iostream>
int main() {
int sum = 0;
for (int val = 1; val <= 10; ++val) {
sum += val;
}
std::cout << sum;
}
这里要注意,val只在循环体内有效
读取数量不定的输入数据(while)
我们在预先不知道要对多少数求和,这就需要不断读取数据直至没有新的输入为止。
示例:
读取数据直到遇到文件尾,计算所有读入值的和
int main() {
int sum = 0, val = 0;
while (std::cin >> val) {
sum += val;
}
std::cout << "sum = "
<< sum
<< std::endl;
}
分析:
数据的读取操作是在while的循环条件内完成的:while(std::cin >> val),while循环条件的求值就是执行std::cin>>val。
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流没有遇到错误,那么检测成功,相当于while(true)。当遇到文件结束符(end-of-file),或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态会变为无效,此时处于无效状态的istream对象会使条件变为假,while(false)。
我第四次输入,输入了一个字母,然后回车的结果如上,输入结束,输出前三次输入的和
for循环完成
#include<iostream>
int main() {
int sum = 0;
for (int val = 0; std::cin >> val; ) {
sum += val;
}
std::cout << sum;
}
if语句
引例:c++提供if语句来支持条件执行。我们可以用一个if语句写一个程序,来统计在输入中每个值连续出现多少次:
/*if语句例子*/
#include<iostream>
int main() {
int val = 0; //保存从输入读取的每个数
int currVal = 0; //记录我们正在统计出现次数的数
//读取第一个数,并确保确实有数据可以处理
if (std::cin >> currVal) {
//保存我们正在处理的当前值的个数
int cnt = 1;
//读取剩余的数
while (std::cin >> val) {
//如果值相同,那么个数加一
if (val == currVal) {
++cnt;
}
else {
//否则,如果不相同,打印前一个值的个数
std::cout << currVal << "occurs"
<< cnt
<< "times" << std::endl;
//记住新值
currVal = val;
//重置计数器
cnt = 1;
}
}
std::cout << currVal << "occurs"
<< cnt
<< "times" << std::endl;
}
}
#include<iostream>
int main() {
int v1, v2;
int sum = 0;
std::cin >> v1 >> v2;
if (v1 >= v2) {
while (v1 >= v2) {
sum += v2;
++v2;
}
}
else {
while (v1 <= v2) {
sum += v1;
++v1;
}
}
std::cout << sum;
}