【共读Primer】4.[1.4] 控制流 Page10
三种流程控制的书写方法如下:
while(条件) // 直到条件为假(false) 否则一直循环执行大括号内的代码 { 执行代码 } for(初始化; 条件; 表达式) // 首先执行一次初始化,然后在条件为真的情况下循环执行大括号内的代码,并在每次执行完代码后执行一次表达式 { 执行代码 } if(条件) // 从上到下查找每一个条件,直到某个条件为真则执行相应的代码块,其他代码块则跳过 { 执行代码 } else if(条件) { 执行代码 } else { 执行代码 }
下面来详细的给出几个例子,和编译运行的具体流程,方便理解:
一、 while循环进行累加计算
1 #include <iostream> 2 int main() 3 { 4 int sum = 0, val = 1; 5 // 只要val的值小于等于10,while循环就会持续执行 6 while(val <= 10) 7 { 8 sum += val; // 将sum + val 赋予 sum 9 ++val; // 将val加1 10 } 11 std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl; 12 return 0; 13 }
二、for循环进行累加计算
#include <iostream> int main() { int sum = 0; // 从1加到10 for(int val = 1; val <= 10; ++val) { sum += val; // 等价于 sum = sum + val } std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl; return 0; }
三、使用循环读取位置数量的数据
#include <iostream> int main() { int sum = 0, val = 0; // 读取数据直到遇到文件尾,计算所有读入的值的和 while(std::cin >> val) { sum += val; // 等价于 sum = sum + val } std::cout << "Sum is: " << sum << std::endl; return 0; }
代码运行过程中的文件结束符(^Z) 使用键盘CTRL+Z输入,如果在linux或macOS下使用CTRL+D输入
四、计算在输入中任意数字连续出现的次数,直到出现文件结束符号
#include <iostream> int main() { // currVal 是我们在统计的数;我们将读入的新值存入val int currVal = 0, val = 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; } } // while循环在这里结束 // 记住打印文件中最后一个值得个数 std::cout << currVal << " occurs " << cnt << " times" << std::endl; } // 最外层的if语句在这里结束 return 0; }
流程控制主要就是以上的三种,当然还有switch,书本以后的内容会提到。
这些流程控制单独讲起来都非常的简单,但是在实际的使用中就会有各种各样的难点。
所以要牢牢掌握基本的规则,才能在以后的运用中做到心中有码。
在这里还有一个问题和大家提及一下,那就是代码风格,从当前的4篇代码中大家可以看出我基本上遵循了同一种缩进的风格。
并且在空格的地方也能做到位置一致。
我在这里说的意思并不是要大家都遵循我的风格,而是应该找到一种自己适合的代码风格,并且一直遵守它。
如果有初学的同学按照我的代码去边已执行了,但是没有成功的,请认真检查代码,然后将编译报错和信息一并发到留言区,我们来讨论解决这个问题。