C语言快速入门教程
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
  • 基础教程

    • Hello World 深入理解
    • 变量详解
    • 数据类型详解
    • 运算符详解
    • 输入输出详解
    • 条件判断 if-else
    • 循环语句
    • 函数详解
    • 数组详解

循环语句

嗨,我是长安!

循环是编程中特别重要的概念。我记得当年第一次用循环打印乙99乘法表,那种成就感真的很棒!

循环让程序能够重复执行相同的代码!

while 循环

基本语法

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

执行流程

graph TB
    A[开始] --> B{条件成立?}
    B -->|是| C[执行循环体]
    C --> B
    B -->|否| D[结束循环]

示例

#include <stdio.h>

int main() {
    int i = 1;
    
    while (i <= 5) {
        printf("第%d次循环\n", i);
        i++;
    }
    
    return 0;
}

输出:

第1次循环
第2次循环
第3次循环
第4次循环
第5次循环

do-while 循环

语法

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

与while的区别

  • while:先判断后执行(可能一次都不执行)
  • do-while:先执行后判断(至少执行一次)
#include <stdio.h>

int main() {
    int i = 10;
    
    // while:一次都不执行
    while (i < 5) {
        printf("while: %d\n", i);
    }
    
    // do-while:至少执行一次
    do {
        printf("do-while: %d\n", i);
        i++;
    } while (i < 5);
    
    return 0;
}

输出:

do-while: 10

for 循环

语法

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

执行流程

graph TB
    A[初始化] --> B{条件成立?}
    B -->|是| C[执行循环体]
    C --> D[更新]
    D --> B
    B -->|否| E[结束]

示例

#include <stdio.h>

int main() {
    for (int i = 1; i <= 5; i++) {
        printf("第%d次循环\n", i);
    }
    
    return 0;
}

for循环详解

for (int i = 0; i < 10; i++) {
    // 循环体
}

等价于:

int i = 0;           // 初始化
while (i < 10) {     // 条件
    // 循环体
    i++;             // 更新
}

循环控制语句

break - 跳出循环

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break;  // 遇到5就跳出
        }
        printf("%d ", i);
    }
    printf("\n");
    
    return 0;
}

输出:

1 2 3 4

continue - 跳过本次循环

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue;  // 跳过偶数
        }
        printf("%d ", i);
    }
    printf("\n");
    
    return 0;
}

输出:

1 3 5 7 9

嵌套循环

循环里面还可以有循环:

打印乘法表

#include <stdio.h>

int main() {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d×%d=%d\t", j, i, i * j);
        }
        printf("\n");
    }
    
    return 0;
}

输出:

1×1=1
1×2=2   2×2=4
1×3=3   2×3=6   3×3=9
...

打印图案

#include <stdio.h>

int main() {
    // 直角三角形
    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    
    return 0;
}

输出:

*
**
***
****
*****

实战案例

案例1:猜数字游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(NULL));
    int secret = rand() % 100 + 1;
    int guess;
    int count = 0;
    
    printf("=== 猜数字游戏 ===\n");
    printf("我想了一个1-100的数字\n\n");
    
    while (1) {
        printf("请输入你的猜测:");
        scanf("%d", &guess);
        count++;
        
        if (guess > secret) {
            printf("太大了!\n\n");
        } else if (guess < secret) {
            printf("太小了!\n\n");
        } else {
            printf("🎉 恭喜你猜对了!\n");
            printf("你一共猜了%d次\n", count);
            break;
        }
    }
    
    return 0;
}

案例2:计算阶乘

#include <stdio.h>

int main() {
    int n;
    long long factorial = 1;
    
    printf("请输入一个正整数:");
    scanf("%d", &n);
    
    for (int i = 1; i <= n; i++) {
        factorial *= i;
    }
    
    printf("%d! = %lld\n", n, factorial);
    
    return 0;
}

案例3:求和(1+2+...+100)

