C++ JOURNAL / 程序控制
for、数组与输出约数
循环的三个部分、从 0 开始的下标,以及我做过的约数题。
按我的学习记录整理 · 示例用于帮助理解这篇记录里
for 的三个部分
for (int i = 0; i < n; i++) {
cout << i << " ";
}
int i = 0:初始化,只在进入循环时执行一次。i < n:每次进入循环体前检查的条件,成立才继续。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。