欢迎光临
我们一直在努力

C语言循环结构:从入门到精通实战

引言:为什么需要循环?

在编程中,我们经常会遇到需要重复执行某些操作的情况。比如:计算1到100的和、批量处理数据、重复验证用户输入等。如果每步都手动编写,代码会变得冗长且难以维护。这时,循环结构就像我们的“得力助手”,能让代码变得简洁高效!

一、for循环:最常用的循环结构

1.1 for循环的基本形式

for(表达式1; 表达式2; 表达式3)
{
语句块; // 需要重复执行的代码
}

三个表达式的含义:

  • 表达式1:初始化表达式,在循环开始前执行一次,通常用于设置循环变量的初始值

  • 表达式2:条件表达式,每次循环前检查,为真则执行循环体,为假则退出循环

  • 表达式3:迭代表达式,每次循环结束后执行,通常用于更新循环变量

1.2 基础示例:打印数字1-5

#include <stdio.h>

int main()
{
int Num = 0;
int i = 0;

// 循环5次,i从1递增到5
for(i = 1; i < 6; i++)
{
Num = i;
printf("Num = %d\\n", Num);
}
return 0;
}

执行过程解析:

  • i=1 → 满足i<6 → 执行循环体 → i++变成2

  • i=2 → 满足i<6 → 执行循环体 → i++变成3 …

  • i=5 → 满足i<6 → 执行循环体 → i++变成6

  • i=6 → 不满足i<6 → 循环结束

  • 1.3 实战练习:鸡兔同笼问题

    问题描述:笼子里有鸡和兔共50只,脚共140只,求鸡和兔各有多少只?

    #include <stdio.h>

    int main()
    {
    int i = 0; // i代表鸡的数量
    int sum = 0; // 脚的总数

    // 遍历所有可能的鸡的数量(0到50)
    for(i = 1; i <= 50; i++)
    {
    // 计算当前鸡兔数量下的脚总数
    sum = 2 * i + 4 * (50 – i);

    // 判断是否满足140只脚的条件
    if(sum == 140)
    {
    printf("鸡的个数:%d\\n兔的个数:%d\\n", i, 50 – i);
    }
    }
    return 0;
    }

    解题思路:

    • 设鸡有i只,则兔有(50-i)只

    • 鸡有2只脚,兔有4只脚

    • 总脚数 = 2×i + 4×(50-i)

    • 遍历所有可能的i值,找到满足条件的解

    输出效果:

    二、循环的嵌套:处理多维问题

    2.1 嵌套循环的基本结构

    for(表达式A; 表达式B; 表达式C) // 外层循环
    {
    for(表达式D; 表达式E; 表达式F) // 内层循环
    {
    语句G; // 循环体
    }
    }

    重要特性:外层循环执行一次,内层循环执行完整的一轮。

    2.2 经典案例:九九乘法表

    #include <stdio.h>

    int main()
    {
    int i = 0; // 控制行数
    int j = 0; // 控制列数
    int result = 0; // 存储乘积结果

    // 外层循环控制行(1-9行)
    for(i = 1; i <= 9; i++)
    {
    // 内层循环控制列(第i行有i列)
    for(j = 1; j <= i; j++)
    {
    result = j * i;
    // %-2d 表示左对齐,占2位宽度
    printf("%d*%d=%-2d ", j, i, result);
    }
    // 每行结束后换行
    printf("\\n");
    }
    return 0;
    }

    输出效果:

    三、while循环:条件驱动型循环

    3.1 while循环的基本形式

    while(表达式)
    {
    语句块; // 循环体
    }

    特点:先判断条件,条件为真才执行循环体。

    3.2 示例:计算1到100的和

    #include <stdio.h>

    int main()
    {
    int i = 0; // 计数器
    int sum = 0; // 累加和

    while (i < 101) // 条件:i小于101
    {
    sum = sum + i; // 累加
    i++; // 计数器加1
    }
    printf("1到100的和为:%d\\n", sum);
    return 0;
    }

    输出效果:

    3.3 死循环:需要谨慎使用

    while(1) // 条件永远为真
    {
    语句块; // 会无限循环执行
    }

    使用场景:服务器程序、游戏主循环等需要持续运行的程序。使用时一定要确保有退出机制!

    四、do…while循环:先执行再判断

    4.1 基本形式

    do
    {
    语句块; // 循环体
    }while(表达式); // 注意:这里有分号!

    特点:先执行一次循环体,再判断条件是否继续循环。

    4.2 示例:同样计算1到100的和

    #include <stdio.h>

    int main()
    {
    int i = 0;
    int sum = 0;

    do {
    sum += i; // 累加
    i++; // 计数器递增
    } while(i < 101); // 判断条件

    printf("sum = %d\\n", sum);
    return 0;
    }

    输出效果:

    与while的区别:

    • while:先判断,可能一次都不执行

    • do…while:先执行一次,再判断

    五、goto语句:有争议的跳转

    5.1 基本用法

    #include <stdio.h>

    int main()
    {
    int i = 0;
    int sum = 0;

    loop: // 标签
    sum += i;
    i++;
    if(i < 101)
    {
    goto loop; // 跳转到loop标签处
    }
    printf("sum = %d\\n", sum);
    return 0;
    }

    使用建议:goto语句会破坏程序的结构性,使代码难以理解和维护,现代编程中一般不推荐使用。其主要用途是在错误处理时跳转到清理代码段。

    六、循环控制语句:精准控制循环流程

    6.1 break:立即跳出循环

    for(int i = 0; i < 10; i++)
    {
    if(i == 5)
    {
    break; // 当i等于5时,立即跳出整个循环
    }
    printf("%d ", i); // 只打印0 1 2 3 4
    }

    6.2 continue:跳过本次循环

    for(int i = 0; i < 10; i++)
    {
    if(i == 5)
    {
    continue; // 当i等于5时,跳过这次循环
    }
    printf("%d ", i); // 打印0 1 2 3 4 6 7 8 9
    }

    6.3 return:结束整个函数

    int findNumber(int array[], int size, int target)
    {
    for(int i = 0; i < size; i++)
    {
    if(array[i] == target)
    {
    return i; // 找到目标,立即结束函数并返回下标
    }
    }
    return -1; // 没找到,返回-1
    }

    七、实战项目:寻找水仙花数

    7.1 问题分析

    水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

    例如:153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153

    7.2 代码实现

    #include <stdio.h>

    int main()
    {
    int i = 0; // 遍历100-999的所有三位数
    int j = 0; // 计数器,记录找到的水仙花数个数
    int sum = 0; // 存储各位数字的立方和

    printf("所有水仙花数:\\n");

    // 遍历所有三位数
    for(i = 100; i <= 999; i++)
    {
    // 分解数字并计算立方和
    // i/100 获取百位数
    // (i%100)/10 获取十位数
    // i%10 获取个位数
    sum = (i/100)*(i/100)*(i/100) +
    ((i%100)/10)*((i%100)/10)*((i%100)/10) +
    (i%10)*(i%10)*(i%10);

    // 判断是否为水仙花数
    if(sum == i)
    {
    j++; // 计数器加1
    printf("%d ", i);

    // 每行打印5个数字
    if(j % 5 == 0)
    {
    printf("\\n");
    }
    }
    }

    printf("\\n\\n共找到 %d 个水仙花数\\n", j);
    return 0;
    }

    输出效果:

    八、编程技巧与最佳实践

    8.1 选择合适的循环结构

    • 已知循环次数 → 使用for循环

    • 条件驱动,次数未知 → 使用while循环

    • 至少执行一次 → 使用do…while循环

    8.2 避免常见错误

  • 死循环:确保循环条件最终会变为假

    // 错误示例
    int i = 0;
    while(i < 10)
    {
    printf("%d", i);
    // 忘记写 i++,导致无限循环
    }

  • 分号位置错误

    // 错误:for后面直接跟分号,循环体为空
    for(int i=0; i<10; i++); // 这个分号是错误!
    {
    printf("%d", i); // 这不在循环内
    }

  • do…while忘记分号

    // 错误:缺少分号
    do {
    // 代码
    } while(condition) // 这里需要分号!
    作者寄语:编程之路,始于足下。每一次循环,都是向目标的迈进;每一行代码,都是思维的结晶。保持好奇,坚持实践,加油加油!

  • 赞(0)
    未经允许不得转载:171主机测评 » C语言循环结构:从入门到精通实战
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址