C语言基础7循环结构

什么是循环

        代码的重复执行,就叫做循环。

循环的分类

  • 无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控)
  • 有限循环:循环限定循环次数或者循环的条件

循环的构成

  • 循环体
  • 循环条件

当型循环的实现

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
  • 用该变量累乘(*=)每一个数据项;
  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果

极值

  • 定义一个变量,并赋初值为第一个数据项
  • 从第二个数据项开始,一次性与该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量。
  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果。
  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值