《嵌入式C语言笔记(六):循环控制语句与流程跳转全解析》

今日学习内容 

1. 循环三要素

        循环变量初始化:定义循环控制变量并赋初值(如 `int i=0;`)  
        循环条件:决定是否继续执行循环体(如 `i < 10`)  
        循环变量更新:使循环趋向终止的操作(如 `i++`)  

2. 循环语句分类  


(1) `goto` 语句  

        语法:    

  标签:  
           ...  
          goto 标签;  


        嵌入式禁用原因:  
        破坏代码结构,降低可读性  
        易引发不可控跳转(如跨函数跳转导致堆栈错误)  
        难以维护和调试  

(2) `while` 循环

          语法:  


  while (循环条件) 
  {  
      // 循环体  
  }  

        特点:先判断条件,后执行循环体(可能一次都不执行)  

(3) `do...while` 循环

        语法:  

  do 
  {  
      // 循环体  
  } 
  while (循环条件);  

        特点:先执行循环体,再判断条件(至少执行一次)  

(4) `for` 循环  

        语法:  

  for (初始化; 循环条件; 变量更新) 
  {  
      // 循环体  
  }  

        典型应用:  

  for (int i=0; i<10; i++) 
  {  
      printf("%d ", i);  // 输出0~9  
  }  


        省略写法(慎用):  

  for (;;)  // 等效 while(1)  
  {
    // 死循环  
  }  

3. 循环控制关键字  

        (1) `break`  

                作用:立即终止当前层循环  
                示例:  

  for (int i=0; i<10; i++) 
  {  
      if (i == 5) break;  // 循环在i=5时终止  
      printf("%d ", i);   // 输出0 1 2 3 4  
  }  

        (2) `continue` 

                 作用:跳过本次循环剩余代码,进入下一轮循环  
                示例:  

for (int i=0; i<5; i++) 
{  
    if (i == 2) continue;  
    printf("%d ", i);  // 输出0 1 3 4  
}  


4. 嵌套循环设计  

        外层循环控制整体次数,内层循环处理细节操作

5.算法及练习代码 

//回文数判断 
#include <stdio.h>
int main(void)
{
    int n;
    printf("输入数字");
    scanf("%d", &n);
    int m = 0, k = n;
    while (n != 0)
    {
        m = m * 10 + n % 10;
        n = n / 10;
    }
    if (m == k)
        printf("是回文数\n");
    else
        printf("不是回文数\n");
    return 0;
}
//嵌套方式输出 1–9999 范围内的所有回文数 
#include <stdio.h>
int main(void)
{
    int i;
    for (i = 1; i < 10000; ++i)
    {
        int n = i, m = 0;
        while (n != 0)
        {
            m = m * 10 + n % 10;
            n = n / 10;
        }
        if (i == m)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}
//九九乘法表 
#include <stdio.h>

int main(void)
{
    int i, j;
    for (i = 1; i < 10; ++i)
    {
        for (j = 1; j <= i; ++j)
        {
            printf("%2d * %2d = %2d  ", j, i, j * i);
        }
        printf("\n");
    }
    return 0;
}
//阶乘和(计算 1! + 2! + … + n!,此处 n = 3) 
#include <stdio.h>

int main(void)
{
    int n = 3;
    int sum = 0;
    int i, j;
    for (i = 1; i <= n; ++i)
    {
        int t = 1;
        for (j = 1; j <= i; ++j)
        {
            t *= j;
        }
        sum += t;
    }
    printf("%d\n", sum);
    return 0;
}
// 质数
#include <stdio.h>

int main(void)
{
    int i, n;
    scanf("%d", &n);
    for (i = 2; i < n; ++i)
    {
        if (0 == n % i)
        {
            break;
        }
    }
    if (i < n)
    {
        printf("和数\n");
    }
    else
    {
        printf("质数\n");
    }
    return 0;
}
// 输出 100 以内的质数
#include <stdio.h>

int main(void)
{
    int i, j;
    for (i = 2; i <= 100; ++i)
    {
        for (j = 2; j < i; ++j)
        {
            if (0 == i % j)
            {
                break;
            }
        }
        if (j >= i)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}

6.总结  

         (1) 循环设计核心:严格管理三要素(初始化、条件、更新)  
         (2) 循环选择原则:  
              明确循环次数 → `for`  
              条件先验 → `while`  
              条件后验 → `do...while`  
        (3)嵌入式规范:禁用 `goto`,优先使用结构清晰的循环  
        (4) 控制语句陷阱:`break` 仅跳出当前层循环,`continue` 慎用于复杂逻辑  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值