代码编织梦想

C语言目录

C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组

二维数组

前面介绍了一维数组,接下来介绍如何定义和使用二维数组。

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

类型说明符 数组名[常量表达式1][常量表达式2]

与一维数组的定义唯一的不同是多了一个常量表达式2,其中,常量表达式1为第一维的长度,常量表达式2为第二维的长度。通常在处理二维数组的时候,为了便于理解,都将数组视为一个矩阵,常量表达式1表示矩阵的行数,而常量表达式2表示矩阵的列数。与一维数组一样,在定义二维数组时,常量表达式同样不能为变量。下面先通过一段代码来看二维数组的定义。

#include<stdio.h>

#define M 4
#define N 3


int main() {
  int arr[M][N];
  for (int i = 0; i < M; i++)
  {
    for (int j = 0; j < N; j++)
    {
      printf("&arr[%d][%d]=%d\t", i, j, &arr[i][j]);
    }
    printf("\n");
  }
  return 0;
}

运行结果:
在这里插入图片描述
将二维数组arr视为一个矩阵,下图显示了数组中每个元素在矩阵中的存放位置。
image.png
数组中各个元素在矩阵中对应的位置由二维数组的两个下标决定。我们可以将定义的二维数组int arr[4][3]视为由arr[4]和int [3] 两部分构成,将arr[4]视为一个整型一维数组,其中含有4个元素arr[0]、arr[1]、arr[2]、arr[3],每个元素都是int[3]类型的,也就是说,每个元素又是一个一维数组,每个一维数组含有3个元素,如arr[0]含有arr[0][1]、arr[0][1]、arr[0][2]三个元素。

知道了二维数组的这种特殊结构之后,接下来通过下图来了解二维数组在内存中的存储结构。
image.png
通过上述二维数组在内存中的存储结构图可以发现,二维数组中的所有元素都存储在一片连续的内存单元中,所占用的内存大小为元素类型所占用的内存大小乘以第一维及第二维的长度。如果以矩阵的方式来分析二维数组的存储方式,那么先从矩阵第一行从左往右依次存储完所有元素,然后按照同样的方法存储第二行的所有元素,直到存储完所有数组元素为止。

接下来再看一个二维数组的示例:

任意输入一个3行3列的二维数组,求对角元素之和

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
  int arr[3][3];
  int i, j, sum = 0;
  printf("please input:\n");
  for (i = 0; i < 3; i++)
  {
    for (j = 0; j < 3; j++)
    {
      scanf("%d", &arr[i][j]);
    }
  }
  for (i = 0; i < 3; i++)
  {
    for ( j = 0; j < 3; j++)
    {
      if (i==j)
      {
        sum += arr[i][j];
      }
    }
  }
  printf("the result is: %d\n", sum);
  return 0;
}

运行结果如下:
在这里插入图片描述
关于以为数组就介绍到这,后面继续更新。。。

如果您觉得本篇文章对您有帮助,请转发给更多的人
C语言中文社区】是一个C语言视频教程、学习笔记、电子书、计算机二级资料等专注于C语言编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/csdn_wangchong/article/details/104209962

PTA|《C语言程序设计(第3版)》练习3-7 成绩转换 (15分)-爱代码爱编程

题目 本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则: 大于等于90分为A;小于90且大于等于80为B;小于80且大于等于70为C;小于70且大于等于60为D;小于60为E。输入格式: 输入在一行中给出一个整数的百分制成绩。 输出格式: 在一行中输出对应的五分制成绩。 输入样例: 90 输出样例: A 参考解答 #incl

PTA|《C语言程序设计(第3版)》练习3-5 输出闰年 (15分)-爱代码爱编程

题目 输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

C语言----三子棋的实现-爱代码爱编程

g.h #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void InitBoard(char board[ROW][COL], int row, int col);//打印空格 void Display

PTA|《C语言程序设计(第3版)》练习3-8 查询水果价格 (15分)-爱代码爱编程

题目 给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。 首先在屏幕上显示以下菜单: [1] apple [2] pear [3] orange [4] grape [0] exit 用户可以输入编号1~4查询对

PTA|《C语言程序设计(第3版)》习题3-1 比较大小 (10分)-爱代码爱编程

题目 本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数,其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。 输入样例: 4 2 8 输出样例: 2->4->8 参考解答 #include<stdio.h> int main(){ in

C语言经典例24-分数累加和-爱代码爱编程

目录 1 题目2 分析3 实现4 运行结果 1 题目 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。 2 分析 本题实质是要看出序列的规律,显而易见,规律就是处第一个数以外,后一个数的分子为前一个数的分子分母之和,后一个数的分母是上一个数的分子 3 实现 #include <st

leetcode数组中的问题(二)-爱代码爱编程

    目录 15. 三数之和 18. 四数之和 454. 四数相加 II 280. 摆动排序🔒 324. 摆动排序 II 347. 前 K 个高频元素 977. 有序数组的平方 360. 有序转化数组🔒 986. 区间列表的交集 56. 合并区间 15. 三数之和 https://leetcode-cn.com/problem

剑指offer-30. 连续子数组的最大和-爱代码爱编程

题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3

剑指offer-29. 最小的K个数-爱代码爱编程

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解题思路: 先对数组进行排序,然后依次打印前k个数即可 代码实现: class Solution { /* 先对数组进行排序,然后依次打印前k个数即可,时间复杂度O(n^2) */

剑指Offer5——二维数组中查找-爱代码爱编程

在一个二维数组中,每一行都按照从左至右递增的顺序排序,每一列都按照从上至下递增的顺序排序。请写一个函数,输入这样一个数组和一个整数,判断整数是否存在于这个数组中。 题目分析:假设有数组为{{1, 3,  5,  7,  9},                                             {2, 4,  6,  8, 10},

JavaScript数组常用方法三-爱代码爱编程

大家好,欢迎观看JavaScript教程(二十二、JavaScript数组常用方法三) indexOf() 描述:从前到后检索数组,并返回元素在数组中第一次出现的下标,            如果没有下标则返回-1 语法:arr.indexOf(item,fromIndex); 注意: 第二参数是可选的,表示从第几个下标像后查找第二个可以是负值,表

1.3 c++数据的复合类型及其使用(一)-爱代码爱编程

1 数组 格式:typeName arrayName[arraySize];   arraySize表示元素数目,必须是整型常数或const值,也可以是常量表达式。arraySize在编译时已知,不能是变量。如int a[10];,c++强调a数组是使用int类型创建的。当数组下标超过9时,编译器编译时不会报错,但会破坏数据。如果是没有初始化的组数,其元