数组的练习

这里我们会把前面学习到的一维数组和多维数组进行一次练习。

对于一维数组,我们将计算数组中所有整数的和。

二维数组的例子会稍微复杂一点,我们交换一个有 N x N 个元素二维数组对角元素。

1. 一维数组练习

首先我们会初始化一个数组,然后我们会通过循环语句遍历访问数组中的每一个数值,然后求和。

#include <stdio.h>

int main()
{
    short sum = 0;
    short a[10] = {2, 1, 4, 34, 12, 34, 56, 78, 11, 2};
    for (int i = 0; i < 10; i++)
    {
        sum += a[i]; // 这是一个简写,等价于 sum = sum + a[i];
    }

    printf("Array Sum: %d\n", sum);
    return 0;
}

运行结果:

Array Sum: 234

2. 多维数组练习

我们先初始化一个有 N x N 个元素的二维矩阵,然后通过嵌套的循环语句,来访问数组中的元素,并且将对行列上的元素进行互换。如同下面表格中的所示。

原始数组

数组索引 0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16

变化后数组

数组索引 0 1 2 3
0 1 5 9 13
1 2 6 10 14
2 3 7 11 15
3 4 8 12 16

请大家注意这个交换是对称的,也就是行列的位置发生了互换。

#include <stdio.h>

int main()
{
    short x = 0;
    short a[4][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};

    printf("原始数组\n");

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }

    for (int i = 0; i < 4; i++)
    {
        for (int j = i; j < 4; j++) // 请注意此处是位置交换的关键,我们每次都会缩小交换的范围。
        {
            x = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = x;
        }
    }

    printf("交换位置后的数组\n");

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

运行结果:

原始数组
1       2       3       4
5       6       7       8
9       10      11      12
13      14      15      16
交换位置后的数组
1       5       9       13
2       6       10      14
3       7       11      15
4       8       12      16

3. 小结

在这个小结,我们更进一步练习了数组的使用。对于一维数组我们会用到一层的循环语句来遍历里面的所有元素。在多维数组中,要想遍历里面的所有数据,就要使用多层的嵌套循环结构。