C++ 从入门到精通C++ 从入门到精通
首页
基础教程
进阶教程
实战项目
编程指南
首页
基础教程
进阶教程
实战项目
编程指南
  • 🚀 C++ 基础入门

    • 📚 C++ 基础教程
    • 第1章 - 环境搭建和第一个程序
    • 第2章 - 变量和数据类型
    • 第3章 - 输入输出和运算符
    • 第4章 - 条件判断
    • 第5章 - 循环语句
    • 第6章 - 函数基础
    • 第7章 - 数组和字符串

第5章 - 循环语句

嗨,朋友!我是长安。

想象一下,如果让你在屏幕上输出1到100的数字,你会怎么做?

写100行 cout 吗?那也太累了!

这一章,我要教你一个超级强大的技能——循环。有了它,你只需要几行代码就能完成重复性的工作!

🤔 什么是循环?

生活中的循环

生活中到处都是循环:

  • 跑步 - 绕着操场跑10圈
  • 做题 - 做完整本练习册的每道题
  • 听歌 - 单曲循环播放
  • 上课 - 每周一到周五都上课

编程中的循环

编程中的循环就是让程序重复执行某段代码。

C++ 有三种循环:

  1. for 循环 - 知道要循环多少次
  2. while 循环 - 不确定循环次数,满足条件就继续
  3. do-while 循环 - 至少执行一次,然后判断是否继续

🔄 for 循环

for 循环是最常用的循环,适合循环次数确定的场景。

基本格式

for (初始化; 条件; 更新) {
    // 循环体:要重复执行的代码
}

第一个示例

输出1到10的数字:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        cout << i << " ";
    }
    cout << endl;
    
    return 0;
}

输出:

1 2 3 4 5 6 7 8 9 10

执行流程:

  1. int i = 1 - 初始化,定义变量 i,值为1
  2. i <= 10 - 判断条件,i 小于等于10吗?
  3. 如果条件为真,执行循环体 cout << i << " ";
  4. i++ - 更新,i 加1
  5. 回到步骤2,继续判断
  6. 直到条件为假,退出循环

可视化理解

i = 1,判断 1 <= 10 ✓,输出 1,i 变成 2
i = 2,判断 2 <= 10 ✓,输出 2,i 变成 3
i = 3,判断 3 <= 10 ✓,输出 3,i 变成 4
...
i = 10,判断 10 <= 10 ✓,输出 10,i 变成 11
i = 11,判断 11 <= 10 ✗,退出循环

更多示例

示例1:输出1到100

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 100; i++) {
        cout << i << " ";
    }
    cout << endl;
    
    return 0;
}

示例2:输出偶数

#include <iostream>
using namespace std;

int main() {
    cout << "1到20之间的偶数:";
    for (int i = 2; i <= 20; i += 2) {
        cout << i << " ";
    }
    cout << endl;
    
    return 0;
}

输出:

1到20之间的偶数:2 4 6 8 10 12 14 16 18 20

示例3:倒计时

#include <iostream>
using namespace std;

int main() {
    cout << "倒计时:";
    for (int i = 10; i >= 1; i--) {
        cout << i << " ";
    }
    cout << "发射!" << endl;
    
    return 0;
}

输出:

倒计时:10 9 8 7 6 5 4 3 2 1 发射!

示例4:计算1到100的和

#include <iostream>
using namespace std;

int main() {
    int sum = 0;
    
    for (int i = 1; i <= 100; i++) {
        sum += i;  // sum = sum + i
    }
    
    cout << "1到100的和是:" << sum << endl;
    
    return 0;
}

输出:

1到100的和是:5050

⏳ while 循环

while 循环适合循环次数不确定的场景,只要条件为真就继续循环。

基本格式

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

示例1:输出1到10

#include <iostream>
using namespace std;

int main() {
    int i = 1;
    
    while (i <= 10) {
        cout << i << " ";
        i++;
    }
    cout << endl;
    
    return 0;
}

输出:

1 2 3 4 5 6 7 8 9 10

示例2:猜数字游戏(不限次数)

#include <iostream>
using namespace std;

int main() {
    int secret = 42;
    int guess;
    
    cout << "===== 猜数字游戏 =====" << endl;
    cout << "我想了一个1-100之间的数字,你能猜出来吗?" << endl;
    
    while (true) {  // 无限循环
        cout << "请输入你的猜测:";
        cin >> guess;
        
        if (guess == secret) {
            cout << "恭喜你,猜对了!" << endl;
            break;  // 跳出循环
        } else if (guess > secret) {
            cout << "太大了,再试试!" << endl;
        } else {
            cout << "太小了,再试试!" << endl;
        }
    }
    
    return 0;
}

