什么是循环
代码的重复执行,就叫做循环。循环的分类
- 无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控)
- 有限循环:循环限定循环次数或者循环的条件
循环的构成
- 循环体
- 循环条件
当型循环的实现
while
语法:
while(循环条件)
{
循环语句;
}
说明:
1. 循环条件的返回值必须是布尔类型,在 C 语言中,布尔类型为真使用 非 0 来表示,布尔类型为假使用 0 表示。 2. {} 包起来的内容整体称之为为 循环体 。 3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环 执行过程: 特点: 先判断,后执行,循环体语句有可能一次都不执行。 案例:死循环
while(1) // 我们会在死循环进行必要的限制
for
语法:
for(①表达式1;②表达式2;③表达式3)
{
④循环体语句;
}
说明:
1. () 中可以只保留两个分号,举例: (;;) 2. ① 是循环变量,我们需要赋初值,循环变量可以是列表,多个循环变量使用逗号分隔,举例: int i=0,j=0 3. ② 是循环条件,用来限制循环的次数,循环条件支持关系表达式,如果加入逻辑表达式,会变成复合表达式,举例: i < 10 && j < 10 4. ③ 改变循环条件,支持列表,这里可以使用赋值表达式,举例: i++,j++ 5. 执行顺序: ①②④③ --> ②④③ --> ②④③ ... --> ② ,这里 ① 只执行 1 次。 执行过程: 特点: 先判断,后执行,循环体语句有可能一次都不执行。 案例:总结
- for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率。
- 应用场合:for语句往往应用于循环次数事先可以确定的场景。
死循环
for(表达式1;;表达式3);
for(;;);
循环实现的三要素
- 循环变量初始化
- 循环条件
- 循环变量更新
案例:
直到型循环的实现
do..while
语法:
do
{
循环体;
} while(循环条件);
说明:
1. 循环条件的返回值必须是布尔类型,在 C 语言中,布尔类型为真使用 非 0 来表示,布尔类型为假使用 0 表示。 2. {} 包起来的内容整体称之为为 循环体 。 3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。 执行过程: 特点: 先执行,后判断,循环体语句至少执行一次。 案例:goto
语法:
goto 标签(label);
标签:标明目标代码的位置,是一个不加
""
的字符串。
案例1:
案例2:
注意:
goto
只能在同一个函数中跳转,
goto
会破坏掉代码的结构,同时会降低代码可读性。在企业开发中,不建议使用
break和continue
break
功能:
1.用在switch中,用来跳出switch的case语句,如果case没有break,可能会产生case穿透。
2.用在循环中(while、do...while、for...),提前结束循环,也就是跳出整个循环。
说明:
1. break 不能用于循环语句和 switch 语句之外的任何其它语句之中。 2. break 只能终止并跳出最近一层的结构。 图示: 案例1:/**
* 需求:break案例-马杰参与一阶段分段考试,如果考试及格,就跳出循环,否则就一直考
*/
#include <stdio.h>
int main()
{
printf("一阶段分段考试\n");
// 声明一个变量,用来存放考试成绩
int score = 0;
do
{
// int score = 78; // score的作用域只能作用域到{}以内
printf("小马哥开始一阶段分段考试...\n");
scanf("%d",&score);
// 开始合格,结束考试
if(score >= 60){
break;
}
}
while(1);
printf("恭喜小马哥考试通过!\n");
return 0;
}
案例2:
/**
* 需求:break案例-输出1~100以内的偶数,只输出前10个
*/
#include <stdio.h>
int main()
{
for(int i = 1,count = 1;i <= 100;i++)
{
if(i % 2 == 0)
{
if(count > 10){
break;
}
count++;// 注意位置:只记录偶数
printf("%d\t",i);
}
}
printf("\n");
return 0;
}
continue
功能: continue 语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环。 说明: 1. 仅用于循环语句中。 2. 在嵌套循环的情况下, continue 语句只对包含它的最内层的循环体语句起作用。 图示: 案例:跳出多层循环
跳出多层循环是不能使用 break 和 continue 的,因为他们只能跳出单层循环,跳出多层循环,需要 我们自己定义标志位进行跳出 案例: 注意:如果是多层循环,进的时候是从外到内,跳出的时候是从内到外。循环的嵌套
3种循环( while 、 do……while 、 for )可以互相嵌套。在前一个循环结构的内部又存在一个完整的循环结构,如:案例:
循环结构的典型应用场景
- 求累和:举例 1+2+3+4+..+100的和
- 求累乘:举例 1*2*3*4*..*100的积
- 求均值:举例: (1+2+3+4+..+100) / 100的值
- 求极值:举例: 12,34,55,2,66 中的最大值或者最小值
- 元素遍历:常用于数组元素的遍历,比如:从 [1,2,3,4,5] 获取每一个元素。
基础算法模型
累加和
- 定义一个变量(sum),并赋初值为0;
- 用该变量累加(+=)每一个数据项(i)
- 当访问完每一个数据项,此时该变量的取值就是累加和的结果。
累乘
- 定义一个变量,并赋初值为1;
- 用该变量累乘(*=)每一个数据项;
- 当访问完每一个数据项,此时该变量的取值就是累乘的结果
极值
- 定义一个变量,并赋初值为第一个数据项
- 从第二个数据项开始,一次性与该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量。
- 当访问完每一个数据项,此时该变量的取值就是求极值的结果。