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

首页技术文章正文

C++二维数组的定义和用法

更新时间:2020-05-08 来源:黑马程序员 浏览量:

1577370495235_学IT就到黑马程序员.gif

二维数组的定义与初始化

在实际的工作中,仅仅使用一维数组是远远不够的,例如,一个学习小组有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<stdio.h>

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<stdio.h>

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++培训:一维数组的常见操作

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名