Bootstrap

C语言的三种循环语句

一. 三种循环语句

  生活中很多的实际的例子是:同一件事情我们需要完成很多次。
C语言中给我们引入了:while 循环,for 循环和do while 循环。
  下面我们来介绍这三种循环:

1. while 循环

1.1 while 循环的语法结构

while(循环控制表达式)
{
 循环语句;
 }

1.2 while 语句执行的流程

  expr为循环控制表达式,stmt为循环体;
expr为循环控制表达式,stmt为循环体

1.3 用while 循环在屏幕上打印1-10的数字

#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10) //()括号内为 循环判断表达式
 {
 printf("%d ", i);	//{}括号内为 循环体
 i++;
 }
 return 0; 
 }

1.4 while 语句中的break和continue

1.4.1 break在while循环中的作用:

  其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的
在这里插入图片描述

1.4.2 continue在while循环中的作用:

  continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

  因为i==5执行continue语句一直让没有走到后面的 i++,所以在这里是个死循环
在这里插入图片描述

这个代码我们会发现进入循环体先执行 i++ 再去判断执行 if语句,整个代码的结果1-10之间只没有打印 5,因为在判断 i ==5时,执行continue语句跳过了输出函数printf,不会打印5,由于我们代码是先执行i++的,所以下次进入循环 i 不会符合这个if判断条件了。
在这里插入图片描述


2. for 循环

2.1 for 循环的语法结构

for(表达式1; 表达式2; 表达式3)
{
 循环语句;
}

表达式1:
  表达式1为初始化部分,用于初始化循环变量的

表达式2:
  表达式2为条件判断部分,用于判断循环时候终止

表达式3:
  表达式3为调整部分,用于循环条件的调整

2.2 for 语句执行的流程

  expr1是表达式1初始化部分只执行一次,expr2是表达式2条件判断部分,stmt是循环体,expr3是表达式3调整部分
在这里插入图片描述

2.3 用for 循环在屏幕上打印1-10的数字

#include <stdio.h>
int main()
{
 int i = 0;
 //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)
 {
 printf("%d ", i);
 }
 return 0; 
 }

2.4 for 语句中的break和continue

  我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。
  但是还是有些差异:

//代码1 break;

#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ",i);
 }
 return 0; }

break的作用都一样是跳出循环
在这里插入图片描述

//代码2 continue

#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;
 printf("%d ",i);
 }
 return 0; }

我们发现for 循环的continue和while循环的continue有点不一样,因为for循环的执行流程和while循环的执行流程不一样,for循环的表达式3调整部分 i 即使continue跳出循环也会执行。
在这里插入图片描述

2.5 for语句的循环控制变量

  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}

//两边都是闭区间
for(i=0; i<=9; i++)
{}

2.6 一些for循环的变种

  代码1:for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。  
判断部分的省略 - 判断部分恒为真

#include <stdio.h>
int main()
{
 //代码1
 for(;;)
 {
 printf("hehe\n");
 }

在这里插入图片描述

  代码2 和 代码3的区别: 代码2外循环1次,内循环3次,总循环3*3=9次
代码3由于内循环省略了初始化部分,第二次外循环进入 j没有被初始化所有不会进入内循环

//代码2
    int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for(i=0; i<3; i++)
   {
        for(j=0; j<3; j++)
       {
 printf("hehe\n");
       }
   }
    
    //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?
    for(; i<3; i++)
   {
        for(; j<3; j++)
       {
 printf("hehe\n");
       }
   }

在这里插入图片描述

代码4:使用多余一个变量控制循环,这里 x 和 y要同时满足条件才为真,才能进入循环。

//代码4-使用多余一个变量控制循环
 int x, y;
    for (x = 0, y = 0; x<6 && y<4; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0;
  }

在这里插入图片描述

3. do while 循环

3.1 do while 循环的语法结构

do
{
 循环语句;
 }
while(表达式);

3.2 do while 语句执行的流程

  stmt为循环体, expr为循环控制表达式;
在这里插入图片描述

3.3 用do while 循环在屏幕上打印1-10的数字

#include <stdio.h>
int main() 
{
	int i = 1;
	do 
	{
		printf("%d ",i);
		i++;
	} while (i <= 10);

	return 0;
}

3.4 do while 语句中的break和continue

  1.break在 do while 语句中也是其跳出本次循环的作用
  2.continue在 do while 语句中会根据不同的代码逻辑有不同的结果,和在while循环的使用一样

在这里插入图片描述

3.5 do while 循环语句的特点

循环至少执行一次(不管条件是否满足),使用的场景有限,所以不是经常使用。

  这里初始化 i=10,i<10才能进入循环,由于do while 循环至少执行一次所有会输出一个10

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0; }
;