还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
二维数组教学课件第一章数组基础回顾在深入学习二维数组之前,我们需要回顾一维数组的基本概念定义特点数组是相同类型数据的集合,在内存中连续存储,可以快速访问和处理大量同类数据索引特性int arr
[5]一维数组示例,索引从0开始,最后一个元素索引为数组长度-1实用价值为什么需要数组?它能显著简化大量变量的管理,使代码更加简洁高效一维数组示意图上图展示了一维数组在内存中的连续排列方式我们可以看到内存地址连续索引从0开始随机访问特性数组元素在物理内存中相邻存储,便于快速访第一个元素索引为0,最后一个元素索引为n-1问第二章二维数组概念介绍二维数组是对一维数组的扩展,它具有以下特点数组的数组二维数组本质上是数组的数组,数据以行和列的形式进行排列,形成表格状结构适用场景特别适合表示表格、矩阵、网格等二维结构的数据,使数据组织更加直观访问方式array[row][col]使用格式,通过两个索引精确定位元素,第一个表示行,第二个表示列二维数组示例int matrix
[3]
[4];二维数组特征这是一个3行4列的二维数组,共包含12个元素行索引范围是0~2(3行,索引从0开始)列索引范围是0~3(4列,索引从0开始)matrix
[1]
[2]访问第2行第3列的元素二维数组内存结构图二维数组在内存中的实际存储方式如上图所示了解这一结构有助于我们更深入地理解二维数组的工作原理行指针数组连续存储首先是一个包含行指针的数组,每个在大多数实现中,所有元素在内存中指针指向对应的行数据连续存储,按照行优先顺序排列快速访问第三章二维数组声明与初始化声明格式数据类型数组名[行数][列数];int grades
[5]
[3];例如初始化示例int ns
[3]
[4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};每个花括号内的数据对应一行元素,外部花括号将所有行组合在一起不规则二维数组(锯齿数组)在某些编程语言中,二维数组的各行长度可以不同,这种数组也称为锯齿数组int ns[]
[4]={{1,2,3,4},{5,6},{7,8,9}};特点•第一行有4个元素•第二行只有2个元素•第三行有3个元素访问二维数组元素语法格式数组名[行索引][列索引]使用双重索引访问访问示例ns
[2]
[0]输出7(第3行第1列的元素)赋值示例ns
[1]
[1]=10;(将第2行第2列的元素值改为10)第四章二维数组遍历使用嵌套循环遍历所有元素forforint i=0;i3;i++{forint j=0;j4;j++{System.out.printns[i][j]+;}System.out.println;}上述代码的执行过程
1.外层循环控制行索引i,从0到
22.内层循环控制列索引j,从0到
33.打印每个元素后跟空格
4.每行结束后换行二维数组遍历示意图上图展示了使用嵌套循环遍历二维数组的过程我们可以清晰地看到索引的变化规律外层循环(行索引)内层循环(列索引)控制当前处理的行,完成一行后才移在当前行内,从左到右依次处理每个动到下一行元素完整遍历序列第五章二维数组常用操作示例计算某行平均值1针对特定行,计算该行所有元素的平均值计算某列平均值2针对特定列,计算该列所有元素的平均值统计满足条件的元素个数在整个二维数组中,统计符合特定条件的元素数量计算第行平均值示例代码2int sum=0;forint col=0;col4;col++{sum+=ns
[1][col];}double avg=doublesum/4;代码执行流程计算行平均值时,我们固定行索引本例中为1,仅遍历列索引,最后将总和除以列数
1.初始化sum为
02.遍历第2行索引为1的所有列元素
3.累加每个元素到sum
4.用sum除以列数得到平均值计算第列平均值示例代码3int sum=0;forint row=0;row3;row++{sum+=ns[row]
[2];}double avg=doublesum/3;代码执行流程计算列平均值时,我们固定列索引本例中为2,仅遍历行索引,最后将总和除以行数
1.初始化sum为
02.遍历第3列索引为2的所有行元素
3.累加每个元素到sum
4.用sum除以行数得到平均值统计大于某值元素个数示例int count=0;int threshold=5;forint i=0;i3;i++{forint j=0;j4;j++{ifns[i][j]thresholdcount++;}}本例中,我们统计数组中所有大于5的元素个数•使用嵌套循环遍历整个数组执行完成后,count中存储了数组中所有大于5的元素个数•检查每个元素是否大于阈值5•对于满足条件的元素,计数器递增第六章二维数组作为函数参数函数声明示例void printArrayintarr[]
[4],int rows;传递二维数组作为参数的关键点•必须指定列数,这是语言设计决定的在许多编程语言中,二维数组作为参数传递时需要特别注意列数的指•行数可以省略,通过额外参数传入定,这与数组在内存中的存储方式有关•调用时传入数组名和行数即可函数打印二维数组示例代码void printArrayintarr[]
[4],int rows{forint i=0;i这个函数用于打印任意行数、4列的二维数组•外层循环遍历行从0到rows-1•内层循环遍历列从0到3•每打印完一行后换行调用示例printArrayns,3;第七章二维数组的内存模型数组的数组行指针结构从概念上讲,二维数组是数组的数每行是一个一维数组的引用,这些引组,即一个数组,其元素也是数组用连续存储形成行指针数组灵活性这种结构支持不规则行长度(锯齿数组),每行可以有不同的列数理解二维数组的内存模型对于高效操作数组以及理解一些语言限制(如函数参数中必须指定列数)非常重要二维数组内存结构示意图上图展示了二维数组(特别是锯齿数组)的内存结构我们可以观察到主数组包含指向各行的指针,这些指针连续存储每个指针指向一个独立的一维数组,代表对应的行各行的长度可以不同,这就是锯齿数组的特点这种结构提供了灵活性,但也增加了内存访问的间接性第八章二维数组应用案例二维数组在编程中有广泛的应用场景学生成绩表存储多个学生在多门课程上的成绩,行表示学生,列表示课程图像处理存储像素矩阵,每个元素代表一个像素的颜色值或灰度值棋盘游戏表示游戏状态,例如象棋、围棋或井字游戏的棋盘状态这些应用都充分利用了二维数组按行列组织数据的特性案例学生成绩二维数组int scores
[5]
[3]={{82,90,91},{68,72,64},{95,91,89},{67,52,60},{79,81,85}};在这个例子中•每行代表一个学生共5名学生•每列代表一门课程共3门课程scores
[2]
[1]例如,表示第3个学生的第2门课程成绩91分•我们可以方便地计算每个学生的平均分或每门课程的平均分计算所有学生平均分示例int total=0,count=0;forint i=0;i5;i++{forint j=0;j3;j++{total+=scores[i][j];count++;}}double average=doubletotal/count;我们可以通过简单修改上述代码来•计算特定学生的平均分(固定行索引)该代码计算整个成绩表的平均分•计算特定课程的平均分(固定列索引)•找出最高分或最低分
1.累加所有成绩到total变量•统计及格(≥60分)的成绩数量
2.统计总成绩数量到count变量
3.用总和除以数量得到平均值第九章二维数组进阶操作二维数组在矩阵运算中有广泛应用,以下是几种常见的矩阵操作矩阵加法矩阵乘法对应位置元素相加,要求两个矩阵有行与列的点积运算,A的列数必须等于相同的行数和列数B的行数C[i][j]=A[i][j]+B[i][j]C[i][j]=∑A[i][k]*B[k][j]转置矩阵行列互换,原矩阵的第i行第j列变为新矩阵的第j行第i列B[j][i]=A[i][j]矩阵加法示例代码forint i=0;i代码说明•需要两个大小相同的矩阵A和B•结果保存在矩阵C中,大小与A、B相同矩阵加法是最简单的矩阵运算,将两个矩阵对应位置的元素相加•使用嵌套循环遍历所有元素位置•对每个位置,将A和B的对应元素相加矩阵乘法示例代码forint i=0;i矩阵乘法的核心原理•A是N×L矩阵,B是L×M矩阵,结果C是N×M矩阵•C[i][j]等于A的第i行与B的第j列的点积•点积计算需要第三层循环•这是一个计算复杂度为ON×M×L的操作矩阵转置示例代码forint i=0;i代码说明•矩阵A的行数和列数分别为rows和cols•转置后的矩阵B的行数和列数分别为cols和rows矩阵转置操作将原矩阵的行变为列,列变为行•A[i][j]的值被赋给B[j][i],实现行列互换•如果原矩阵是m×n的,转置后变为n×m•对角线元素位置不变•应用场景包括图像旋转、特定数学计算等第十章二维数组常见错误与调试越界访问行列索引混淆使用超出数组范围的索引导致运行时错误地交换行列索引位置,例如写成array
[5]
[3]array[j][i]array[i][j]错误,例如尝试访问而而非数组只有5行3列初始化不完整未提供足够的初始值,导致部分元素使用默认值通常为0,可能引发逻辑错误这些错误往往难以察觉,但可能导致程序崩溃或产生错误结果调试技巧二维数组调试常用方法打印检查使用循环打印数组元素,验证内容是否符合预期索引范围检查始终记住索引范围是0到length-1,特别注意循环边界条件断点调试使用断点和调试工具观察变量值和内存状态,跟踪程序执行流程良好的调试习惯可以大大提高编程效率和代码质量课堂练习请完成以下练习,巩固对二维数组的理解123输入与存储行列统计矩阵运算编写程序从用户输入中读取数据,存入一个计算并输出上述数组每行和每列的和,观察实现两个2×3矩阵的加法,将结果打印输出3×4的二维数组中计算结果完成这些练习后,你将更加熟练地掌握二维数组的基本操作结语掌握二维数组,开启数据结构之门通过本课程的学习,我们已经系统地掌握了二维数组的概念、声明、初始化、访问、遍历以及应用二维数组作为编程中重要的数据结构,在处理表格数据、矩阵运算、图像处理等领域有着广泛应用基础知识实践应用进阶发展理解二维数组的内存模型和操作方法是多练习,多思考,灵活运用二维数组解二维数组是学习高级数据结构和算法的掌握更复杂数据结构的基础决实际问题重要基石希望大家在今后的编程学习和实践中,能够熟练应用二维数组,解决各种复杂问题!。
个人认证
优秀文档
获得点赞 0