代码编织梦想

用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入、处理和输出。

在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什么呢?让我们认识一下这位武功高强的大哥吧!

1. 双下标变量

聪明的你一定能够顾名思义了吧,简单举个例子:Array [2] [3]

Array 是数组名,后面的两个方括号内分别放行下标和列下标,这里的行下标和列下标就是所谓的双下标。

这里的下标规则和一维数组的下标规则一模一样:

(1)可以是正的整形变量:

eg:Array [2] [3];

(2)可以是字符常量:

eg:Array [‘A’] [‘B’] = Array [65] [66];(不清楚字符常量的同学可以点击:

(3)可以是有确定值的表达式:

eg:Array [i+1] [j+2]、Array [ A[1] ] [ A[2] ];

总而言之,这里的下标分别表示行数和列数。

接下来和小编一起感受一下双下标变量的威力。

上下标变量可以使方程组的计算更简单,比如:

计算一个二元一次线性方程组:

$$left{egin{matrix}7*x_{1}-4*x_{2}=7\-2*x_{1}+3*x_{2}=-1end{matrix}ight.$$

它的一般表达式为:

$$left{egin{matrix}a11*x1+a12*x2=b1\a21*x1+a22*x2=b2end{matrix}ight.$$

我们可以写出一个该方程组的增广矩阵:

$$egin{pmatrix}a11& a12& b1\a21& a22& b2end{pmatrix}$$

运用克拉默法则可得:

$$x1=(b1*a22-b2*a12)/(a11*a22-a21*a12)$$

$$x2=(a11*b2-a21*b1)/(a11*a22-a21*a12)$$

因为矩阵的本质其实就是二维数表,我们可以用二维数组来表示这个方程组的系数。

我们先定义一个二维数表:a[2][2],和一个一维数表:b[2]

那么a11可以写成:a[0][0],a12可以写成 a[0][1],a21,a22同理。则:

$$x1=(b[0]*a[1][1]-b[1]*a[0][1])/(a[0][0]*a[1][1]-a[1][0]*a[0][1])$$

x2道理一样。

所以,通过双下标变量,我们只需要为a[i][j],b[i]中的元素赋值,便可以轻松解决方程组的问题。

另外,通过双下标变量来表示一张二维数表,使下标变量的行列下标正好与数据在表格中的位置相对应,形象直观地反映了二维表格。

2. 二维数组定义

很简单,由双下标变量定义的数组就称为二维数组,双下标变量就是数组的元素。

二维数组定义的一般形式和一维数组大同小异,只是下表中的常量表达式多了一个(维度加一):

  [] []

例如:float a [3] [4],b [5] [6];

这里的float表示二维数组中元素的类型是单精度浮点型,a、b就是给数组取的名字。

注意:a [3] [4] 千万千万不要写成 a [3 , 4] !

上面我们把二维数组理解成二维图表,我们也可以将二维数组看成元素是一维数组的一维数组,将维数降低。

比如 a [3] [4],我们可以把a看成一个一维数组,里面有三个元素:a [0]、a [1]、a[2],每个元素又包含4个元素:

a [0]

a [0] [1]

a [0] [2]

a [0] [3]

a [0] [4]

a [1]

a [1] [1]

a [1] [2]

a [1] [3]

a [1] [4]

a [2]

a [2] [1]

a [2] [2]

a [2] [3]

a [2] [4]

这种理解方法在数据初始化和用指针表示时显得很方便。

在C语言中,二维数组中元素排列的顺序是按行存放的,就是说先排列第一行的数据,再排列下第二行的数据,以此类推。如图:

dd43c715921bc9e5247c84579a9973e7.png

数组元素可以出现在表达式中也可以被赋值,例如:b[1] [2] = a [1] [3] / 2。

小编在这里想提醒一下:要严格区分定义数组时用的 a [5] [6] 和引用元素时的 a [5] [6] 的区别哦!

3. 二维数组的初始化

对二维数组的初始化有一下几种办法:

(1)分行给二维数组赋值

这个方法用到了我们前面讲的对二维数组的降维理解,比如:

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

此语句先将第一行元素依次赋值为:1、2、3,然后将第二行元素赋值为:4、5、6,因此说是按行赋值。

(2) 可以只有一个花括号,按二维数组元素的排列顺序对各元素依次赋值

比如:

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

(3)对部分元素赋初值

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

此语句表示只给第一行第一个元素赋值为2,第二行第一个元素赋值为4,而其他元素都为0。

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

此语句表示只给第一行三个元素分别赋值为:1、2、3。

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

此语句表示只给第二行三个元素分别赋值为:1、2、3。

(4)定义数组时对第一维的长度可以不定义,但必须定义第二维的长度

例:

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

系统会根据输入的总个数分配存储空间,易知这个二维数组有二行;

再如:

bb52e580e0b81e57b0b385791c46a612.png

有关二维数组的知识就讲到这里啦,欢迎小伙伴来交流哦!

预告:二维数组的应用

2020-04-21

17:26:54

二维数组中的查找(c语言)-爱代码爱编程

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 #include "stdio.h" int find(int data[4][4], int rows, int columns, int number);  main() {

二维数组中的查找及c语言中二维数组做函数参数-爱代码爱编程

今天写一个在二维数组中查找某个数的程序,题目如下:      在一个二维数组中,每一行都按照从左到右的一次递增的顺排序,每一列按照从上到下依次递增顺序排序。完成这样的一个函数,输入一个二维数组和一个整数,判断数组中是否存在该整数。  看到题目我首先想到的是,把整个数组遍历一下,不就行了,显然这是一个效率极低而且愚蠢的做法。那么我们是否可以利用这

二维数组中的查找(c语言实现)_kangxidagege的博客-爱代码爱编程_c语言查找二维数组里面的一个数的位置

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思考:在这个二维数组的每一行中,最左边的数字是最小的,在每一列中,最上面的数字是最小的;那么,我们可以找到一个中间值(即第一行的最右边元素,也是最后一列的第一个元

剑指offer:二维数组中的查找(c语言)_走出去拍拍照的博客-爱代码爱编程

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一行都按从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判读数组中是否含有该整数。 分析:首先想到的是遍历整个数组,这样肯定能找出来,但是那样的时间复杂度就是O(n)了。按照常规来说,这个是不可取的。既然这是一个有规律的数组,那么我们可以找到一个突破口,如果我们找这个数

c语言:二维数组中的查找_oyhuahua的博客-爱代码爱编程

在一个二维数组中,每一行都按照从左往右递增的顺序排序,每一列都按照从上往下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 解题思路:该题查找一个二维数组的数时,通过查找的规律发现,当从该二维数组的最右上角查找开始,如果查找的数小于该数,那么这一列的数据都将大于要查找的数组,当查找的数大于该数时,那么这一行的数据

二维数组中的查找(C++简单区)-爱代码爱编程

二维数组中的查找 题目: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16

二维数组的查找(C语言)-爱代码爱编程

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> /* 分析特性,得到规律如下: 要查找的数值如果比右上角的值大,那么它将大于整个行; 要查找的数值比如果右上角的值小,那么它将小于整个列。 如果相等的话,查找就结束了*/ /* * 参数1:矩阵数组

二维数组中的查找---C语言(剑指offer)-爱代码爱编程

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10,

二维数组查找c语言-爱代码爱编程

#include <stdio.h> #include<stdlib.h> //自定义的输出函数 int find_array(int a[][3],int value){ for (int i=0;i<3;i++){ int start=0; int end=2; while (start<=end)

lc 04 | 二维数组中查找某元素-爱代码爱编程

lc 04 | 二维数组中查找某元素 题目描述解题思路 题目描述 解题思路 (1)我自己的思路是: 首先确定 target 可能存在的第一行 i对第 i 行的元素进行二分,若存在,则返回true;若不存在,则继续对第 i 行最后锁定的元素所在列,继续向下遍历,若存在则返回true,否则对于第一个大于target的值,则在该行向左移动,

c语言二维数组字符串赋值,C语言笔记(二)--- 数组、函数-爱代码爱编程

七、数组 在C语言中,数组属于构造数据类型。 数组根据元素的类型不同,数组又可以分为 数值数组 、字符数组 、指针数组 、结构数组 等各种类别。 本章介绍 数值数组 和 字符数组 。 1. 一维数组的定义和引用 定义: 类型说明符 数组名 [常量表达式]; 例如:int a[10]; float b[10],c[20]; char ch[2

c语言定二维义数组,C语言二维数组超细讲解-爱代码爱编程

用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入、处理和输出。 在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什么呢?让我们认识一下这位武功高强的大哥吧! 1. 双下标变量 先来认识一下双下标变量,聪明的你一定能够顾名思义了吧,简单举个例子:Array[2][

c语言为二维数组动态分配空间,二维数组定义以及动态分配空间-爱代码爱编程

你是否正在寻找关于二维数组的内容?让我把最简洁的东西奉献给你: 二维数组定义以及动态分配空间 下面三种定义形式怎么理解?怎么动态分配空间? (1)、int **Ptr; (2)、int *Ptr[ 5 ]; 我更喜欢写成 int* Prt[5]; (3)、int ( *Ptr )[ 5 ]; 此文引自网上,出处不详,但是觉得非常好。略改了一

C语言练习9---数组查找元素-爱代码爱编程

1. 一个二维数组 按从小到大排列,我们可以按照 分块查询的方式 查找此元素,找到了 返回其下标 (1) 普通版 #include <stdio.h> #include <stdlib.h> int FindValue(int arr[][5], int abs, int ord, int val) { int i =