1 循环结构

1 三大结构回顾

我们前面讲到,我们在C++中,有三大结构,分别是:


顺序结构分支结构循环结构


三大结构特点总结请回看下面这篇文章:


C++总结 | 12 for循环及其应用


顺序结构不用多说,顺序结构是最基本的结构,一个程序中必然会有顺序结构的出现。


分支结构主要有如下两类:


if系列;switch-case语句;


这两大类的主要区别可以回看下面这篇文章:


C++总结 | 11 开关语句switch-case


2 循环结构

循环结构有三大类


for循环;while循环do-while循环;


前面课程中,我们讲解了for循环,今天我们要讲解的是while系列,while系列一共有两个:while循环do-while循环


其实不管是哪种循环结构,重要的是,从哪里开始,什么条件结束,执行过程中做哪些语句。

2 while循环

1 结构特点

while语句结构如下:


C++总结 | 15 while与do-while_c++


while循环流程如下:


(1)首先我们执行语句1,然后判断判断条件是否成立;如果成立执行语句块语句2

(2)然后我们再判断判断条件是否成立;如果成立执行语句块语句2

(3)重复上面的步骤(2),直到判断条件不成立,退出循环。


要注意的是:

1.语句2可以写在语句块的上面,重点是先执行语句2还是执行语句块

2.语句2不一定属于语句块是因为:语句块是执行一系列操作的,语句2是单独修改循环条件的


最简单的示例如下:


int i = 0;
while(i<10){
  cout<<"hello"<<endl;
  i++;
}


2 应用

所有循环类型的,都可以使用for循环来做,也可以用while循环来做。


while在括号中,只写判断条件,判断条件的前置(语句1),写在while的前面,判断条件的修改(语句2)写在while语句中。所以一般来说,while循环常用于循环次数不固定的循环


while语句经常用于做一个简易操作系统。根据不同的选择,执行不同的操作,当执行退出功能时,才跳出循环。

3 死循环

死循环是说,不管语句2如何改变条件,判断条件永远成立。或者没有语句2来改变条件,一旦初始条件满足判断条件,就会一直满足下去。


比如:


#include<iostream>
using namespace std;

int main(){
  int i = 0;
  while(1){
    cout<<"hello"<<endl;
    i++;
  }
  
  return 0;
}


上面这个例子就是不管i的值如何改变,判断条件是永远成立的(1代表的是true)。


下面这个例子是缺失了条件2,也会导致死循环:


#include<iostream>
using namespace std;

int main(){
  int i = 0;
  while(i<10){
    cout<<"hello"<<endl;
  }
  
  return 0;
}


通过这个例子,我想大家应该能理解,为什么要把语句2单独从语句块中拿出来了。

3 do-while循环

1 结构特点

do-while结构如下:



do-while循环流程如下:


(1)首先我们执行语句1,然后执行语句块语句2,执行完后判断判断判断条件是否成立。

(2)如果上面的判断条件成立执行下一个语句块语句2,执行完后再判断判断条件是否成立。

(3)重复上面的步骤(2),直到判断条件不成立,退出循环。


要注意的是:

1.和while要注意的两点一致。

2.不管条件成立不成立,语句块和语句2都要先执行一次。

3.while后面要加分号;”。


最简单的示例如下:


int i = 0;
do{
  cout<<"hello"<<endl;
}while(i<10);


2 应用

while先执行,后判断,常用于那些需要先执行操作,根据操作结果进行判断的循环语句


例如,我们要求用户输入一个六位数的密码,如果用户输入的不是六位数,就让它一直输入下去。


#include<iostream>
using namespace std;

int main(){
  int i;
  do{
    cout<<"请输入一个六位数的密码,如果不是六位数,就要重新输入哦:"<<endl;
    cin>>i;
    
  }while(100000>i||i>999999);
  cout<<"恭喜你输入正确,你输入的密码是:"<<i<<",请检查!"<<endl;
  return 0;
}


执行结果如下:


C++总结 | 15 while与do-while_c++_02


4 循环结构对比

1 for循环与while系列对比

到这里,三大循环语句就讲完了,我们来总结一下他们的区别。


for循环将语句1、语句2和判断条件写在一起,也可以分开写,按照while和do-while的格式。但是一般来说,写在一起更常用。


for循环常用于循环次数一定的循环结构,比如我们明确知道,我们要执行100次,就使用for循环;

如果不明确循环次数,而是根据执行结果确定是否满足判断条件,我们一般使用while和do-while循环,比如我们根据输入的值是否合法来判断是否需要再次输入。

2 while循环与do-while循环对比

while和do-while的区别在于先执行还是先判断


while语句是先判断,后执行。

do-while语句是先执行,后判断。


3 使用总结

经过上面的对比介绍,我们做如下总结:


如果我们在使用过程中,明确了循环的次数,使用for循环。

如果我们不确定次数,但是要先判断条件是否成立,再决定是否执行功能,使用while循环。

如果我们不确定次数,要根据我们执行的结果来判断条件是否成立,使用do-while循环。

4 习题

根据今天讲的内容,完成下面的两道习题。

1 水仙花数

水仙花数满足如下要求:


(1)是一个三位数;(2)这个数 = 每一位上的数的立方和


例如:三位数 153 = 1³ + 5³ + 3³ 就是一个水仙花数。


分别使用三类循环语句输出100-999以内的所有水仙花数。


2 角谷猜想

角谷猜想:对于每一个正整数,执行如下流程:


(1)如果它是奇数,就对它乘3再加1;(2)如果它是偶数,就对它除以2;


执行到最后,结果一定为1。


例如:


6->3->10->5->16->8->4->2->1


使用while循环或者do-while循环验证角谷猜想。