当前位置: 首页 > news >正文

C语言 第四章 数组(4)

目录

多维数组

理解

举例:

 二维数组的定义方式

定义方式1: 

定义方式2:

二维数组的内存分析

 成员的调用 

  举例

代码示例1

代码示例2

代码示例3


多维数组


理解

二维数组、三维数组、...都称为多维数组。

本节主要讲解二维数组,三维及以上的数组,以此类推即可。

举例:

公司有3个攻坚小分队,每队有6名同事,要把这些同事的工资用数组保存起来以备查看。
  

队员1 队员2队员3队员4 队员5队员6 
第一分队100001100012000130001400015000 
第二分队160001700018000190002000021000 
第三分队220002300024000250002600027000

  • 此时建立数组salary用于存储工资,它应当是二维的。
  • 第一维用来表示第几分队,第二维用来表示第几个同事。
  • 例如用salary[2,3]表示角标2对应分队的角标3对应队员的工资。
  • 对于二维数组的理解,可以看作是由一维数组嵌套而成的。即一维数组array1又作为另一个一维数组array2的元素而存在。

 二维数组的定义方式


定义方式1: 

eg.

int a[3][4]; 

 该二维数组a由三个一维数组a[0]、a[1]、a[2]构成,每个一维数组有4个元素,共12个成员(3×4 = 12)。

    二维数组,常称为矩阵,把二维数组按行(row)和列(column)的排列,可以形象的理解二维数组的逻辑结构。


定义方式2:

声明与初始化同时进行

 eg.

int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};  

相当于将第一维的每个成员写成一个数组。


 


二维数组的内存分析


C语言中,二维数组元素按行存放,最右边的下标变化最快,第一维的下标变化最慢。
举例,整型数组 b[3][3]  内存存放展示。关于长度示例:

int b[3][3];
printf("%d\n",sizeof(b)); //36 
printf("%d\n",sizeof(b)/sizeof(int)); //9

 成员的调用 


格式:

数组名[下标][下标] ,多维数组每个维度的第一个成员从0开始编号。
举例:

给指定索引位置的元素赋值:

int arr1[3][5];
arr1[0][0] = 12;
arr1[2][4] = 5;

  举例


遍历二维数组获取所有元素的和,提示使用for的嵌套循环。
 


代码示例1

// 二维数组声明定义方式1
int arr[3][4]; 

// 二维数组初始化及遍历求和示例
int a[3][4] = { {0: { 0: 1, 1: 2, 2: 3, 3: 4} },
                {1: { 0: 5, 1: 6, 2: 7, 3: 8} },
                {2: { 0: 9, 1: 10, 2: 11, 3: 12} } };
int sum = 0;
for (int i = 0; i < sizeof(a)/sizeof(int); ++i) {
    for (int j = 0; j < sizeof(a[i])/sizeof(int); ++j) {
        printf("%d\t",a[i][j]);
        sum+=a[i][j];
    }
    printf("\n");
}

代码示例2

int main(){
// 使用二维数组实现杨辉三角
// 1. 创建二维数组
int row = 10;// 行数
int arr[row][row*2+1]; 

// 2. 初始化二维数组
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
    for (int j = 0; j < sizeof(arr[i])/sizeof(int); ++j) {
        arr[i][j] = 0;
    }
}

// 部分计算杨辉三角元素的代码(截取部分)
for (int j = 1; j < sizeof(arr[i])/sizeof(int)-1; ++j) {
    arr[i][j] = arr[i-1][j-1]+arr[i-1][j+1];
}

// 4. 打印杨辉三角
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
    for (int j = 0; j < sizeof(arr[i])/sizeof(int); ++j) {
        if(arr[i][j]==0){
            printf("\t");
        }else{
            printf("%d\t",arr[i][j]);
        }
    }
    printf("\n");
}
 
 

代码示例3

int main (){
// 定义并初始化二维数组a
int a[3][4] = { {0: { 0: 1, 1: 2, 2: 3, 3: 4} },
                {1: { 0: 5, 1: 6, 2: 7, 3: 8} },
                {2: { 0: 9, 1: 10, 2: 11, 3: 12} } };
int sum = 0;
// 计算二维数组a所有元素的和并打印
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
    for (int j = 0; j < sizeof(a[i])/sizeof(int); ++j) {
        printf("%d\t",a[i][j]);
        sum+=a[i][j];
    }
    printf("\n");
} 
printf("总和为%d",sum);
}

相关文章:

  • scanf() 函数:C语言中的数据输入桥梁
  • SAP FI模块之付款管理开发
  • 理解langchain langgraph 官方文档示例代码中的MemorySaver
  • 稀疏矩阵(信息学奥赛一本通-2042)
  • 芯谷D8563TS实时时钟/日历芯片详解可替代PCF8563
  • notion enhancer 新版工作方法
  • torch_geometric 安装
  • Conda+jupyterlab
  • 第九节:哈希表(初阶)
  • uni-app App 端分段导出 JSON 数据为文件
  • 解决进入Oracle11g的OEM显示网站不安全问题
  • 使用easyexcel实现单元格样式设置和下拉框设置
  • CSS中z-index使用详情
  • 游戏服务器分区的分布式部署
  • 万字长文详解嵌入式电机软件开发
  • Dubbo请求调用本地服务
  • 批量压缩与优化 Excel 文档,减少 Excel 文档大小
  • Figma介绍(基于云的协作式界面设计工具,主要用于UI/UX设计、原型制作和团队协作)
  • 焊接机器人与线激光视觉系统搭配的详细教程
  • Android 中临时文件存放路径选择
  • 引入AI Mode聊天机器人,Gemini 2.5 Pro加持,谷歌重塑搜索智能
  • 特朗普宣布打造“金穹”导弹防御系统,计划3年内运转
  • 中国建设银行原党委委员、副行长章更生被决定逮捕
  • 竞彩湃|水晶宫夺冠后乘胜追击,四大皆空曼城人间清醒?
  • 上影节开幕影片《酱园弄·悬案》,陈可辛执导,章子怡主演
  • 媒体:演员黄杨钿甜耳环事件仍有三大疑问待解