Java教程

计算机科学类专升本复习之“二维数组“详解(初稿)

本文主要是介绍计算机科学类专升本复习之“二维数组“详解(初稿),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

有了一维数组的基础,咱们来学习二维数组!!

一维数组连接:计算机科学类专升本复习之“一维数组“详解(初稿)_阿泉的博客-CSDN博客

首先 二维数组的一般形式

int a[length1][length2];   意思为:  数组类型  数组名 [下标1][下标2];

我们可以将二维数组看做一个 Excel 表格,有行有列

length1 表示行数,length2 表示列数

要在二维数组中定位某个元素,必须同时指明行和列。

例如 int a[3][4]; //定义一个3行4列的二维数组,共有 3*4=12个元素

分别为:

a[0][0], a[0][1], a[0][2], a[0][3]

a[1][0], a[1][1], a[1][2], a[1][3]

a[2][0], a[2][1], a[2][2], a[2][3]

如果想表示第 2 行第 1 列的元素,应该写作 a[2][1]。

//也可以将二维数组看成一个坐标系,有 x 轴和 y 轴,

要想在一个平面中确定一个点,必须同时知道 x 轴和 y 轴。

二维数组在概念上是二维的,但在内存中是连续存放的;

换句话说,二维数组的各个元素是相互挨着的,彼此之间没有缝隙。

那么,如何在线性内存中存放二维数组呢?有两种方式:

1. 一种是按行排列,即放完一行之后再放入第二行;

2. 另一种是按列排列, 即放完一列之后再放入第二列。

但是在"C语言"中,二维数组是"按行"排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;

每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4)=48 个字节。

大家可以这样认为,二维数组是由多个长度相同的一维数组构成的。

举个例子吧,更容易理解!

//一个学习小组有 5 个人,每个人有 3 门课程的考试成绩,求该小组各科的平均分和总平均分。

 姓名      数学   C语言   英语

 康康       88     59      50

 小王       99     88      77

 老王       88     99      66

 张三       87     65      99

 李四       99     99      99

对于该题目,可以定义一个二维数组 a[5][3] 存放 5 个人 3 门课的成绩,//因为咱们C语言是按行来执行的,5人5行

定义一个一维数组 v[3] 存放各科平均分,

再定义一个变量 average 存放总平均分。

最终编程如下:

#include<stdio.h>

int main()

{

    int i,j;//定义二维数组的下标

    int sum=0;//对学科成绩进行初始化,保证一开始成绩为0

    int average;  //总平均分

    int v[3];//各科平均分

    int a[5][3];//定义一个用来保存每个同学各科成绩的二维数组

    printf("请分别输入每个人各科的成绩:\n");

    //前面for循环的时候就讲到,必须掌握,到了数组才能玩得666,现在它来了

    for(i=0;i<3;i++)

    {      //这边解答一下,因为每个同学都有3们成绩,所以外层循环设置为"科目"

        for(j=0;j<5;j++)

        {

            scanf("%d",&a[j][i]);//输入每个同学的各科成绩,切记 & 别漏了

            sum += a[j][i];

        }

        v[i]=sum/5; //当前科目的平均分

        sum=0;//对总成绩进行初始化,保证下一位的初试成绩为0

    }

    average = (v[0]+v[1]+v[2])/3;

    printf(" 数学:%d \nC语言:%d \n 英语:%d \n",v[0],v[1],v[2]);

    printf("Toatl:%d\n",average);

    return 0;

}

二维数组的初始化(赋值)

有两种

1. 按行"分段"赋值

eg:

    int a[2][3]={{1,2,3},{8,9,8}};

2. 按行"连续"赋值

    int a[2][3]={1,2,3,8,9,8};

这两种赋初值的结果是完全相同的。

这边咱们再来举个例子,依然是求各科的平均分和总平均分,不过本例要求在初始化的时候就要直接给出成绩

#include <stdio.h>

int main(){

    int i, j;  //二维数组下标

    int sum = 0;  //当前科目的总成绩

    int average;  //总平均分

    int v[3];  //各科平均分

    int a[5][3] = {{80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85}};

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

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

            sum += a[j][i];  //计算当前科目的总成绩

        }

        v[i] = sum / 5;  // 当前科目的平均分

        sum = 0;

    }

    average = (v[0] + v[1] + v[2]) / 3;

    printf(" 数学:%d \nC语言:%d \n 英语:%d \n", v[0], v[1], v[2]);

    printf("Total: %d\n", average);

    return 0;

}

对二维数组初始化 还需要 注意以下几点:

1. 可以只对部分元素赋值,未赋值的元素自动取"0"值

例如:

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

则是对每一行的第一列元素赋值,未赋值的元素的值为 0。

具体如下:

a[0][0]=1  a[0][1]=0  a[0][2]=0

a[1][0]=2  a[1][1]=0  a[1][2]=0

a[2][0]=3  a[2][1]=0  a[2][2]=0

2. 如果对全部元素赋值,那么"一位素组的下标/长度"可以不给出, 但是二维数组必须给出

例如:

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

可以写为:

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

3.二维数组可以看作是由 多个一维数组嵌套而成的;

如果一个数组的每个元素又是一个数组,那么它就是二维数组。当然,前提是各个元素的类型必须相同。

一个二维数组也可以分解为多个一维数组。

例如:二维数组a[3][4]可分解为三个一维数组,它们的数组名分别为 a[0]、a[1]、a[2]。


 

       

这篇关于计算机科学类专升本复习之“二维数组“详解(初稿)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!