二维数组 一时失言乱红尘 2022-06-01 10:30 297阅读 0赞 上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为 一维数组 。在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以确定它在数组中的位置。本节只介绍二维数组,多维数组可由二维数组类推而得到。 ### 二维数组的定义 ### 二维数组定义的一般形式是: dataType arrayName[length1][length2]; 其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。例如: int a[3][4]; 定义了一个3行4列的数组,共有3×4=12个元素,数组名为a,即: a\[0\]\[0\], a\[0\]\[1\], a\[0\]\[2\], a\[0\]\[3\] a\[1\]\[0\], a\[1\]\[1\], a\[1\]\[2\], a\[1\]\[3\] a\[2\]\[0\], a\[2\]\[1\], a\[2\]\[2\], a\[2\]\[3\] 在二维数组中,要定位一个元素,必须给出一维下标和二维下标,就像在一个平面中确定一个点,要知道x坐标和y坐标。例如,a\[3\]\[4\] 表示a数组第3行第4列的元素。 二维数组在概念上是二维的,但在内存中地址是连续的,也就是说各个元素是相互挨着的。那么,如何在线性内存中存放二维数组呢?有两种方式:一种是按行排列, 即放完一行之后再放入第二行。另一种是按列排列, 即放完一列之后再放入第二列。 在C语言中,二维数组是按行排列的。也就是先存放a\[0\]行,再存放a\[1\]行,最后存放a\[2\]行;每行中的四个元素也是依次存放。数组a为int类型,每个元素占用4个字节,整个数组共占用4×(3×4)=48个字节。 【示例】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。 <table style="margin:auto; color:rgb(51,51,51); font-family:微软雅黑,"Microsoft Yahei",Arial,Helvetica,sans-serif; font-size:14px; background-color:rgb(238,238,238)"> <tbody> <tr> <td style="padding:5px; border-color:rgb(204,204,204)">--</td> <td style="padding:5px; border-color:rgb(204,204,204)">Math</td> <td style="padding:5px; border-color:rgb(204,204,204)">C</td> <td style="padding:5px; border-color:rgb(204,204,204)">English</td> </tr> <tr> <td style="padding:5px; border-color:rgb(204,204,204)">张</td> <td style="padding:5px; border-color:rgb(204,204,204)">80</td> <td style="padding:5px; border-color:rgb(204,204,204)">75</td> <td style="padding:5px; border-color:rgb(204,204,204)">92</td> </tr> <tr> <td style="padding:5px; border-color:rgb(204,204,204)">王</td> <td style="padding:5px; border-color:rgb(204,204,204)">61</td> <td style="padding:5px; border-color:rgb(204,204,204)">65</td> <td style="padding:5px; border-color:rgb(204,204,204)">71</td> </tr> <tr> <td style="padding:5px; border-color:rgb(204,204,204)">李</td> <td style="padding:5px; border-color:rgb(204,204,204)">59</td> <td style="padding:5px; border-color:rgb(204,204,204)">63</td> <td style="padding:5px; border-color:rgb(204,204,204)">70</td> </tr> <tr> <td style="padding:5px; border-color:rgb(204,204,204)">赵</td> <td style="padding:5px; border-color:rgb(204,204,204)">85</td> <td style="padding:5px; border-color:rgb(204,204,204)">87</td> <td style="padding:5px; border-color:rgb(204,204,204)">90</td> </tr> <tr> <td style="padding:5px; border-color:rgb(204,204,204)">周</td> <td style="padding:5px; border-color:rgb(204,204,204)">76</td> <td style="padding:5px; border-color:rgb(204,204,204)">77</td> <td style="padding:5px; border-color:rgb(204,204,204)">85</td> </tr> </tbody> </table> 可设一个二维数组a\[5\]\[3\]存放五个人三门课的成绩。再设一个一维数组v\[3\]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下: #include <stdio.h> int main(){ int i, j; //二维数组下标 int sum=0; //当前科目的总成绩 int average; //总平均分 int v[3]; //各科平均分 int a[5][3]; //用来保存每个同学各科成绩的二维数组 printf("Input score:\n"); for(i=0; i<3; i++){ for(j=0; j<5; j++){ scanf("%d", &a[j][i]); //输入每个同学的各科成绩 sum+=a[j][i]; //计算当前科目的总成绩 } v[i]=sum/5; // 当前科目的平均分 sum=0; } average =(v[0]+v[1]+v[2])/3; printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]); printf("Total:%d\n", average); return 0; } 运行结果: Input score: 80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙ Math: 72 C Languag: 73 English: 81 Total:75 程序使用了一个嵌套循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v\[i\]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v\[0\]、v\[1\]、v\[2\]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。 ## 二维数组的初始化 ## 二维数组的初始化可以按行分段赋值,也可按行连续赋值。 例如对数组a\[5\]\[3\],按行分段赋值可写为: int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} }; 按行连续赋值可写为: int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85}; 这两种赋初值的结果是完全相同的。 【示例】求各科平均分和总成绩平均分。 #include <stdio.h> int main(){ int i, j; //二维数组下标 int sum=0; //当前科目的总成绩 int average; //总平均分 int v[3]; //各科平均分 int a[5][3]={ { 80,75,92}, { 61,65,71}, { 59,63,70}, { 85,87,90}, { 76,77,85} }; for(i=0; i<3; i++){ for(j=0; j<5; j++){ sum+=a[j][i]; //计算当前科目的总成绩 } v[i]=sum/5; // 当前科目的平均分 sum=0; } average =(v[0]+v[1]+v[2])/3; printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]); printf("Total:%d\n", average); return 0; } 运行结果: Math: 72 C Languag: 73 English: 81 Total:75 #### 对于二维数组初始化赋值还有以下说明 #### 1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。例如: int a[3][3]={ {1},{2},{3}}; 是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为: 1 0 0 2 0 0 3 0 0 int a [3][3]={ {0,1},{0,0,2},{3}}; 赋值后的元素值为: 0 1 0 0 0 2 3 0 0 2) 如对全部元素赋初值,则第一维的长度可以不给出。例如: int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为: int a[][3]={1,2,3,4,5,6,7,8,9}; 3) 二维数组可以看作是由一维数组嵌套而成的,把一维数组的每个元素看作一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组,C语言允许这种分解。 如二维数组a\[3\]\[4\],可分解为三个一维数组,其数组名分别为:a\[0\]、a\[1\]、a\[2\]。 对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a\[0\]的元素为a\[0\]\[0\], a\[0\]\[1\], a\[0\]\[2\], a\[0\]\[3\]。必须强调的是,a\[0\], a\[1\], a\[2\]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。
相关 二维数组 二维数组是一种数据结构,它具有多行多列的特点。在编程中,它可以被看作一个表格,每一行对应一个一维数组,而每一列则对应着该一维数组中的一个元素。通过下标来访问二维数组中的元素。 骑猪看日落/ 2023年10月08日 17:38/ 0 赞/ 44 阅读
相关 一维数组、二维数组 (一)数组 变量: 只能存储一个值 数组: 存储的一组相同数据类型的值, 存储个数: 由程序员在创建的数组的时候来指定, 缺点: 固定长度 也称为: 容器 1.数组要 柔情只为你懂/ 2023年10月04日 19:08/ 0 赞/ 101 阅读
相关 java二维数组(java二维数组) java语言二维数组 System.out.println方法是输出参数内容。你指定的参数是erwei+""。erwei是个数组,在java中数组也是一种对象,那么这个“ £神魔★判官ぃ/ 2023年09月25日 08:31/ 0 赞/ 93 阅读
相关 二维数组 二维数组 其实二维数组其实就是一个元素为一维数组的数组。 动态初始化方式一(指定有多少个长度相同的一维数组) 数据类型\[\]\[\] 变量名 = new 数据类 清疚/ 2023年06月26日 12:16/ 0 赞/ 48 阅读
相关 二维数组 二维数组:(本质,以一维数组作为数组的元素)因为数组中的元素可以是任意类型。 声明创建语法: int\[\]\[\] iArrArr = new int\[一维数组的个 柔情只为你懂/ 2022年09月24日 15:19/ 0 赞/ 251 阅读
相关 二维数组 上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为 一维数组 。在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以确定它在数 一时失言乱红尘/ 2022年06月01日 10:30/ 0 赞/ 298 阅读
相关 二维数组 可以将二维数组理解为数组中的数组, 即一维数组里在存一个一维数组 格式1:int\[\]\[\] arr = new int\[2\]\[3\]; arr的二维 向右看齐/ 2022年06月01日 09:20/ 0 赞/ 305 阅读
相关 二维数组 1. 概述 int a\[3\]\[4\]; 总共是12个元素,可以当成3行4列看待,分别是 a\[0\]\[0\] a\[0\]\[1\ ゝ一世哀愁。/ 2022年05月01日 13:52/ 0 赞/ 310 阅读
相关 二维数组 二维数组 概念: 本质就是存放了一维数组的数组, 在Java中不存在真正意义的二维数组,多维数组本质还是一维数组 格式: 数据类型\[\]\[\] 数组名 = n 短命女/ 2021年11月04日 19:42/ 0 赞/ 474 阅读
还没有评论,来说两句吧...