示例3:输入验证

#include <iostream>
using namespace std;

int main() {
    int age;
    
    cout << "请输入你的年龄(1-120):";
    cin >> age;
    
    while (age < 1 || age > 120) {
        cout << "输入错误!请重新输入(1-120):";
        cin >> age;
    }
    
    cout << "你的年龄是:" << age << " 岁" << endl;
    
    return 0;
}

🔁 do-while 循环

do-while 循环的特点是至少执行一次,然后再判断条件。

基本格式

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

示例1:菜单系统

#include <iostream>
using namespace std;

int main() {
    int choice;
    
    do {
        cout << "\n===== 主菜单 =====" << endl;
        cout << "1. 开始游戏" << endl;
        cout << "2. 查看设置" << endl;
        cout << "3. 退出程序" << endl;
        cout << "请选择(1-3):";
        cin >> choice;
        
        switch (choice) {
            case 1:
                cout << "游戏开始..." << endl;
                break;
            case 2:
                cout << "显示设置..." << endl;
                break;
            case 3:
                cout << "感谢使用,再见!" << endl;
                break;
            default:
                cout << "无效选择,请重新输入!" << endl;
        }
    } while (choice != 3);
    
    return 0;
}

示例2:求和(用户控制)

#include <iostream>
using namespace std;

int main() {
    int num;
    int sum = 0;
    char cont;
    
    do {
        cout << "请输入一个数字:";
        cin >> num;
        sum += num;
        
        cout << "当前总和:" << sum << endl;
        cout << "继续吗?(Y/N):";
        cin >> cont;
    } while (cont == 'Y' || cont == 'y');
    
    cout << "最终总和:" << sum << endl;
    
    return 0;
}

🛑 循环控制语句

break - 跳出循环

break 用来立即终止循环。

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break;  // 当 i 等于 5 时,跳出循环
        }
        cout << i << " ";
    }
    cout << endl;
    
    return 0;
}

输出:

1 2 3 4

continue - 跳过本次循环

continue 用来跳过本次循环的剩余代码,直接进入下一次循环。

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue;  // 跳过偶数
        }
        cout << i << " ";
    }
    cout << endl;
    
    return 0;
}

输出:

1 3 5 7 9

🔢 嵌套循环

循环里面还可以有循环,这叫嵌套循环。

示例1:打印乘法表

#include <iostream>
using namespace std;

int main() {
    cout << "===== 九九乘法表 =====" << endl;
    
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            cout << j << "×" << i << "=" << (i * j) << "\t";
        }
        cout << endl;
    }
    
    return 0;
}

输出:

===== 九九乘法表 =====
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
...

示例2:打印星号图案

#include <iostream>
using namespace std;

int main() {
    int rows = 5;
    
    // 打印三角形
    for (int i = 1; i <= rows; i++) {
        for (int j = 1; j <= i; j++) {
            cout << "* ";
        }
        cout << endl;
    }
    
    return 0;
}

输出:

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

🌟 实战案例

案例1:阶乘计算

#include <iostream>
using namespace std;

int main() {
    int n;
    long long factorial = 1;
    
    cout << "请输入一个正整数:";
    cin >> n;
    
    for (int i = 1; i <= n; i++) {
        factorial *= i;
    }
    
    cout << n << "! = " << factorial << endl;
    
    return 0;
}

运行效果:

请输入一个正整数:5
5! = 120

案例2:水仙花数

找出所有3位数的水仙花数(各位数字的立方和等于该数本身)。

#include <iostream>
using namespace std;

int main() {
    cout << "所有3位水仙花数:" << endl;
    
    for (int num = 100; num <= 999; num++) {
        int a = num / 100;        // 百位
        int b = (num / 10) % 10;  // 十位
        int c = num % 10;         // 个位
        
        if (a*a*a + b*b*b + c*c*c == num) {
            cout << num << " ";
        }
    }
    cout << endl;
    
    return 0;
}

输出:

所有3位水仙花数:
153 370 371 407

案例3:素数判断

#include <iostream>
using namespace std;

int main() {
    int num;
    bool isPrime = true;
    
    cout << "请输入一个正整数:";
    cin >> num;
    
    if (num <= 1) {
        isPrime = false;
    } else {
        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                isPrime = false;
                break;
            }
        }
    }
    
    if (isPrime) {
        cout << num << " 是素数" << endl;
    } else {
        cout << num << " 不是素数" << endl;
    }
    
    return 0;
}

案例4:简易ATM系统

#include <iostream>
using namespace std;

int main() {
    double balance = 1000.0;  // 初始余额
    int choice;
    double amount;
    
    do {
        cout << "\n===== ATM 系统 =====" << endl;
        cout << "当前余额:¥" << balance << endl;
        cout << "1. 存款" << endl;
        cout << "2. 取款" << endl;
        cout << "3. 查询余额" << endl;
        cout << "4. 退出" << endl;
        cout << "请选择操作(1-4):";
        cin >> choice;
        
        switch (choice) {
            case 1:
                cout << "请输入存款金额:¥";
                cin >> amount;
                if (amount > 0) {
                    balance += amount;
                    cout << "存款成功!当前余额:¥" << balance << endl;
                } else {
                    cout << "金额无效!" << endl;
                }
                break;
                
            case 2:
                cout << "请输入取款金额:¥";
                cin >> amount;
                if (amount > 0 && amount <= balance) {
                    balance -= amount;
                    cout << "取款成功!当前余额:¥" << balance << endl;
                } else {
                    cout << "余额不足或金额无效!" << endl;
                }
                break;
                
            case 3:
                cout << "当前余额:¥" << balance << endl;
                break;
                
            case 4:
                cout << "感谢使用,再见!" << endl;
                break;
                
            default:
                cout << "无效选择!" << endl;
        }
    } while (choice != 4);
    
    return 0;
}

案例5:成绩统计

#include <iostream>
using namespace std;

int main() {
    int studentCount;
    double score, sum = 0;
    double maxScore = 0, minScore = 100;
    
    cout << "请输入学生人数:";
    cin >> studentCount;
    
    for (int i = 1; i <= studentCount; i++) {
        cout << "请输入第 " << i << " 个学生的成绩:";
        cin >> score;
        
        sum += score;
        
        if (score > maxScore) {
            maxScore = score;
        }
        if (score < minScore) {
            minScore = score;
        }
    }
    
    double average = sum / studentCount;
    
    cout << "\n===== 成绩统计 =====" << endl;
    cout << "总分:" << sum << endl;
    cout << "平均分:" << average << endl;
    cout << "最高分:" << maxScore << endl;
    cout << "最低分:" << minScore << endl;
    
    return 0;
}

🎯 小结

这一章我们学习了三种循环语句:

循环类型适用场景格式
for循环次数确定for (初始化; 条件; 更新) { ... }
while循环次数不确定while (条件) { ... }
do-while至少执行一次do { ... } while (条件);
break跳出循环break;
continue跳过本次循环continue;

如何选择循环?

  • 知道循环次数 → 用 for
  • 不知道循环次数,但知道结束条件 → 用 while
  • 需要至少执行一次 → 用 do-while

💪 练习题

动手练习,巩固知识:

  1. 写一个程序,输出1到100之间所有3的倍数
  2. 写一个程序,计算1到100之间所有偶数的和
  3. 写一个程序,输入一个正整数n,输出斐波那契数列的前n项(1 1 2 3 5 8...)
  4. 写一个程序,打印一个直角三角形(用户输入行数)
  5. 写一个程序,判断一个数是否是回文数(如121、1221)
点击查看参考答案

题目1 参考答案:

#include <iostream>
using namespace std;

int main() {
    cout << "1到100之间所有3的倍数:" << endl;
    for (int i = 3; i <= 100; i += 3) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

题目3 参考答案:

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "请输入项数:";
    cin >> n;
    
    int a = 1, b = 1;
    cout << "斐波那契数列前" << n << "项:" << endl;
    
    for (int i = 1; i <= n; i++) {
        if (i == 1 || i == 2) {
            cout << 1 << " ";
        } else {
            int c = a + b;
            cout << c << " ";
            a = b;
            b = c;
        }
    }
    cout << endl;
    
    return 0;
}

🚀 下一步

太棒了!你现在能让程序自动完成重复性工作了!

下一章,我们要学习函数,让代码更加模块化、可复用!

➡️ 第6章 - 函数基础

最近更新: 2025/12/26 17:25
Contributors: 王长安
Prev
第4章 - 条件判断
Next
第6章 - 函数基础