C语言基础知识(二)——二维数组
二维数组本质
二维数组本质就是一维数组,只不过**形式是二维**,类似矩阵,使用二维数组表示会更加形象。
二维数组实例
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语言基础知识(二)——二维数组的更多相关文章
- C语言基础知识-数组和字符串
C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- LeetCode刷题191130 --基础知识篇 二叉搜索树
休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- C语言基础知识-程序流程结构
C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...
- C语言中指针和多维数组
指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...
随机推荐
- Centos下安装Docker,并配置国内docker源
Centos下安装Docker 替换为国内的yum源(可选): mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.re ...
- 美国在线CEO:雅虎被Verizon收购或导致裁员
北京时间9月13日消息,据外媒报道,AOL首席执行官蒂姆·阿姆斯特朗(Tim Armstrong)称,雅虎.AOL和Verizon整合业务,将导致"部分工作岗位的变化". 阿姆斯特 ...
- SVN 部署(基于 Linux)
1.通过 yum 命令安装 svnserve,命令如下: # 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 yum -y install subversion # 若需查看 ...
- 2) 接口规范 原生django接口、单查群查 postman工具 CBV源码解析
内容了解 """ .接口:什么是接口.restful接口规范 .CBV生命周期源码 - 基于restful规范下的CBV接口 .请求组件.解析组件.响应组件 .序列化组件 ...
- HTTP请求头中的X-Forwarded-For介绍
概述 我们在做nginx方向代理的时候,为了记录整个代理过程,我们往往会在配置文件中加上如下配置: location ^~ /app/download/ { ... proxy_set_header ...
- SQLite使用(一)
简单介绍SQLite常用API: int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **p ...
- Thinkphp 缓存RCE
5.0.0<=ThinkPHP5<=5.0.10 . 漏洞利用条件: 1.基于tp5开发的代码中使用了Cache::set 进行缓存 2.在利用版本范围内 3.runtime目录可以 ...
- 记jmeter接口测试动态获取验证码
在用jmeter做接口测试时,需要动态的获取验证码,以便在登录成功后可以获取token,但是在测试的过程中,遇到了一个问题,想在这里给大家分享一下: 环境描述 在获取验证码的http请求下加后 ...
- 带你看看Java的锁(二)-Semaphore
前言 简介 Semaphore 中文称信号量,它和ReentrantLock 有所区别,ReentrantLock是排他的,也就是只能允许一个线程拥有资源,Semaphore是共享的,它允许多个线程同 ...
- 《Vue.js 2.x实践指南》 已出版
<Vue.js 2.x实践指南>其实在一年前就已经完稿了,只是由于疫情的缘故耽搁了很久才下厂印刷.阅读本书需要具备HTML.CSS和JS基础,本书针对的用户群体主要是:想要快速学习vue技 ...