文章目录
主要内容
程序语句一般是顺序执行的,但是控制流可以控制执行路径——说大白话,就是常用的while、for、if等语句
while语句
几个许多语言都有的内容:
- while语句的基本模式是:
while (condition) statement
,在conditon的值为true时运行statement,完成statement的运行后会再检测condition;否则condition的值为false时结束运行。 - 几个其他的常见知识:<= 、++ 、+= 在C++中都支持。
习题1.9
编写程序,使用while循环将50到100的整数相加
直接贴代码:
#include <iostream>
int main()
{
int i = 50;
int j = 100;
int result = 0;
while(i<=j){
result += i;
i++;
};
std::cout << "相加的结果是 " << result << std::endl;
return 0;
}
结果:
习题1.10
使用递减运算符在循环中按递减顺序输出10到0之间的整数
#include <iostream>
int main()
{
int i = 10;
while(i>=0){
std::cout << i-- << std::endl;
}
return 0;
}
练习1.11
编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数
要注意判断用户输入的两个整数的大小关系,这里全部从小到大输入。
注意这里没有进行输入数据的有效性判断。
#include <iostream>
int main()
{
int little = 0;
int big = 0;
std::cout << "请输入两个整数,系统将会为您打印出这两数之间的所有整数" << std::endl;
std::cout << "请输入第一个数:"<< std::endl;
std::cin >> little;
std::cout << "请输入第二个数:"<< std::endl;
std::cin >> big;
if(little>big)
{
int temp = little;
little = big;
big = temp;
}
std::cout << "将打印从"<<little<<"到"<<big<<"之间的所有整数"<<std::endl;
while(little<=big){
std::cout << little++ << std::endl;
}
std::cout << "打印完成"<<std::endl;
return 0;
}
运行结果:
for 语句
与其他语言没有什么大区别,注意格式:
for(init-statement;condition,expression)
statement
习题1.12
下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0; for (int i = -100; i<= 100; ++i) sum += i;
很简单的问题,从-100加到100,最后等于0。
习题1.13
使用for循环重做while章节中的三个练习
重写1.11吧:
#include <iostream>
int main()
{
int little = 0;
int big = 0;
std::cout << "请输入两个整数,系统将会为您打印出这两数之间的所有整数" << std::endl;
std::cout << "请输入第一个数:"<< std::endl;
std::cin >> little;
std::cout << "请输入第二个数:"<< std::endl;
std::cin >> big;
if(little>big)
{
int temp = little;
little = big;
big = temp;
}
std::cout << "将打印从"<<little<<"到"<<big<<"之间的所有整数"<<std::endl;
for(int i = little; i <= big; i++)
{
std::cout << little++ << std::endl;
}
std::cout << "打印完成"<<std::endl;
return 0;
}
练习1.14
对比while和for循环,两种形式的优缺点各是什么
其实两种形式在一定程度上是等价的,for循环的模块性更强,所有的条件可以方便地写在一起;
在极限情况下,for是可以写得跟while基本一样的:
int a = 0;
for (;a<10;) { }
练习1.15
熟悉编译器的错误信息
并不具有太大的参考性——具体编程时再尝试。
读取不定量的数
std::cin
可以放到while的条件中进行判断,遇到错误——不管是输入类型不匹配还是输入文件结束符——会返回一个无效的istream,那么将不能再进入循环。
注意,在windows中条件结束符是Ctrl + z
,输入后再按Enter确认。
习题 1.16
编写程序,从cin读取一组数,输出其和
代码:
#include <iostream>
int main()
{
int res = 0;
int input = 0;
while(std::cin >> input){
res += input;
}
std::cout << "输入的和为:" << res ;
std::cout<<std::endl;
}
运行结果
if 语句
没什么特别的知识点,直接上练习
练习1.17
如果输入的所有值都是相等的,本节程序会输出什么?如果没有重复值,输出又会是怎样的?
这一题 看起来不需要写代码,不过还是先把程序贴出来:
#include <iostream>
int main()
{
int currVal = 0,val = 0;
if (std::cin >> currVal) {
int cnt = 1;
while(std::cin >> val){
if (val == currVal) {
++cnt;
}
else
{
std::cout << currVal << " 出现" << cnt << " 次" << std::endl;
currVal = val;
cnt = 1;
}
}
std::cout << currVal << " 出现" << cnt << " 次" << std::endl;
}
return 0;
}
- 如果所有的值都是相等的,那么会永远输入同一条内容,计数器会不断往上加,但是在结束运行或者出现不同的值之前,不会输入任何内容;
- 如果没有重复值,每次输入都会使计数器清空,并且记录新的值,cnt永远为1;
习题 1.18
编译并运行程序,输入全部相等的值;
再次运行程序,输入没有重复的值;
输入相等的值:
输入不相等的值:
习题1.19
修改练习1.10编写的程序,使其能处理第一个数比第二个数小的情况。
之前的程序已经实现了这个功能,就不重复写了。