《C语言二维数组.pptx》由会员分享,可在线阅读,更多相关《C语言二维数组.pptx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、注意我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。第1页/共23页二维数组的定义二维数组的定义 二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素 一维数组在内存中的存放一维数组在内存中的存放下图表示对下图表示对a a3 34 4数组存放的顺序数组存放的顺序 第2页/共23页地址地址 值值 数组元素数组元素b00b01b02b10b11b12b20b21b223000H3002H3004H3006H3008H300AH300
2、CH300EH3010H例如:整型数组 b33=1,2,3,4,5,6,7,8,9;123456789第3页/共23页问题:有了二维数组的基础,那么问题:有了二维数组的基础,那么多维数组如何定义呢?定义三维数组:float a234;多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。a000a001a002a003 a010a011a012a013 a020a021a022a023 a100a101a102a103 a110a111a112a113 a120a121a122a123三维数组的元素排列顺序第4页/共23页二维数组元素的表示形式为:数组名下标下标 例如:a
3、23下标可以是整型表达式,如 a2-12*2-1数组元素可以出现在表达式中,也可以被赋值,例如:b12=a23/2注意不要写成 a2,3,a2-1,2*2-1形式第5页/共23页常出现的错误有:int a34;/*定义a为34的数组*/a34=3;在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。第6页/共23页可以用下面4种方法对二维数组初始化数据类型 数组名 常量表达式1常量表达式2初始化数据;(1)分行给二维数组赋初值。如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。如:int a
4、34=1,2,3,4,5,6,7,8,9,10,11,12;二维数组的引用二维数组的引用第7页/共23页(3)可以对部分元素赋初值。如:int a34=1,5,9;1 0 0 05 0 0 0 9 0 0 0也可以对各行中的某一元素赋初值,如:int a34=1,0,6,0,0,11;1 0 0 00 6 0 00 0 0 11 1 0 0 05 6 0 0 0 0 0 0也可以只对某几行元素赋初值。如:int a34=1,5,6;第8页/共23页(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如:int a34=1,2,3,4,5,6,7,8,9,1
5、0,11,12;它等价于:int a4=1,2,3,4,5,6,7,8,9,10,11,12;在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如:int a4=0,0,3,0,10;0 0 3 00 0 0 00 10 0 0第9页/共23页二维数组元素的输入与输出1、输入int a34,i,j;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);第10页/共23页2、输出for(i=0;i3;i+)for(j=0;j4;j+)printf(%3d,ai j);printf(n);第11页/共23页例11.1 将一个二维数组行和列元素互换,
6、存到另一个 二维数组中。#include void main()int a23=1,2,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)例如:a=1 2 3 1 4 4 5 6 b=2 5 3 6第12页/共23页 printf(%5d,aij);bji=aij;printf(n);printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);/*程序结束*/运行结果如下:array a:1 2 3 4 5 6array
7、b:1 4 2 5 3 6 第13页/共23页例11.2 求二维数组,对角线元素之和#include void main()int a55,i,j,s=0;for(i=0;i5;i+)for(j=0;j5;j+)scanf(%d,&aij;for(i=0;i5;i+)s=s+aii;printf(s=%d,s);第14页/共23页例11.3:有一个34的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。先用N-S流程图表示算法,如下:第15页/共23页程序如下:#include void main()int i,j,row=0,colum=0,max;int a34=1,2
8、,3,4,9,8,7,6,-10,10,-5,2;max=a00;第16页/共23页for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);/*程序结束*/第17页/共23页说明:杨辉三角是一个下三角形式,它的第一列和对角线上的值都是1,其他的值为上一行前一列的数与上一行同一列的数之和如下形式:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1例11.4:利用二维数组,输出7行7列的杨辉三角。第18页/
9、共23页#include main()int a77,i,j;for(i=0;i7;i+)ai0=1;aii=1;for(i=2;i7;i+)for(j=1;ji;j+)ai j=ai-1 j-1+ai-1 j;第19页/共23页for(i=0;i7;i+)for(j=0;j=i;j+)printf(%3d,ai j);printf(n);第20页/共23页例11.5 从键盘上输入9个整数,保存在二维数组中,按数组原来位置输出第一行和第一列的所有元素。第0行第1行第2行 0列列列分析:1、输入数组。2、输出数组时要考虑不是所有数据都输出。思考:应该输出的数据在位置关系上有何特点?(关键!)第21页/共23页#include main()int i,j,a33;for(i=0;i3;i+)/*输入数组*/for(j=0;j3;j+)printf(a%d%d=,i,j);scanf(%d,&aij;for(i=0;i3;i+)/*输出数组*/for(j=0;j3;j+)if(i=1|j=1)printf(%-6d,aij);else printf(%-6c,);printf(“n”);第22页/共23页感谢您的观看!第23页/共23页