一. 三种循环语句
生活中很多的实际的例子是:同一件事情我们需要完成很多次。
C语言中给我们引入了:while 循环,for 循环和do while 循环。
下面我们来介绍这三种循环:
1. while 循环
1.1 while 循环的语法结构
while(循环控制表达式)
{
循环语句;
}
1.2 while 语句执行的流程
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语句的循环控制变量
- 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
- 建议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; }