← 返回 C++ 学习记录

C++ JOURNAL / 程序控制

for、数组与输出约数

循环的三个部分、从 0 开始的下标,以及我做过的约数题。

按我的学习记录整理 · 示例用于帮助理解
这篇记录里

for 的三个部分

for (int i = 0; i < n; i++) {
    cout << i << " ";
}
  1. int i = 0:初始化,只在进入循环时执行一次。
  2. i < n:每次进入循环体前检查的条件,成立才继续。
  3. i++:每轮循环体执行后,把 i 加 1,然后重新检查条件。

当 n = 3,输出 0、1、2,共三次。若 n = 0,一次也不执行。

为什么有时是 n,有时是 n - 1

从 0 数 n 个数,最后一个是 n − 1,所以通常写 i < n。从 1 数到 n 并包含 n,通常写 i <= n。不能只凭记忆替换符号,要看起点、终点和是否包含终点。

i++ 后面能不能加分号

单独一条语句 i++; 需要分号。for 括号里的第三部分写 i++,后面直接结束括号,不额外加分号。

for (...); 的分号是一个空循环体。后面另起的大括号不再是循环体,与 for (...) { ... } 完全不同。这里的省略号只是说明结构,不能原样运行。

数组:我目前的初学记录

int a[10]; 保存十个整数,可用下标是 0 到 9。a[i] 是其中第 i 下标的元素,a[10] 已越界。

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    if (n < 0 || n > 10) return 0;
    int a[10];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

输入 3 7 8 9,输出 7 8 9。只访问已经读入的元素。

我也接触过多个数组,可以用 int a[10], b[10], c[10]; 保存几组数据。比如同一个 i 对应一组数据时,分别读入 a[i]、b[i]、c[i],也要检查范围。目前先停留在数组的定义、下标和循环读写。

输出一个正整数的所有约数

#include <iostream>
using namespace std;
int main() {
    long long n;
    cin >> n;
    if (n <= 0) return 0;
    for (long long i = 1; i <= n; i++) {
        if (n % i == 0) {
            cout << i << " ";
        }
        if (i == n) break;
    }
    return 0;
}

输入 12,输出 1 2 3 4 6 12。从 1 开始,是因为不能对 0 取余;包含 n,是因为正整数本身也是约数。这是逐个尝试的基础写法,适合小数值练习。末尾的 break 在到达 n 时结束,避免最大整数处继续自增溢出。

我曾经只写 int i,没有给初值;把 n % i == 0 写成 n % i = 0;还把 cout << i 写成 cout >> i。

n % i = 0 试图给取余结果赋值,是错误写法。这里要比较余数是不是 0。

返回全部学习记录 ↗