程序 = 逻辑 + 数据,数组是存储数据的强而有力的手段。

    1. 一维数组
      1.1 数组的定义
      数组的定义方式和变量类似。
    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int a[10], b[10];
    6. float f[33];
    7. double d[123];
    8. char c[21];
    9. return 0;
    10. }

    1.2 数组的初始化
    在main函数内部,未初始化的数组中的元素是随机的。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int a[3] = {0, 1, 2}; // 含有3个元素的数组,元素分别是0, 1, 2
    6. int b[] = {0, 1, 1}; // 维度是3的数组
    7. int c[5] = {0, 1, 2}; // 等价于c[] = {0, 1, 2, 0, 0}
    8. char d[3] = {'a', 'b', 'c'}; // 字符数组的初始化
    9. return 0;
    10. }

    1.3 访问数组元素
    通过下标访问数组。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int a[3] = {0, 1, 2}; // 数组下标从0开始
    6. cout << a[0] << ' ' << a[1] << ' ' << a[2] << endl;
    7. a[0] = 5;
    8. cout << a[0] << endl;
    9. return 0;
    10. }

    练习题1: 使用数组实现求斐波那契数列的第 第4讲  数组 - 图1 项。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int n;
    6. int f[100];
    7. cin >> n;
    8. f[0] = 0, f[1] = 1;
    9. for (int i = 2; i <= n; i++) f[i] = f[i - 1] + f[i - 2];
    10. cout << f[n] << endl;
    11. return 0;
    12. }

    练习题2:输入一个 第4讲  数组 - 图2,再输入 第4讲  数组 - 图3 个整数。将这 第4讲  数组 - 图4 个整数逆序输出。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int n;
    6. int a[100];
    7. cin >> n;
    8. for (int i = 0; i < n; i++) cin >> a[i];
    9. for (int i = n - 1; i >= 0; i--) cout << a[i] << ' ';
    10. cout << endl;
    11. return 0;
    12. }

    练习题3:输入一个 第4讲  数组 - 图5,再输入 第4讲  数组 - 图6 个整数。将这个数组顺时针旋转 第4讲  数组 - 图7#card=math&code=k%28k%E2%89%A4n%29&id=CyDJ9)次,最后将结果输出。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int n, k;
    6. int a[100];
    7. cin >> n >> k;
    8. for (int i = 0; i < n; i++) cin >> a[i];
    9. reverse(a, a + k);
    10. reverse(a + k, a + n);
    11. reverse(a, a + n);
    12. for (int i = 0; i < n; i++) cout << a[i] << ' ';
    13. cout << endl;
    14. return 0;
    15. }

    练习题4:输入 第4讲  数组 - 图8 个数,将这 第4讲  数组 - 图9 个数按从小到大的顺序输出。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int n;
    6. int a[100];
    7. cin >> n;
    8. for (int i = 0; i < n; i++) cin >> a[i];
    9. for (int i = 0; i < n; i++)
    10. for (int j = i + 1; j < n; j++)
    11. if (a[i] > a[j])
    12. swap(a[i], a[j]);
    13. for (int i = 0; i < n; i++) cout << a[i] << ' ';
    14. cout << endl;
    15. return 0;
    16. }

    练习题5:计算 第4讲  数组 - 图10第4讲  数组 - 图11 次方。第4讲  数组 - 图12

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int a[10000], size = 1, n;
    6. a[0] = 1;
    7. cin >> n;
    8. while (n--) {
    9. int t = 0;
    10. for (int i = 0; i < size; i++) {
    11. t += a[i] * 2;
    12. a[i] = t % 10;
    13. t /= 10;
    14. }
    15. if (t) a[size++] = t;
    16. }
    17. for (int i = size - 1; i >= 0; i--) cout << a[i];
    18. cout << endl;
    19. return 0;
    20. }
    1. 多维数组
      多维数组就是数组的数组。
    1. int a[3][4]; // 大小为3的数组,每个元素是含有4个整数的数组。
    2. int arr[10][20][30] = {0}; // 将所有元素初始化为0
    3. // 大小为10的数组,它的每个元素是含有20个数组的数组
    4. // 这些数组的元素是含有30个整数的数组
    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int b[3][4] = { // 三个元素,每个元素都是大小为4的数组
    6. {0, 1, 2, 3}, // 第1行的初始值
    7. {4, 5, 6, 7}, // 第2行的初始值
    8. {8, 9, 10, 11} // 第3行的初始值
    9. };
    10. return 0;
    11. }

    练习题:输入一个 第4讲  数组 - 图13第4讲  数组 - 图14 列的矩阵,从左上角开始将其按回字形的顺序顺时针打印出来。

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. int main() {
    5. int n, m;
    6. int arr[50][50];
    7. cin >> n >> m;
    8. for (int i = 0; i < n; i++)
    9. for (int j = 0; j < m; j++)
    10. cin >> arr[i][j];
    11. bool st[50][50] = {false};
    12. int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
    13. int d = 1, x = 0, y = 0;
    14. for (int i = 0; i < n * m; i++) {
    15. int a = x + dx[d], b = y + dy[d];
    16. if (a < 0 || a >= n || b < 0 || b >= m || st[a][b]) {
    17. d = (d + 1) % 4;
    18. a = x + dx[d], b = y + dy[d];
    19. }
    20. cout << arr[x][y] << ' ';
    21. st[x][y] = true;
    22. x = a, y = b;
    23. }
    24. cout << endl;
    25. return 0;
    26. }