二维数组本质

二维数组本质就是一维数组,只不过**形式是二维**,类似矩阵,使用二维数组表示会更加形象。

二维数组实例

    float rain[5][12];    //内含5个数组元素的数组,每个数组元素内含12个float类型的元素,形如5行12列的表格
形式如表1-1所示:
第一列 第二列 第三列 第四列 第五列 第六列 第七列 第八列 第九列 第十列 第十一列 第十二列
第一行 rain[0][0] rain[0][1] rain[0][2] rain[0][3] rain[0][4] rain[0][5] rain[0][6] rain[0][7] rain[0][8] rain[0][9] rain[0][10] rain[0][11]
第二行 rain[1][0] rain[1][1] rain[1][2] rain[1][3] rain[1][4] rain[1][5] rain[1][6] rain[1][7] rain[1][8] rain[1][9] rain[1][10] rain[1][11]
第三行 rain[2][0] rain[2][1] rain[2][2] rain[2][3] rain[2][4] rain[2][5] rain[2][6] rain[2][7] rain[2][8] rain[2][9] rain[2][10] rain[2][11]
第四行 rain[3][0] rain[3][1] rain[3][2] rain[3][3] rain[3][4] rain[3][5] rain[3][6] rain[3][7] rain[3][8] rain[3][9] rain[3][10] rain[3][11]
第五行 rain[4][0] rain[4][1] rain[4][2] rain[4][3] rain[4][4] rain[4][5] rain[4][6] rain[4][7] rain[4][8] rain[4][9] rain[4][10] rain[4][11]
注:表1-1中每个单元格代表一个元素

示例代码如下:
/***********************************
* @file rain.c
* @author bijiaqin
* @date 2019年12月1日
* @note 二维数组示例,计算每年降水量、平均降水量和五年中每月的平均降水量
* *********************************
*/ #include "stdio.h"
#include "stdint.h" #define MONTHS 12
#define YEARS 5 int main(void)
{
const float rain[YEARS][MONTHS] = {
{4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
{8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3},
{9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4},
{7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2},
{7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2}
}; int year, month;
float subtot, total;
for(year = 0, total = 0; year < YEARS; year ++)
{
for(month = 0, subtot = 0; month < MONTHS; month ++)
{
subtot += rain[year][month]; /**< 每一年各月的降水量总和 */
}
printf("%5d %12.1f\n", 2010 + year, subtot);
total += subtot; /*< 5年总降水量 */
}
printf("\n");
printf("The yearly average is %.1f inches. \n\n", total / subtot);
printf("Monthly avergaes: \n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n");
for(month = 0; month < MONTHS; month ++)
{
for(year = 0; year < YEARS; year ++)
{
subtot += rain[year][month]; /**< 每年总降水量 */
}
printf("%4.1f", subtot / YEARS);
}
printf("\n"); return 0;
}

处理二维数组常用方法

嵌套循环,如示例代码连续两个两层for循环用来计算总降水量和每个月的总降水量。

关于初始化

二维数组初始化通常习惯用**花括号套花括号**,中间用','隔开,如上面代码所示,当然也可以省略里面的花括号,只要保证元素个数正确、按行初始化即可,如:
const float rain[YEARS][MONTHS] = {
4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6,
8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3,
9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4,
7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2,
7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2,
};
有嵌套花括号时,可按照一维数组的初始化规范,某行数组初始化元素不足时其它位为0,不影响当前行其它数组元素;某行数组初始化元素越界则会出错,但同样不会影响其它行数组的初始化。

二维数组延申——多维数组

如三维数组
int triArrays[2][3][4] = {
{
{2, [1] = 8, 4}, /**< 第四个元素位初始化,则默认为0,第二个元素使用下标进行初始化
{1, 2, 3, 4},
{1, 2, 3, 4}
},
{
{2, 3, 4, 5},
{2, 3, 4, 5},
{2, 3, 4, 5}
}
};
多维数组处理方法:
二维数组采用两层嵌套循环,三层采用三层循环,以此类推。

C语言基础知识(二)——二维数组的更多相关文章

  1. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  2. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  3. LeetCode刷题191130 --基础知识篇 二叉搜索树

    休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...

  4. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  5. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  6. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  7. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  8. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  9. C语言中指针和多维数组

    指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...

  10. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

随机推荐

  1. 【Linux题目】第五关

    1. 如何取得/etiantian文件的权限对应的数字内容,如-rw-r-r 为644,要求使用命令取得644或0644这样的数字. 解答: 方法1:用sed获取stat filename里的属性值 ...

  2. javascript SDK开发之webpack打包支持对象展开运算符...

    场景:使用了对象的展开运算符,webpack打包报错,错误如下:Parsing error: Unexpected token - 1.安装依赖 npm install babel-preset-st ...

  3. 让webpack打包支持ES7的async/await语法

    npm install --save-dev babel-plugin-transform-runtime npm install --save babel-runtime .babelrc配置 { ...

  4. IIS6服务器的请求流程(图文&源码)

    1.IIS 7开发与管理完全参考手册  http://book.51cto.com/art/200908/146040.htm 2.Web服务IIS 6   https://technet.micro ...

  5. 题解 AT4867 【[ABC155D] Pairs】

    题目 两次二分 首先对ans进行二分,在\([-10^{18},10^{18}]\)之间 考虑怎么check 对于每个ans,枚举每个\(a_i\),二分查找有几个\(a_j\),使得\(a_i\ti ...

  6. C :uthash

    参考: [1] uthash | 学步园 [2] 源码 [3] 官方文档 [4] [5] 一.哈希表的概念及作用 在一般的线性表或者树中,我们所储存的值写它的存储位置的关系是随机的.因此,在查找过程中 ...

  7. K - Leapin' Lizards HDU - 2732 网络流

    题目链接:https://vjudge.net/contest/299467#problem/K 这个题目从数据范围来看可以发现是网络流,怎么建图呢?这个其实不是特别难,主要是读题难. 这个建图就是把 ...

  8. CSS的基本语法及页面引用

    CSS的基本语法及页面引用 CSS基本语法 CSS的定义方法是: 选择器 { 属性:值; 属性:值; 属性:值;} 选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性每个属性有一个或多个 ...

  9. Spring源码阅读 之 配置的读取,解析

    在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...

  10. uniapp自定义简单弹窗组件

    2.0(2019-08-31) 船新版本的信息弹窗组件 插件市场地址:http://ext.dcloud.net.cn/plugin?id=672 可以弹出很多条信息,并单独控制消失时间.点击消失. ...