目录

二维数组的定义:

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

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


之前讲解的一维数组可以看作是一行连续的数据,只有一个下标,称为一维数组。在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以确定它在数组中的位置。本节只介绍二维数组,多维数组可由二维数组类推而得到。

二维数组的定义:

二维数组定义的一般形式是:

dataType arrayName[length1][length2];

其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。

我们可以将二维数组看做一个 Excel 表格,有行有列,length1 表示行数,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列。例如:

int a[3][4];

定义了一个 3 行 4 列的二维数组,共有 3×4=12 个元素,数组名为 a,即:

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 轴。

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

在C语言中,二维数组是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4)=48 个字节。

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

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

--

Math

C

English

张涛

80

75

92

王正华

61

65

71

李丽丽

59

63

70

赵圈圈

85

87

90

周梦真

76

77

85

对于该题目,可以定义一个二维数组 a[5][3] 存放 5 个人 3 门课的成绩,定义一个一维数组 v[3] 存放各科平均分,再定义一个变量 average 存放总平均分。最终编程如下:

#include <cstdio>
int main(){int i, j;  //二维数组下标int sum = 0;  //当前科目的总成绩int average;  //总平均分int v[3];  //各科平均分int a[5][3];  //用来保存每个同学各科成绩的二维数组printf("Input score:\n");for(i=0; i<3; i++){for(j=0; j<5; j++){scanf("%d", &a[j][i]);  //输入每个同学的各科成绩sum += a[j][i];  //计算当前科目的总成绩}v[i]=sum/5;  // 当前科目的平均分sum=0;}average = (v[0] + v[1] + v[2]) / 3;printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);printf("Total: %d\n", average);return 0;
}

运行结果:
Input score:
80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙
Math: 72
C Languag: 73
English: 81
Total: 75

程序使用了一个嵌套循环来读取所有学生所有科目的成绩。在内层循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内层循环(进入外层循环)后再把该累加成绩除以 5 送入 v[i] 中,这就是该门课程的平均分。外层循环共循环三次,分别求出三门课各自的平均成绩并存放在数组 v 中。所有循环结束后,把 v[0]、v[1]、v[2] 相加除以 3 就可以得到总平均分。

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

二维数组的初始化可以按行分段赋值,也可按行连续赋值。

例如,对于数组 a[5][3],按行分段赋值应该写作:

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

按行连续赋值应该写作:

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

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

【实例2】和“实例1”类似,依然求各科的平均分和总平均分,不过本例要求在初始化数组的时候直接给出成绩

#include <cstdio>
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("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);printf("Total: %d\n", average);return 0;
}

运行结果:
Math: 72
C Languag: 73
English: 81
Total: 75

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

1) 可以只对部分元素赋值,未赋值的元素自动取“零”值。例如:

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

是对每一行的第一列元素赋值,未赋值的元素的值为 0。赋值后各元素的值为:
1  0  0
2  0  0
3  0  0

再如:

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

赋值后各元素的值为:
0  1  0
0  0  2
3  0  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) 二维数组可以看作是由一维数组嵌套而成的;如果一个数组的每个元素又是一个数组,那么它就是二维数组。当然,前提是各个元素的类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组,C语言允许这种分解。

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

这三个一维数组可以直接拿来使用。这三个一维数组都有 4 个元素,比如,一维数组 a[0] 的元素为 a[0][0]、a[0][1]、a[0][2]、a[0][3]。

二维数组 详解(C++)相关推荐

  1. 1.3 Java二维数组详解

    为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来.二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列.下面 ...

  2. C语言 指针+二维数组详解 (应付期末、考研的最强笔记,建议收藏)

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  3. Java二维数组详解:二维数组的声明和初始化,以及获取二维数组的值

    为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来.二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列.下面 ...

  4. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  5. java二维数组怎么看_java、二维数组详解!

    /* java 二维数组的概念 使用方法! 1.什么是二维数组? 答案:数组的数组! 他的每一个元素都是数组!二维数组是(存储一维数组的)一维数组. 2.如何定义?(以二维数组为列) int arr[ ...

  6. java 二维数组 的方法和属性_Java一维数组和二维数组详解(Java必备知识)

    数组是最为常见的一种数据结构,分为一级数组,二维数组以及多维数组.是把相同数据类型的元素,用一个标识符封装到一起的基本类型数据序列或对象序列. 目录 一维数组 创建一维数组 给一维数组赋值 获取数组的 ...

  7. c语言中一维数组和二维数组,详解C++中的一维数组和二维数组

    C++一维数组 定义一维数组 定义一维数组的一般格式为: 类型标识符  数组名[常量表达式]; 例如: int a[10]; 它表示数组名为a,此数组为整型,有10个元素. 关于一维数组的几点说明: ...

  8. 【C语言数组】一维数组,二维数组详解,数组传参,变长数组,这篇文章让你更全面的认识数组。

    前言: 大家好,我是良辰丫

  9. 二维数组(解引用、指针数组、数组的指针)——C语言

    二维数组 在说二维数组前先来说下一维数组中的指针数组和和数组的指针 一.一维数组中指针数组和数组指针的区别 指针数组: 1 int *p[5]; []的优先级比*高,首先它是一个数组,它的大小是5,它 ...

  10. php 二维数组排序详解: array_multisort

      定义和用法 array_multisort() 函数返回一个排序数组.您可以输入一个或多个数组.函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序. 注释: ...

最新文章

  1. 项目管理生命周期各个阶段的文档
  2. 算法提高课-搜索-DFS之搜索顺序-AcWing 1117. 单词接龙:dfs
  3. 运放全波整流电路_10种精密全波整流电路
  4. 解决jsp两种提交方式乱码 的方法
  5. 那两个告扎克伯格抄袭的斜杠青年,后来怎么样了?
  6. 《Spring微服务实战》读书笔记——构建微服务
  7. java 安祿山,夏天吃生菜最清爽,生菜上澆點蠔油,做法簡單,卻好吃到不行,換成肉還跟我生氣!...
  8. 全网最详细的纪录片观看&下载指南
  9. linux如何查看内存命令
  10. Panel 控件概述(Windows 窗体)
  11. 记一次勒索病毒的遭遇
  12. docker安装gitlab
  13. 王垠:如何掌握所有的程序语言
  14. Erlang_ets冷门函数fun2ms
  15. Android 密码丢了,丢失密钥库密码
  16. 三个关于数绵羊的故事……
  17. 【LeetCode】两道贪心算法题目-455分发饼干,860柠檬水找零
  18. 自然语言处理中的Character Embedding技术
  19. Python数据分析-绘图-3-Bokeh交互式绘图-1-基本构成与语法
  20. 怎么把已经初始化的字符数组设置为空?

热门文章

  1. Spring Boot 如何极简入门?
  2. Java 容器源码分析之 ArrayList
  3. 关于Myeclipse自带JDK与本机安装JDK的的区别
  4. mysql修改有外键约束的表结构
  5. 三网融合:不给安全营造“盗梦空间”
  6. CISSP的成长之路(一):CISSP简要介绍
  7. RocketMq最佳实践
  8. matlab2014 下的 libsvm 安装
  9. MCU芯片缺货涨价 国内厂商机遇和挑战并存
  10. java初学者,应该怎么去学习?