1.4.1 while语句
#include <iostream> int main() { int sum = 0, val = 1; //只要val的值小于等于10,while循环就会持续执行 while (val <= 10) { sum += val; //将sum+val赋予sum val++; //将val+1 } std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl; return 0; }
1.4.1 节练习
练习 1.9:编写程序,使用while循环将50到100的整数相加
#include <iostream> int main() { int sum = 0, val = 50; //只要val的值小于等于100,while循环就会持续执行 while (val <= 100) { sum += val; //将sum+val赋予sum val++; //将val+1 } std::cout << "Sum of 50 to 100 inclusive is " << sum << std::endl; return 0; }
练习 1.10:编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数
#include <iostream> int main() { int val = 10; //只要val的值大于等于0,while循环就会打印出val的值 while (val >= 0) { std::cout << val << " "; --val; } std::cout << std::endl; return 0; }
练习 1.11:编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
#include <iostream> int main() { int a, b; std::cout << "请输入两个整数: "; std::cin >> a >> b; int i = a; while (i <= b) { std::cout << i << " "; ++i; } std::cout << std::endl; return 0; }
1.4.2 for语句
编写从1加到10的语句
1 int main() { 2 3 int sum = 0; 4 for (int val = 1; val <= 10; ++val) { 5 sum += val; 6 } 7 std::cout << "Sum of 1 to 10 inclusive is " 8 << sum << std::endl; 9 10 return 0; 11 }
简要重述一下for循环的总体执行过程:
- 创建变量val,将其初始化为1.
- 检测val是否小于等于10.若检测成功,执行for循环体。若失败,退出循环。
- 将val的值增加1.
- 重复第二步的条件检测,只要条件为真就继续执行剩余步骤。
注意:变量val仅在for循环内部存在,在循环结束之后是不能使用的。
1.4.2 节练习
练习 1.12:下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0; for (int i = -100; i <= 100; ++i) { sum += i; }
完成了从-100加到100,sum的最终值为0。
练习 1.13:使用for循环重做1.4.1 节中的所有练习
编写程序,使用for循环将50到100的整数相加
1 #include <iostream> 2 3 int main() { 4 5 int sum = 0; 6 for (int i = 50; i <= 100; ++i) { 7 sum += i; 8 } 9 10 std::cout << sum << std::endl; 11 12 return 0; 13 }
编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数
1 #include <iostream> 2 3 int main() { 4 5 //int sum = 0; 6 for (int i = 10; i >= 0; --i) { 7 std::cout << i << " "; 8 } 9 10 return 0; 11 }
编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数
1 #include <iostream> 2 3 int main() { 4 5 std::cout << "Please enter two numbers:"; 6 int a, b; 7 std::cin >> a >> b; 8 for (int i = a; i <= b; ++i) { 9 std::cout << i << " "; 10 } 11 return 0; 12 }
练习 1.14:对比for循环和while循环,两种形式的优缺点各是什么?
- for循环:循环控制变量的初始化、循环条件和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况
- while循环:循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。
练习 1.15:编写程序,包含第14页的“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
略
1.4.3 读取数量不定的输入数据
实现对用户输入的一组数求和
1 #include <iostream> 2 3 int main() { 4 5 int sum = 0, value = 0; 6 while (std::cin >> value) { 7 sum += value; 8 } 9 std::cout << "Sum is: " << sum << std::endl; 10 return 0; 11 }
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即使流未遇到错误,那么检测成功。
当遇到文件结束符(Ctrl+Z),或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态就会变为无效。处于无效状态的istream对象会使条件变为假。
1.4.3 节练习
练习 1.16:编写程序,从cin读取一组数,输出其和。
1 #include <iostream> 2 3 int main() { 4 5 int sum = 0, value = 0; 6 while (std::cin >> value) { 7 sum += value; 8 } 9 std::cout << "Sum is: " << sum << std::endl; 10 return 0; 11 }