嵌入式开发学习(第二阶段 C语言基础)

发布于:2025-05-11 ⋅ 阅读:(30) ⋅ 点赞:(0)

循环结构

什么是循环结构

代码在满足某种条件的前提下,重复执行,就叫做循环结构。

循环的分类

  • **无限循环:**其实就是死循环,程序设计中药谨慎使用。
  • **有限循环:**循环限定循环次数(for)或者终止循环条件(while,do…while)。=

循环的构成

  • **循环条件:**如 循环次数或者循环的出口
  • **循环体:**需要重复执行的代码。

当型循环的实现

特点:先判断,后执行,如果条件不满足,一次都不执行

**代表:**while、for

while

语法:

while (循环条件)
{
    循环语句;
}

//注意:如果循环语句是单个语句,可以省略花括号{}

while (循环条件) 循环单语句 ;
while (循环条件)
    循环单语句;

//注意;有些特殊场景下,循环语句糅合到了循环条件中,所有省略了循环体
while (循环条件);

说明:

1.循环条件的返回值必须是逻辑值(使用非0表示真,使用0表示假,C语句底层使用1表示真)C99版本引入了一个stbool.c,可以使用true或者false来表示真假,这里的true和false实际上就是定义的 两个符号常量,true的值是1,false的值是0.

2.{}包起来的内容整体称之为循环体

3.我们要在循环体控制条件的变化,也可以在循环体条件中控制循环条件的变化否则产生死循环。

执行过程:

在这里插入图片描述

**特点:**先判断,后执行,循环体有可能一次都不执行。

案例:
  • 需求:求1~100的累加和
  • 分析:
    • 创建一个变量sum = 0,用来接受累加和
    • 创建一个变量i,用来表示计算数,我们会每次给i一个初始值i = 1,每次循环的时候i++
    • 在循环中,使用sum += i,完成累加和
    • 在循环中,使用sum +=1,完成累加和运算
    • 同时我们要限制循环的条件,也就是i的范围:i <= 100
      • 第1次:sum += i = 0 + 1 = 1
      • 第2次:sum += i = 1 + 2 = 3
      • 第3次:sum += i = 3 + 3 = 6
  • 代码:
/*************************************************************************
  > File Name:    demo01.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月09日 星期五 09时55分24秒
 ************************************************************************/

#include <stdio.h>


int main(int argc,char *argv[])
{
    // 创建一个变量sum,用来接收累加和
    int sum = 0;// 这里一定要初始化, 因为sum要参与计算
	
    int i = 0;
    // 创建一个循环变量i,i循环初始值,因为i要参与计算
    
    // 循环求累加和
    while(i <= 100)// 循环变量
    {
         // 实现加法运算
        sum += i;// 等价于 sum = sum + i;
        // 改变循环条件,让其逼近循环的出口
        i++;
    }
    //输出sum
    printf("1~100的累加和为%d\n",sum);

    return 0;
}

  • 运行结果

在这里插入图片描述

案例
  • 需求:求1~100以内的偶数和

  • 分析:

    • 创建两个变量,sum=0用来存储累加的偶数和,i=2用做循环变量,存储自然数
    • 创建一个循环,设置循环条件i<=100
    • 在循环体内,需要一个if来校验i是否是偶数(if(i%2==0)),如果满足,就在if中求偶数和:sum+
    • 在循环体的最后一行,需要改变循环变量的值,用来逼近循环出口
    • 循环结束后,才能输出sum
  • 代码

    /*************************************************************************
      > File Name:    demo01.c
      > Author:       刘孟丹
      > Description:  
      > Created Time: 2025年05月09日 星期五 09时55分24秒
     ************************************************************************/
    
    #include <stdio.h>
    
    
    int main(int argc,char *argv[])
    {
        int sum = 0;
        int i = 2;
        
        while(i <= 100)
        {
            if(i % 2 == 0)
            sum += i;
            i++;
        }
        printf("1~100的累加和为%d\n",sum);
    
        return 0;
    }
    
    
  • 运行结果

在这里插入图片描述

while的特殊写法:

while(1)   //死循环

while(i=5)也是正确的死循环

for

原则上;for循环能实现的while循环也可以实现,for循环可以看做while循环的一种特殊写法,for循环胜在结构清晰。

语法:

for (表达式1 ;表达式2;表达式3)
{
    循环体语句;
}
//如果循环体语句是单语句,也是可以省略{}
for (表达式1 ;表达式2;表达式3) 循环体语句;
for (表达式1 ;表达式2;表达式3) 
    循环体语句;

说明:

()中可以仅保留两个;;,举例:for(;;),此时就是for循环中死循环的体现。

表达式1循环变量,我们需要赋值初值,循环变量可以单个,也可以是列表,多个循环体变量之间使用逗号分隔;

//循环变量是单个
for (int i = 0;..;...){...}

//循环变量是列表
for (int i = 0, j = len -1;..;..) {..}

表达式2循环条件,用来限制循环次数,循环条件支持关系表达式,逻辑表达式等,举例:

for (..; i < 10 && j >= 0;..){..}

表达式3 改变循环变量,支持列表,列表使用逗号分隔, 这里可以使用赋值表达式,举例:

for (..; ..; i++,j--) {..}

⑤执行顺序:①②④③→②④③④③→…→②

执行过程:

在这里插入图片描述

**特点:**先判断,后执行,循环体语句有可能一次都不执行。

案例

  • 需求:计算1~100以内的偶数和
  • 代码:

运行结果:

案例:
  • 需求:

    /*************************************************************************
      > File Name:    demo03.c
      > Author:       刘孟丹
      > Description:  
      > Created Time: 2025年05月09日 星期五 11时18分59秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        unsigned long  num = 1;
        int a = 0;
        int i;
    
        printf("请输入你要求得的累积数:");
        scanf("%u",&a);
    
        for(i = 1;i <= a;i++)
        {
            num *= i;
        }
        printf("%d的累积数值为%lu\n",a,num);
        return 0;
    }
    
  • 注意:阶乘计算,如果乘积超过存储的范围,会溢出,结果计算可能不准确。

for实现死循环

for (① 表达式1; ② 表达式2; ③ 表达式3)
{
    ④ 循环体语句;
}

// 如果循环体语句是单语句,也是可以省略{}的
for (① 表达式1; ② 表达式2; ③ 表达式3) ④ 循环体语句;

for (① 表达式1; ② 表达式2; ③ 表达式3) 
    ④ 循环体语句;
循环实现的三要素:
  • 循环变量的初始化,举例:int i = 2;
  • 循环条件,举例:i <=100
  • 循环变量的更新,举例:i++
案例
  • 需求:求斐波拉契数列前20个

  • 分析:

  • 代码:

    /*************************************************************************
      > File Name:    demo04.c
      > Author:       刘孟丹
      > Description:  
      > Created Time: 2025年05月09日 星期五 11时42分23秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        int f1 = 1,f2 = 1;
        
        int i = 1;
        for(i = 1;i <= 10;i ++)
        {
            printf("%-7d%-7d\n",f1,f2);
            f1 = f1 + f2;
            f2 = f1 + f2;
        }
        
        return 0;
    }
    
    
  • 运行结果
    在这里插入图片描述