跳转至

C++循环编程知识点详解

基于2025年9月2日劲松校区课程内容整理

目录

  1. C++程序基础框架
  2. 循环结构基础
  3. 双层循环与图形输出
  4. 累加与累乘算法
  5. 幂运算实现
  6. 数据类型与溢出处理
  7. 竞赛真题解析
  8. 常见错误与调试技巧

1. C++程序基础框架

1.1 标准程序结构

#include <iostream>
using namespace std;

int main() {
    // 程序代码
    return 0;
}

1.2 各部分详解

头文件 #include <iostream>

  • 作用:引入输入输出流库
  • 记忆方法:头文件放在程序最顶部("头"的位置)
  • 核心概念
  • i = input(输入)
  • o = output(输出)
  • stream = 流(C++中的数据传输概念)

命名空间 using namespace std;

  • 作用:指定使用标准命名空间,避免命名冲突
  • 生动比喻
  • 就像班级里有多个叫"小明"的同学
  • 需要用"一班的小明"、"二班的小明"来区分
  • std::cinstd::cout 就是"std空间的cin"和"std空间的cout"
  • 使用好处:声明后可以直接写cincout,不用每次都写std::

主函数 int main()

  • 作用:程序的入口点,程序从这里开始执行
  • 返回值return 0; 表示程序正常结束

1.3 完整示例

#include <iostream>
using namespace std;

int main() {
    int a;
    cin >> a;       // 输入
    cout << a;      // 输出
    return 0;       // 程序结束
}

2. 循环结构基础

2.1 for循环语法

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

2.2 循环要素

  • 循环变量:通常用ij等表示
  • 起始值:循环从哪里开始
  • 结束条件:什么时候停止循环
  • 步进:每次循环后如何更新

2.3 基础循环示例

从A到B的循环

int a, b;
cin >> a >> b;
for (int i = a; i <= b; i++) {
    cout << i << " ";  // 输出从a到b的所有数
}

3. 双层循环与图形输出

3.1 核心规律

外层循环控制行数,内层循环控制列数

3.2 标准格式

for (int i = 1; i <= 行数; i++) {
    for (int j = 1; j <= 列数; j++) {
        // 输出内容
    }
    cout << endl;  // 每行结束后换行
}

3.3 矩形边框输出

题目要求

输出N行M列的矩形,首尾列用#,内部用*

解题思路

首列和尾列位置输出#,其他位置输出*

完整代码

#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= n; i++) {
        cout << "#"; // 第一列
        for (int j = 1; j <= m; j++) {
            cout << "*";
        }
        cout << "#"; // 最后一列
        cout << endl;
    }

    return 0;
}

3.4 数字三角形

题目要求

输出如下图形:

1
22
333

关键点

  • 每行的列数与行号相关
  • 第i行输出i个数字i

代码实现

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {  // 注意:j <= i
        cout << i;
    }
    cout << endl;
}

4. 累加与累乘算法

4.1 累加算法

核心思想

  • 需要一个累加变量存储结果
  • 初始值必须为0(0加任何数等于该数本身)

标准模板

int sum = 0;  // 累加变量,初始值为0
for (int i = 起始值; i <= 结束值; i++) {
    sum += i;  // 等价于 sum = sum + i
}
cout << sum;

区间求和示例

// 计算100到200之间所有整数的和
int sum = 0;
for (int i = 100; i <= 200; i++) {
    sum += i;
}
cout << sum;  // 输出:15150

4.2 累乘算法(阶乘)

核心思想

  • 需要一个累乘变量存储结果
  • 初始值必须为1
  • 如果是0:0乘任何数都是0
  • 如果是2或其他:结果会错误

标准模板

int product = 1;  // 累乘变量,初始值为1
for (int i = 1; i <= n; i++) {
    product *= i;  // 等价于 product = product * i
}
cout << product;

阶乘示例

// 计算5!(5的阶乘)
int result = 1;
for (int i = 1; i <= 5; i++) {
    result *= i;
}
cout << result;  // 输出:120

5. 幂运算实现

5.1 基本概念

  • 2的3次方 = 2 × 2 × 2 = 8
  • a的b次方 = b个a相乘

5.2 通过循环实现幂运算

2的N次方

int n;
cin >> n;

int result = 1;  // 初始值为1
for (int i = 1; i <= n; i++) {
    result *= 2;  // 每次乘以2
}
cout << result;

