C语言---二维数组

1.1 概念

        逻辑上有行有列的数组,称为二维数组。相对来讲,只有行这种单一线性结构的数组称为一维数组。二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。定义由行和列组成的二维表格形式元素,二维数组其实也就是矩阵基本格式。访问二维数组需要两个值来确定这个二维数组的位置,即某行某列。

1.2 语法结构
1.2.1 二维数组的声明

数据类型 数组名 【行数】【列数】;

eg:int arr[2][3] 

行数以及列数代表了该数组结构中有几行几列,必须是整形常量表达式,同时需要大于0。

1.2.2 初始化二维数组

数据类型  数组名【行数】【列数】=  {值};

以下是二维数组的完全初始化以及不完全初始化:

1.2.3 访问二维数组

和一维数组一样,使用二维数组也是通过访问二维数组的元素来实现。

语法:

数组名 【行下标】【列下标】;

行下标范围:【0,行数-1】

列下标范围:【0,列数-1】

1.2.4 二维数组的本质

(1)二维数组的逻辑结构如下:

(2)可以通过代码实现看到二维数组的内存结构也是连续的:

        因此从计算机的角度来看,不存在二维数组这种物理结构,实际上计算机编译器所理解的二维数组只不过是由若干个一维数组嵌套而成的一维数组,即是一维数组的嵌套。

        如上图所示,int a[3][3]二维数组在计算机中的处理,代表了有三个一维数组组成的所谓的二维数组,这也是为什么在初始化时,行数可以省略,而列数不可省略的原因。

int arr2[][3] = { 1,2,3,4,5,6 }; //列数必须写,根据列数自动分配行数;行数可不写, 行数代表元素个数,

        图中紫色部分代表行数,它在某种理解上来讲是可变的。它是相对于该一维数组的第一个元素的位置。若按我们认知的二维数组逻辑结构来运行以下代码,会产生’越界‘访问,然而计算机在实际处理中,是可以正常访问的,运行结果如下,是数值4。即访问的是第一个一维数组,相对于第一个元素的第三个位置上的元素。

int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
printf("%d", arr[0][3]);

1.2.5 数组的下标具体代表什么

        下标:相对于数组的第一个元素的位置。

   1.3 二维数组的应用
1.3.1 二维数组的遍历

嵌套循环,外层是行,内层是列

#include<stdio.h>
int main() {
	int a[3][3] = { 1,2,3,4,6,8,9,20,24 };
	int i, j;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%d\t", a[i][j]);
		}
		putchar('\n');
	}
}
1.3.2 二维数组的行列置换代码实现

for循环实现:

#include <stdio.h>
int main()
{
	int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int i, j, t;
	//遍历数组 依次打印
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++) {
			printf("%d\t", arr[i][j]);
		}
		putchar('\n');
	}
	//交换行列上的数据
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++) {
			if (i < j) {
				t = arr[i][j];
				arr[i][j] = arr[j][i];
				arr[j][i] = t;
			}
		}
		putchar('\n');
	}
	printf("**************************************\n");

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++) {
			printf("%d\t", arr[i][j]);
		}
		putchar('\n');
	}

	return 0;
}

	/*
	0 2  1 0
	0 2  2 0
	1 2  2 1
	*/

运行结果如下:

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值