乐鱼电竞

  • 教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

    二维数组是什么?二维数组怎么用?【C++培训】

    更新时间:2020年05月08日16时00分 来源:乐鱼播客 浏览次数:

    二维数组的定义与初始化

    在实际的工作中,仅仅使用一维数组是远远不够的,例如,一个学习小组有5个人,每个人有3门课的考试成绩,如果使用一维数组解决是很麻烦的。这时,可以使用二维数组,维数组的定义方式与一维数组类似,其语法格式如下:

    类型说明符 数组名[常量表达式1] [常量表达式2];

    在上述语法格式中,“常量表达式1”被称为行下标,“常量表达式2”被称为列下标。

    例如,定义一个3行4列的二维数组,具体如下:

    int a[3][4];

    在上述定义的二维数组中,共包含3*4个元素,即12个元素。接下来,通过一张图来描述二维数组a的元素分布情况。

    1588924115618_C++.jpg

    从图中可以看出,二维数组a是按行进行存放的,先存放a行,再存放a[1行、a2行,并且每行有4个元素,也是依次存放的。

    完成二维数组的定义后,需要对二维数组进行初始化,初始化二维数组的方式有4种,具体如下。

    (1)按行给二维数组赋初值。例如:

    int a[2][3] = {{1,2,3},{4,5,6}};

    在上述代码中,等号后面有一对大括号,大括号中的第1对括号代表的是第1行的数组元素,第2对括号代表的是第2行的数组元素。

    (2)将所有的数组元素按行顺序写在1个大括号内。例如

    int a[2][3] = {1,2,3,4,5,6};

    在上述代码中,二维数组a共有两行,每行有3个元素,其中,第1行的元素依次为1、2、3,第2行元素依次为4、5、6。

    (3)对部分数组元素赋初值。例如:

    int b[3][4] = {{1},{4,3},{2,1,2}};

    在上述代码中,只为数组b中的部分元素进行了赋值,对于没有赋值的元素,系统会自动赋值为0,数组b中元素的存储方式如下所示。

    1588924136474_C++-二维数组、.jpg

    (4)如果对全部数组元素置初值,则二维数组的第1个下标可省略,但第2个下标不能省略。例如

    int a[2][3] = {1,2,3,4,5,6};

    可以写为

    int a[][3] = {1,2,3,4,5,6};

    系统会根据固定的列数,将后边的数值进行划分,自动将行数定为2。

    二维数组的引用

    二维数组的引用方式同一维数组的引用方式一样,也是通过数组名和下标的方式来引用数组元素,其语法格式如下:

    数组名[下标] [下标];

    在上述语法格式中,下标值应该在已定义的数组的大小范围内,例如,下面这种情况就是错误的。

    int a[3][ 4];    //定义a为3行4列的二维数组

    a[3][4]=3;    //对数组a第3行第4列元素赋值,出错

    在上述代码中,数组a可用的行下标范围是0~2,列下标是0~3,a[3][4]超出了数组的下标范围。为了帮助读者更好地掌握二维数组的引用,接下来,通过一个案例来演示二维数组的遍历。

    #include

    void main() {

        //申明并初始化数组

        int array[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };

        for (int i = 0; i < 3; i++)    //循环遍历

        {

            for (int j = 0; j < 4; j++)    //循环遍历

            {

                printf("[%d][%d]: %d", i, j, array[i][j]);

            }

            printf("\n");    //每行添加换行字符

        }

    }

    运行结果如下

    1588924165993_二维数组运行案例.jpg

     

    在上图中定义了一个二维数组aray,该数组有3行4列。当使用嵌套for循环遍历二维数组元素时,外层for循环用于变量数组的行元素,内层for循环用于遍历数组的列元素。从图中可以看出,程序依次将数组aray中的元素输出了。

    二维数组的应用

    熟悉了二维数组的定义和引用,接下来定义一个二维数组 StuScore[5][3],用来存放5名同学3门课程的成绩,并定义变量m表示学生,n表示第几门成绩,aver表示每名同学3门课程的平均成绩,sum表示每名同学3门课的总成绩,具体如下案例所示:

    #include

    void main(int argc, char *argv[])

    {

        int StuScore[5][3] = {

            //张同学

            {88, 70, 90},

            //王同学

            {80, 80, 60},

            //李同学

            {89, 60, 85},

            //赵同学

            {80, 75, 78},

            //周同学

            {70, 80, 80}

        };

        int m = 0, n = 0;

        int nStuTotalScore = 0;

        int nMathTotalScore = 0;

        int nChineseTotalScore = 0;

        int nEnglishToatalScore = 0;

        printf("个人总成绩:\n");

        for (m = 0; m < 5; m++) {

            nStuTotalScore = 0;

            for (n = 0; n < 3; n++) {

                nStuTotalScore += StuScore[m][n];

                switch (n)

                {

                case 0:

                    {

                        nMathTotalScore += StuScore[m][n];

                        break;

                    }

                    case 1:

                    {

                        nChineseTotalScore += StuScore[m][1];

                        break;

                    }

                    case 2:

                    {

                        nEnglishToatalScore += StuScore[m][2];

                    }

                }

            }

            switch (m)

            {

                case 0:

                {

                    printf("张同学:%d\n", nStuTotalScore);

                    break;

                }

                case 1:

                {

                    printf("王同学:%d\n", nStuTotalScore);

                    break;

                }

                case 2:

                {

                    printf("李同学:%d\n", nStuTotalScore);

                    break;

                }

                case 3:

                {

                    printf("赵同学:%d\n", nStuTotalScore);

                    break;

                }

                case 4:

                {

                    printf("周同学:%d\n", nStuTotalScore);

                    break;

                }

            }

        }

        printf("小组数学总分: %d 小组数学平均分:%.2f\n",

            nMathTotalScore, (double)nMathTotalScore / 5);

        printf("小组语文学总分: %d 小组语文平均分:%.2f\n",

            nChineseTotalScore, (double)nChineseTotalScore / 5);

        printf("小组英语总分: %d 小组英语平均分:%.2f\n",

            nEnglishToatalScore, (double)nEnglishToatalScore / 5);

     

    }

    运行结果如下

    1588924183471_二维数组运行案例2.jpg


    上面案例中实现了计算小组各科平均分的功能。其中,第415行代码定义了一个二维数组,用来存储小组中每个成员的各科成绩。第25~45行代码通过遍历列下标获取每个小组不同学科的总分,第46~74行代码通过遍历行下标获取每个小组成员的总分,最后将小组不同学科的总分和平均分输出。以上我们介绍了C++二维数据的定义和用法,如果想学习C++可以了解乐鱼播客C++培训课程。

    猜你喜欢:

    C++中一维数组是什么?怎么使用?

    数组是什么?看完你就明白了

    C/C :指针数组和数组指针浅析

    C语言二维数组的定义和引用

    0 分享到:
    和我们在线交谈!
    【网站地图】【sitemap】