A的B次方(通用版本)

int a, b;
cin >> a >> b;

int result = 1;
for (int i = 1; i <= b; i++) {
    result *= a;  // 每次乘以a
}
cout << result;

5.3 执行过程分析

以2的3次方为例: 1. 初始:result = 1 2. 第1次循环:result = 1 × 2 = 2 3. 第2次循环:result = 2 × 2 = 4 4. 第3次循环:result = 4 × 2 = 8 5. 输出:8


6. 数据类型与溢出处理

6.1 int类型范围

  • 最大值:2^31 - 1 = 2,147,483,647(约21亿)
  • 最小值:-2^31 = -2,147,483,648
  • 记忆技巧:约为2×10^9

6.2 溢出现象

int a = 2147483647;
cout << a + 1;  // 输出:-2147483648(溢出变成负数)

6.3 使用long long解决

  • 范围:约为-9×10^18 到 9×10^18
  • 声明方式long long
long long result = 1;
for (int i = 1; i <= n; i++) {
    result *= a;
}

6.4 科学计数法表示

// 表示10的9次方(1后面9个0)
int limit = 1e9;  // 等价于 1000000000

7. 竞赛真题解析

7.1 题目:乘方(2022年信息学竞赛)

题目要求

  1. 计算a的b次方
  2. 如果结果超过10^9,输出-1
  3. 需要在计算过程中判断溢出

关键难点

  • 不能等计算完再判断(可能已经溢出)
  • 必须在循环过程中实时判断

完整解决方案

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;

    long long result = 1;

    for (int i = 1; i <= b; i++) {
        result *= a;

        // 在循环内判断是否超过10^9
        if (result > 1e9) {
            cout << -1;
            return 0;  // 直接结束程序
        }
    }

    cout << result;
    return 0;
}

7.2 金币问题(NOI 2015普及组)

题目描述

  • 第1天获得1枚金币
  • 第2-3天每天获得2枚金币
  • 第4-6天每天获得3枚金币
  • 以此类推...

规律分析

  • 第k组连续k天,每天获得k枚金币
  • 需要双层循环处理

代码框架

int total = 0;
int day = 0;
int n;
cin >> n;

for (int k = 1; day < n; k++) {
    for (int j = 1; j <= k && day < n; j++) {
        day++;
        total += k;
    }
}

cout << total;

8. 常见错误与调试技巧

8.1 常见错误

错误1:累加变量未初始化

// 错误
int sum;  // 未初始化
for (int i = 1; i <= 10; i++) {
    sum += i;
}

// 正确
int sum = 0;  // 初始化为0

错误2:累乘初始值错误

// 错误
int result = 0;  // 0乘任何数都是0
for (int i = 1; i <= n; i++) {
    result *= 2;
}

// 正确
int result = 1;  // 初始值必须为1

错误3:循环边界错误

// 计算2的n次方
// 错误:只循环了n-1次
for (int i = 2; i <= n; i++) {
    result *= 2;
}

// 正确:循环n次
for (int i = 1; i <= n; i++) {
    result *= 2;
}

8.2 代码格式规范

良好的缩进

// 推荐格式
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
        cout << "*";
    }
    cout << endl;
}

8.3 调试技巧

  1. 输出中间结果

    for (int i = 1; i <= n; i++) {
        result *= a;
        cout << "第" << i << "次:" << result << endl;  // 调试输出
    }
    

  2. 分步骤测试

  3. 先测试单层循环
  4. 再测试双层循环
  5. 最后加入复杂逻辑

  6. 使用小数据测试

  7. 先用小数据验证逻辑正确性
  8. 再测试边界情况
  9. 最后测试大数据

总结

核心要点回顾

  1. 双层循环:外层控制行,内层控制列
  2. 累加:初始值为0,使用+=
  3. 累乘:初始值为1,使用*=
  4. 幂运算:循环n次,每次乘以底数
  5. 溢出处理:使用long long,循环内判断

学习建议

  1. 熟练背诵基础框架代码
  2. 多练习循环嵌套题目
  3. 理解累加累乘的本质
  4. 注意数据范围和溢出问题
  5. 保持良好的代码格式习惯
⬆ 回到页面顶部
© 2025 dingls | 联系邮箱:dingls@qq.com