跳转至

for 循环

for 循环

// for 循环语法格式
for (循环变量初始化; 循环条件; 每轮循环结束操作) {
    ...
}

观察循环的执行过程

从 0 循环到 n-1

for (int i = 0; i < n; i++) 
    cout << i << ' ';

从 1 循环到 n

for (int i = 1; i <= n; i++) 
    cout << i << ' ';

求 1 到 n 的和

sum += i;

int sum = 0;
for (int i = 1; i <= n; i++) 
    sum += i;

求 n 的阶乘

t *= i;

int t = 1;
for (int i = 1; i <= n; i++) 
    t *= i;

自增自减

i++; // 自增
i--; // 自减 

i++ 与 ++i 的区别

i++; // 先把i的值给出去,自己再+1
++i; // 先自己+1,然后把+1之后的值,给出去

两者还有其他区别吗?

// 在发音上,i++更方便一些
// i++会在底层有一个自我备份的操作,但这个操作带来的效率影响,可忽略不计

循环输出

输出等差数列

输出一个范围内的等差数列

// 已知 a1 = 1, an = 15, d = 2
// 输出 1 3 5 7 9 11 13 15
for (int i = a1; i <= an; i += d)
    cout << i << ' ';

输出等差数列的第n项

// 已知 a1 = 1, a2 = 3, n = 5
// 分析可知 d = a2 - a1
// 在这里,j 是负责计数第几项的
int d = a2 - a1;
for (int i = a1, j = 1; j <= n; j++, i += d) 
    cout << i << ' ';

输出等比数列

输出一个范围内的等比数列

// 已知 a1 = 1, an = 1024, q = 2
for (int i = 1; i <= an; i *= q)
    cout << i << ' ';

输出等比数列的第n项

// 已知 a1 = 1, q = 2, n = 5
// 在这里,j 是负责计数第几项的
for (int i = 1, j = 1; j <= n; j++, i *= q) 
    cout << i << ' ';

输出斐波那契数列(循环迭代)

请输出斐波那契数列的第10项

// 已知斐波那契数列,1, 1, 2, 3, 5, 8,...
// 注意这个代码的实现,叫“循环迭代”
int a = 1, b = 1, c;
for (int i = 3; i <= 10; i++) {
    c = a + b;
    a = b;
    b = c;
}
cout << c;

如果问,请输出斐波那契数列的第2项。

以上代码,还适用吗?如何处理呢?

提示
// 有两种方法:

// 我们可以使用if语句进行特判
// if (n == 2) cout << 1;

// 我们也可以将 c 初始化成 1
// 即使我们没有进入到 for 循环,直接输出 c,
// 但也可以得到正确的结果

循环计数

输入 n 个数,输出 n 个数的和

int sum = 0, n, x;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> x;
    sum += x;
}
cout << sum;

循环判断

输出 1 ~ n 的所有奇数

for (int i = 1; i <= n; i++)
    if (i % 2) cout << i << ' ';
// 也可以这样写
for (int i = 1; i <= n; i += 2)
    cout << i << ' ';

输出 n 个数中,奇数和偶数分别有多少个

int n, x, odd = 0, even = 0;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> x;
    if (x % 2 == 1) odd++;    // if (x % 2) 也可以这样写
    else even++;
}

cout << odd << ' ' << even;

循环求最值

打擂台,求最大值、最小值

第一行,输入一个整数 n

第二行,输入 n 个数

输出 n 个数中的最大值和最小值

int maxn = -2e9, minn = 2e9, n, x;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> x;
    if (x > maxn) maxn = x;
    if (x < minn) minn = x;
    // 这里的maxn, minn,动态维护着前i个数最值
}
cout << maxn << ' ' << minn;
// 也可以这样写
int maxn = -2e9, minn = 2e9, n, x;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> x;
    maxn = max(maxn, x);
    minn = min(minn, x);
}
cout << maxn << ' ' << minn;