#include <stdio.h>

int main() {
    int sum = 0;
    
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    
    printf("1+2+3+...+100 = %d\n", sum);
    
    return 0;
}

案例4:打印素数

#include <stdio.h>
#include <stdbool.h>

int main() {
    int n;
    
    printf("请输入一个数字:");
    scanf("%d", &n);
    
    printf("1到%d之间的素数:\n", n);
    
    for (int i = 2; i <= n; i++) {
        bool isPrime = true;
        
        for (int j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                isPrime = false;
                break;
            }
        }
        
        if (isPrime) {
            printf("%d ", i);
        }
    }
    printf("\n");
    
    return 0;
}

案例5:菜单循环

#include <stdio.h>

int main() {
    int choice;
    
    while (1) {
        printf("\n=== 主菜单 ===\n");
        printf("1. 选项A\n");
        printf("2. 选项B\n");
        printf("3. 选项C\n");
        printf("4. 退出\n");
        printf("请选择:");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                printf("你选择了A\n");
                break;
            case 2:
                printf("你选择了B\n");
                break;
            case 3:
                printf("你选择了C\n");
                break;
            case 4:
                printf("再见!\n");
                return 0;
            default:
                printf("无效选择\n");
        }
    }
    
    return 0;
}

常见循环模式

模式1:累加

int sum = 0;
for (int i = 1; i <= n; i++) {
    sum += i;
}

模式2:累乘

int product = 1;
for (int i = 1; i <= n; i++) {
    product *= i;
}

模式3:计数

int count = 0;
for (int i = 1; i <= n; i++) {
    if (条件) {
        count++;
    }
}

模式4:查找

int found = 0;
for (int i = 0; i < n; i++) {
    if (arr[i] == target) {
        found = 1;
        break;
    }
}

练习题

练习1:打印星号金字塔

    *
   ***
  *****
 *******
*********

练习2:计算平均分

输入5个学生的成绩,计算平均分。

练习3:斐波那契数列

打印前20个斐波那契数列:1, 1, 2, 3, 5, 8, 13...

练习4:数字反转

输入1234,输出4321。

答案参考

查看答案

练习1:

#include <stdio.h>

int main() {
    int n = 5;
    
    for (int i = 1; i <= n; i++) {
        // 打印空格
        for (int j = 1; j <= n - i; j++) {
            printf(" ");
        }
        // 打印星号
        for (int k = 1; k <= 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }
    
    return 0;
}

练习2:

#include <stdio.h>

int main() {
    float score, sum = 0, average;
    
    printf("请输入5个学生的成绩:\n");
    for (int i = 1; i <= 5; i++) {
        printf("第%d个学生:", i);
        scanf("%f", &score);
        sum += score;
    }
    
    average = sum / 5;
    printf("平均分:%.2f\n", average);
    
    return 0;
}

练习3:

#include <stdio.h>

int main() {
    int a = 1, b = 1, c;
    
    printf("%d %d ", a, b);
    
    for (int i = 3; i <= 20; i++) {
        c = a + b;
        printf("%d ", c);
        a = b;
        b = c;
    }
    printf("\n");
    
    return 0;
}

练习4:

#include <stdio.h>

int main() {
    int num, reversed = 0, remainder;
    
    printf("请输入一个数字:");
    scanf("%d", &num);
    
    while (num != 0) {
        remainder = num % 10;
        reversed = reversed * 10 + remainder;
        num /= 10;
    }
    
    printf("反转后:%d\n", reversed);
    
    return 0;
}

知识点总结

  • ✅ while - 先判断后执行
  • ✅ do-while - 先执行后判断
  • ✅ for - 最常用的循环
  • ✅ break - 跳出循环
  • ✅ continue - 跳过本次
  • ✅ 嵌套循环 - 打印图案

下一步

👉 函数详解

最近更新: 2025/12/26 14:29
Prev
条件判断 if-else
Next
函数详解