循环的概念:
什么是循环:需要重复执行的代码叫作循环
类型:①无限循环(死循环),程序设计中尽量避免(程序中的无限循环必须可控)
②有限循环,限定循环次数或循环的条件
循环构成:
- 循环体
- 循环条件
循环结构的实现:
- 当型循环
whlie
特点:先判断,后执行,循环及循环语句有可能一次也不执行
while死循环:while(1)
语法: while(循环条件)
{
循环语句;
}
说明:①循环条件的返回值必须是布尔类型,在C语言中布尔类型为真用“非0”表示,布尔类型为假用0表示。
②花括号{}包起来的内容,整体称之为循环体
③我们要在循环体中控制循环条件的变化,否则就是死循环
执行过程:
案例:
for循环:
语法:for(表达式1;表达式2;表达式3)
{
循环语句体
}
表达式1:是循环变量,需要赋初始值,循环变量可以是列表,多个循环变量使用逗号分隔
表达式2:循环条件,限制循环次数
表达式3:改变循环的条件,支持列表,可以使用赋值表达式
说明:()中可以只保留两个分号,eg:for(-;-;)
流程图:
案例:for循环求1~100之间的偶数和
// while实现
7 void while_test()
8 {
9 int sum = 0;
10 int i = 1;
11
12 while(i <= 100)
13 {
14 if(i % 2 == 0)
15 {
16 sum += i;
17 }
18
19 i++;
20 }
21
22 printf("while实现:1~100之间的偶数和:%d\n",sum);
23 }
24
25 // for实现
26 void for_test()
27 {
28
29 int sum = 0;
30
31 for(int i = 1;i <= 100;i++) // 死循环表示:while(1)、for(;;)32 {
33 if(i % 2 == 0)
34 {
35 sum += i;
36 }
37 }
38
39 printf("for实现:1~100之间的偶数和:%d\n",sum);
40 }
41
42
43 int main()
44 {
45 while_test();
46 for_test();
47
48 return 0;
49 }
总结:(1)for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率
(2)死循环表示:for(表达式1;表达式3)/for(;;)
(3)应用场合:for语句往往用用于循环次数实现可以确定的场景
循环实现的三要素:循环变量初始化;循环条件;循环的变量的更新
循环的嵌套:
在前一个循环的内部又存在一个完整的循环结构
补充:什么是素数:素数也被称作质数。只能被1和它自身整除的数就叫做素数
案例:
- 直到型循环
①do while:
特点:先执行,在判断,循环语句至少执行一次
语法:do
{
循环体;
}while(循环条件);
执行过程:
案例:do...while 求1~100之间奇数的累加
②goto
语法:goto 标签(label)
标签:表明目标代码的的位置,是一个不加双引号的字符串
案例:
注意;goto只能在同一个函数中跳转,goto会破坏掉代码的结构,同时会降低代码的可读性,在实际开发中,不建议使用
循环结构的典型应用场景
- 求累加和:eg:1+2+3+4+..+100的和
- 求累乘:eg:1*2*3*4*..*100的积
- 求均值:eg:(1+2+3+4+..+100)/100的值
- 求极(最大)值:eg:12、34、55、2、66中的最大值或最小值
- 元素遍历:常用于数组元素的遍历,eg:从[1、2、3、4、5、6]获取每一个元素
- ....
基础算法模型
①累加和
定义一个变量(sum),并赋初始值为0
用该变量累加(+=)每一个数据项(i)
当访问完每一个数据项,此时该变量的取值就是累加和的结果
②累乘
定义一个变量,并赋初始值为1;
用该变量累乘(*=)每一个数据项;
当访问完每一个数据项,此时该变量的取值就是累乘的结果
③极值【知识点:数组】
定义一个变量,并赋初始值为第一个数据项
从第二个数据项开始,一次性与该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量
当访问完没一个数据项,此时该变量的取值就是求极值的结果
Break:
功能:(1)用于switch结构中,用来跳出switch语句,如果case没有break,可能会产生case穿透
(2)用在循环中(while、do...while、for),提前结束循环,也就是结束整个循环
案例:需求:小马哥参与考试,及格跳出循环,否则一直考
需求:输出1~100以内的偶数,只输出前10个
continue:
功能:cuntinue语句不会结束整个循环,而是跳过当前循环,进入下一循环
案例:需求:求1~100之内的偶数和
跳出多层循环:
跳出多层循环不能使用break和continue的,它们只能跳出单层循环。所以需要我们定义标志位跳出多层循环
案例: