1.循环输出 2.求和计数 3.循环嵌套(图形输出) 4.嵌套循环(应用) 5.while循环 6.短除 7.循环综合应用

登录以参加训练计划

C++ 循环结构详解 - CSP-J 核心知识点

面向10-14岁学生,结合CSP-J考纲整理的循环结构知识点

目录

  1. for循环基础输出
  2. for循环求和与计数
  3. 循环嵌套(二维图形输出)
  4. 嵌套循环应用
  5. while循环详解
  6. 短除法应用
  7. 循环综合应用

1. for循环基础输出

for循环结构

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

基础输出示例

#include <iostream>
using namespace std;

int main() {
    // 输出1到10
    for(int i = 1; i <= 10; i++) {
        cout << i << " ";
    }
    // 输出:1 2 3 4 5 6 7 8 9 10
    
    cout << endl;
    
    // 输出10个星号
    for(int i = 0; i < 10; i++) {
        cout << "*";
    }
    // 输出:**********
    
    return 0;
}

for循环三要素表

部分 作用 示例
初始化 设置循环变量初值 int i = 1
条件 控制循环何时继续 i <= 10
更新 每次循环后的操作 i++

2. for循环求和与计数

求和与计数原理

#include <iostream>
using namespace std;

int main() {
    // 求1-100的和
    int sum = 0;
    for(int i = 1; i <= 100; i++) {
        sum += i;  // 累加
    }
    cout << "1+2+...+100 = " << sum << endl;
    
    // 统计1-100中3的倍数个数
    int count = 0;
    for(int i = 1; i <= 100; i++) {
        if(i % 3 == 0) {
            count++;  // 计数
        }
    }
    cout << "1-100中3的倍数有:" << count << "个";
    
    return 0;
}

应用场景

  1. 求和:计算数列总和
  2. 计数:统计满足条件的元素个数
  3. 累乘:计算阶乘(n! = 1×2×3×...×n)
  4. 求平均值:先求和再除以个数

3. 循环嵌套(二维图形输出)

嵌套循环原理

外层循环控制行数,内层循环控制每行的内容

输出矩形

#include <iostream>
using namespace std;

int main() {
    int rows = 5, cols = 8;
    
    for(int i = 0; i < rows; i++) {      // 控制行数
        for(int j = 0; j < cols; j++) { // 控制列数
            cout << "* ";
        }
        cout << endl;  // 每行结束换行
    }
    return 0;
}

输出直角三角形

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= i; j++) {
            cout << "* ";
        }
        cout << endl;
    }
    return 0;
}

输出数字金字塔

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    
    for(int i = 1; i <= n; i++) {
        // 输出空格
        for(int j = 1; j <= n - i; j++) {
            cout << "  ";
        }
        
        // 输出数字
        for(int k = 1; k <= 2*i-1; k++) {
            cout << i << " ";
        }
        cout << endl;
    }
    return 0;
}

4. 嵌套循环应用

乘法口诀表

#include <iostream>
#include <iomanip>  // 用于格式化输出
using namespace std;

int main() {
    for(int i = 1; i <= 9; i++) {
        for(int j = 1; j <= i; j++) {
            cout << j << "×" << i << "=" << setw(2) << i*j << " ";
            // setw(2) 设置输出宽度为2
        }
        cout << endl;
    }
    return 0;
}

矩阵运算

#include <iostream>
using namespace std;

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    
    // 求矩阵所有元素和
    int total = 0;
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            total += matrix[i][j];
        }
    }
    cout << "矩阵总和: " << total << endl;
    
    // 求对角线元素和
    int diagSum = 0;
    for(int i = 0; i < 3; i++) {
        diagSum += matrix[i][i];
    }
    cout << "对角线元素和: " << diagSum;
    
    return 0;
}

5. while循环详解

while循环结构

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

基本应用

#include <iostream>
using namespace std;

int main() {
    // 计算数字位数
    int num = 12345;
    int digits = 0;
    int temp = num;
    
    while(temp != 0) {
        temp /= 10;  // 移除最后一位
        digits++;    // 位数计数
    }
    cout << num << "有" << digits << "位数";
    
    return 0;
}

do-while循环

#include <iostream>
using namespace std;

int main() {
    // 至少执行一次
    int choice;
    do {
        cout << "1. 开始游戏\n";
        cout << "2. 退出游戏\n";
        cout << "请选择: ";
        cin >> choice;
    } while(choice != 1 && choice != 2);
    
    cout << "你选择了: " << choice;
    return 0;
}

while vs for 对比表

特性 while循环 for循环
适用场景 不确定循环次数 确定循环次数
初始化 循环外部 循环内部
循环变量更新 循环体内 循环头部
可读性 条件简单时更清晰 循环结构完整

6. 短除法应用

短除法原理

短除法是分解质因数的有效方法

质因数分解代码

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "输入正整数: ";
    cin << n;
    
    cout << n << " = ";
    int factor = 2;
    while (n > 1) {
        if (n % factor == 0) {
            cout << factor;
            n /= factor;
            if (n > 1) cout << "×";
        } else {
            factor++;
        }
    }
    return 0;
}

应用示例

输入:60
输出:60 = 2×2×3×5


7. 循环综合应用

判断素数

#include <iostream>
#include <cmath>  // 使用sqrt函数
using namespace std;

int main() {
    int n;
    cout << "输入正整数: ";
    cin >> n;
    
    bool isPrime = true;
    if(n < 2) isPrime = false;
    else {
        // 优化:只需检查到sqrt(n)
        for(int i = 2; i <= sqrt(n); i++) {
            if(n % i == 0) {
                isPrime = false;
                break;  // 发现因数立即退出循环
            }
        }
    }
    
    cout << n << (isPrime ? "是素数" : "不是素数");
    return 0;
}

斐波那契数列

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "输入项数: ";
    cin >> n;
    
    long long a = 0, b = 1;
    cout << "斐波那契数列前" << n << "项: ";
    
    for(int i = 0; i < n; i++) {
        cout << a << " ";
        long long next = a + b;
        a = b;
        b = next;
    }
    return 0;
}

百钱买百鸡问题

#include <iostream>
using namespace std;

int main() {
    cout << "百钱买百鸡方案:\n";
    
    // 公鸡5元/只,母鸡3元/只,小鸡1元/3只
    for(int x = 0; x <= 20; x++) {          // 公鸡数量
        for(int y = 0; y <= 33; y++) {      // 母鸡数量
            int z = 100 - x - y;           // 小鸡数量
            if(z % 3 == 0 && 5*x + 3*y + z/3 == 100) {
                cout << "公鸡:" << x << " 母鸡:" << y << " 小鸡:" << z << endl;
            }
        }
    }
    return 0;
}

循环结构总结表

循环类型 适用场景 关键技巧
for循环 确定循环次数 三要素控制
while循环 不确定循环次数 条件控制
嵌套循环 二维结构问题 外层控制行,内层控制列
短除法 质因数分解 while+for组合
综合应用 复杂问题 多种循环组合使用

学习建议

  1. 每天练习2-3个循环题目
  2. 多画循环流程图
  3. 注意循环变量初始化
  4. 避免死循环(确保循环条件最终会变为假)

"循环是编程中的'重复魔法',掌握它就能解决大量重复性问题!"

循环调试技巧

  1. 添加输出语句:在循环中打印变量值
    for(int i=0; i<5; i++) {
        cout << "i=" << i << endl; // 调试输出
        // ...其他代码...
    }
    
  2. 使用调试器:逐步执行观察变量变化
  3. 边界测试:测试循环开始和结束的值
  4. 缩小规模:先用小数据测试循环逻辑

循环控制流程图

for循环执行流程

开始
↓
初始化循环变量
↓
检查条件 → 假 → 结束
↓真
执行循环体
↓
更新循环变量
↑______|

while循环执行流程

开始
↓
检查条件 → 假 → 结束
↓真
执行循环体
↑______|

循环嵌套执行流程

外层循环开始
↓
内层循环完整执行一次
↓
外层循环更新
↑______|

短除法流程图

开始
↓
设置除数i=2
↓
当n>1时循环:
├─ 如果n能被i整除:
│   ├─ 输出i
│   ├─ n = n/i
│   └─ 继续检查同一个i
│
├─ 否则:
│   └─ i增加1
│
└─ 重复循环
↓
结束

章节 1. 循环输出

开放

题目 尝试 AC 难度
P807   【入门】循环输出1~100之间的每个数 25 13 5
P808   【入门】循环输出100~1之间的每个数 17 13 5
P621   【入门】请输出1~n之间所有的整数 20 13 5
P622   【入门】请输出n~1之间所有的整数 19 13 5
P623   【入门】请输出带有特殊尾数的数 23 13 5
P662   【入门】输出是2的倍数,但非3的倍数的数 22 13 5
P673   格式化输入输出练习 15 9 7
P672   【入门】输出满足条件的整数4 22 12 6
P716   【入门】输出个位为5或者个位为8数 15 11 6
846   【入门】求零件个数 24 10 6
946   【入门】求数II 22 10 6
824   【入门】求出100至999范围内的所有水仙花数。 22 8 7
935   【入门】求数 16 8 8
844   【入门】回文偶数 9 7 9
906   【入门】统计4位的回文数 21 7 7
927   【入门】等差数 14 6 8
P678   【入门】奇怪的数 7 5 9
P687   【入门】山形数 6 3 10
P787   【入门】整除问题 6 3 10
P789   【入门】特殊的数字四十 6 3 10
1135   【入门】寻找雷劈数 5 3 10
1057   【入门】同因查找 2 2 10

章节 2. 求和计数

开放

题目 尝试 AC 难度
580   【入门】编程求解1+2+3+...+n 13 8 8
558   【入门】编程求1+3+5+...+n 12 7 9
1434   【入门】编程求1*2*3*...*n 10 7 9
504   【入门】编程求1+1/2+1/3+...+1/n 14 6 8
569   【入门】编程求1平方+2平方+...+n平方 7 6 9
813   【入门】求100+97+……+4+1的值。 7 6 9
868   【入门】求满足条件的整数个数 9 6 9
1390   【入门】能被5整除且至少有一位数字是5的所有整数的个数 12 6 9
845   【入门】与7无关的数 23 7 7
904   【入门】找亲戚 12 7 9
908   【入门】求满足条件的数的和 6 4 10
P681   【入门】三位回文数 6 5 10
P682   【入门】五位回文偶数 2 1 10
P683   【入门】纯粹的四位奇数 9 4 9
P684   【入门】纯粹的五位偶数 4 4 10
P686   【入门】连续递增或递减数 4 4 10
P689   【入门】有0的数 0 0 (无)
848   【入门】小丽找数? 4 3 10

章节 3. 循环嵌套(图形输出)

开放

题目 尝试 AC 难度
1201   【入门】字符图形1-星号矩形 13 10 7
1213   【入门】字符图形2-星号直角 17 9 7
P691   【入门】字符图形2-星号倒直角 14 9 8
P692   【入门】数字直角(1) 13 9 7
P693   【入门】数字直角(2) 12 9 8
P694   【入门】数字直角(3) 17 9 7
P695   【入门】数字直角(4) 18 9 7
1224   【入门】字符图形3-平行四边形 16 8 8
1235   【入门】字符图形4-星号正三角 25 8 7
1246   【入门】字符图形5-星号梯形 8 5 10
1257   【入门】字符图形6-星号倒三角 10 3 10
1268   【入门】字符图形7-星号菱形 2 2 10
1279   【入门】字符图形8-数字三角 2 2 10
812   【入门】数字矩形(2) 5 2 10
877   【入门】数字矩形(1) 0 0 (无)
954   【入门】数字三角 0 0 (无)
P696   【入门】字符图形-数字正三角(2) 0 0 (无)
697   【基础】邮票组合 0 0 (无)
955   【入门】空心正方形 1 1 10
956   【入门】放大的Z 6 2 10
958   【入门】奇特的三角 1 1 10
P47   【入门】沙漏 3 1 10
666   【入门】放大的箭头 0 0 (无)
674   【基础】空心六边形-2 0 0 (无)
673   【入门】打印空心等腰三角形 0 0 (无)
677   【入门】蝴蝶结 0 0 (无)
683   【基础】挑战赛第二题——放大的X 0 0 (无)
P230   【入门】打印n行的完整的蝴蝶结 0 0 (无)
801   【入门】轴对称三角形 0 0 (无)

章节 4. 循环嵌套(应用)

开放

题目 尝试 AC 难度
P229   【入门】请输出n行的9*9乘法表 12 8 8
P732   【入门】买不买 15 8 7
959   【入门】求因子数量 22 10 6
P495   【入门】求1~n中每个数的因子有哪些? 12 7 9
713   【入门】姐妹数对 12 5 9

章节 5. while循环

开放

题目 尝试 AC 难度
P227   【入门】请问一个正整数能够整除几次2? 5 5 10
857   【入门】求落地次数 7 5 9
880   【入门】求恰好使s=1+1/2+1/3+…+1/n的值大于X时n的值。 5 5 10
685   【入门】角谷猜想 5 3 10
920   【入门】小明学游泳 8 4 10