收藏 分享(赏)

C语言C++07-2二维数组.ppt

上传人:j35w19 文档编号:8114966 上传时间:2019-06-09 格式:PPT 页数:38 大小:884.50KB
下载 相关 举报
C语言C++07-2二维数组.ppt_第1页
第1页 / 共38页
C语言C++07-2二维数组.ppt_第2页
第2页 / 共38页
C语言C++07-2二维数组.ppt_第3页
第3页 / 共38页
C语言C++07-2二维数组.ppt_第4页
第4页 / 共38页
C语言C++07-2二维数组.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、二维数组,数组的分类:,按数组的元素划分: 1.数值数组数组的每个元素是整数或实数 2.字符数组数组的每个元素是字符 3.指针数组数组的每个元素是指针; 4.结构体数组数组的每个元素是结构体; 按数组的维数划分:一维数组;二维数组;三维数组;,2019/6/9,2,二维数组的格式,2019/6/9,3,类型 标识符 行长度 列长度 ;,数组所有元素 为同一类型,变量名, 即数组名,行长度*列长度 为数组中所含 元素的个数,如: int a410; char c315; float f55;,二维数组的说明,行和列的长度用方括号而不是圆括号; 数组长度可以是整型常量或整型常量表达式;不能是变量。

2、 如int a2*34; int an2,n=10; 同一个程序中,数组名不能与其它变量名相同。 int a; float a1020;,2019/6/9,4,二维数组在内存的存储,按行存储。即先存放0行各元素,再存放1行各元素,依此类推。 数组名是该数组第一个元素的地址或指针。,2019/6/9,5,二维数组在内存所占字节数,为数组类型所占字节数*行长度*列长度。 如 int a45;数组a在内存所占字节数为2*4*5; float b33;数组b在内存所占字节数为4*3*3; 数组名代表该数组第一个元素的地址。,2019/6/9,6,二维数组的初始化,定义:在数组定义时给数组元素赋初值。

3、方式: 按行分段赋值。 按行连续赋值。,2019/6/9,7,二维数组的初始化1 按行分段赋值,格式: 数据类型 数组名行长度列长度 = 第1行的元素值,第2行的元素值,; 举例: int a23=11,22,33,44,55,66; char c26=a,x61,b,c,3,9,1,2,3,4,5,6; float f32= 12.3,0.456,134.98,11.2,4.5,6.78;,2019/6/9,8,二维数组的初始化 按行连续赋值,格式: 数据类型 数组名行长度列长度 =按行连续赋值 举例: int a23=11,22,33,44,55,66; char c26=a,x61,b,

4、c,3,9,1,2,3,4,5,6; float f32= 12.3,0.456,134.98,11.2,4.5,6.78;,2019/6/9,9,二维数组初始化说明,数组不初始化,其元素值为随机值。 给元素赋初值时,可以只给部分元素赋初值。 如:int a55=6,2,3;未赋值的元素的值为0. 不能给数组整体赋值;如int a44=1; 给数组的全部元素赋初值时,可以不给出数组行长度。如int a3=1,2,0,3,4,5=1,2,0,3,4,5 行长度的值等于元素总个数/列长度。,2019/6/9,10,二维数组初始化说明,给元素赋初值时,元素的个数不能多于数组的行和列的乘积值。int

5、a23=1,2,3,4,5,6,7;,2019/6/9,11,二维数组元素的引用,格式:数组名行下标m列下标n行下标范围:从 0 到 m-1;列下标范围:从 0 到 n-1 。如 int a34=80,91,70,83,85,94,65,87,90,98,75,88;,2019/6/9,12,二维数组的动态赋值,数组定义后,通过双重for循环给数组的元素逐个赋初值。 两种方法: 按行赋初值; 按列赋初值;,2019/6/9,13,二维数组的动态赋值按行输入,int i, j,a23; for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d”, 输入:1,2,3,4,5,6,

6、7,8,9,10,11,12 特点:行下标变化慢、列下标变化快。,运行结果:,二维数组的动态赋值按列输入,int i, j,a34; for(j=0;j=3;j+) for(i=0;i=2;i+)scanf(“%d”, 输入:1,2,3,4,5,6,7,8,9,10,11,12 特点:列下标变化慢、行下标变化快。,运行结果:,二维数组的输出按逻辑结构输出,int i, j,a23; for(i=0;i=2;i+)for(j=0;j=3;j+)printf(“%5d”,a i j );,数组定义时有无static的区别,static int a23=1,2,3,4; /*未赋值的元素值为0 。*

7、/ int a23=1,2,3,4; /*未赋值的元素值为随机数。*/,2019/6/9,17,二维数组和一维数组的关系,定义一个二维数组: int a34=1,2,3,4,5,6,7,8,9,1,2,3; 可以看成 int a34= a0, a1, a2 ; 其中 a0=1,2,3,4; a1=5,6,7,8; a2=9,1,2,3;,结论:a0,a1,a2为三个一维数组的数组名,是该一维数组第一个元素的地址。,二维数组举例1,(1)说明语句:int a3=1,2,3,4,5,6,7,8,9;则a数组的行数是_。 A. 不确定 B. 1 C. 2 D. 3 (2)以下数组定义中不正确的是_。

8、 A. int a23; B. int b3=0,1,2,3; C. int c100100=0; D. int d3 =1,2,1,2,3,1,2,3,4;,2019/6/9,19,二维数组举例2,定义如下变量和数组: int i; int x33=1,2,3,4,5,6,7,8,9; 则下面语句的输出结果是_。 for(i=0;i3;i+)printf(“%d “,xi2-i);A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9,2019/6/9,20,二维数组举例3,若有以下的定义,int t32;能正确表示t数组元素地址的表达式是_。,A. &t32 B. t3 C

9、. t1 D. *t2,二维数组举例3,以下程序执行后,输出结果是_。 main() int a33=1,2,3,4,5,6,I,j,s=0;for(i=1;i3;i+)for(j=0;j=I;j+) s+=aij; printf(“%dn”,s); A. 18 B.19 C.20 D.21,二维数组举例4,以下程序的输出结果是_。 main() int a33=1,2,3,4,5,6,7,8,9,i;for(i=1;i3;i+)printf(“%dn”,xi2-i); A. 1,5,9 B.1,4,7 C.3,5,7 D.3,6,9,二维数组编程举例,编写程序,通过scanf函数给一个5*5

10、的矩阵置值,然后给此方阵的上半角(包含主对角线)置0,其它元素不变。最后输出此方阵。,分析与设计,(I)输入:通过双重for循环给二维数组动态赋初值。 (2)如何将方阵的上半三角置0。 使用外循环变换i控制行下标。又主对角线上元素的行、列下标值应该是相等的,因此,用内循环变量j控制列下标,且初值与行下标的值相等。 (3)输出: 通过双重for循环使用printf函数输出二维数组的各元素值。,参考程序,#define N 5 main() int i,j,aNN;for(i=0;iN;i+) for(j=0;jN;j+) scanf(“%d“,三维数组举例,2019/6/9,27,用数组定义 i

11、nt a ? a111=?,2 3 4,第1维:年份; 第2维:姓名; 第3维:工作;,举一反三,定义一个四维数组,该如何定义呢? 定义一个n维数组,又该如何定义呢?,2019/6/9,28,四维:int a3343; n维:数据类型 数组名m1m2m3mn-1,综合练习,2019/6/9,(2)若定义int a34,则对a的正确引用是: A) a 2 4 B) a 1,3 C) a (2)(1) D) a 1+1 0 ,(1)以下二维数组说明方式中正确的是: A) int a3 ; B) float a(3,4); C) double a14; D) float a(3)(4);,引用,(3

12、)若有说明:int a34;则aij前有_个元素。aij在数组中的位置是_。 A) j*4+i B) i*4+j C) i*4+j-1 D) i*4+j+1,B,D,2019/6/9,31,例题4:以下程序运行后的输出结果是_. main() int i,n =0,0,0,0,0;for(i=1;i=4;i+) ni=ni-1*2+1;printf(“%d “,ni); ,结果为: 1 3 7 15,例题5:以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。 main() int i,a20,sum,count;sum=count=0;for(i=0;i0)count

13、+;sum+=_;printf(“sum=%d,count=%dn”,sum,count); ,结果为:&ai,ai,2019/6/9,33,例题6:以下程序运行后输出结果是_. main() int a44=1,2,-3,-4,0,-12,-13,14,-21,23,0,-24,-31,32,-33,0; int i,j,s=0; for(i=0;i4;i+)for(j=0;j4;j+) if(aij0) continue;if(aij=0) break;s+=aij;printf(“%dn”,s); ,结果为:58,2019/6/9,34,例题7:以下程序运行后输出结果是_. main()

14、 int b33=0,1,2,0,1,2,0,1,2;int i,j,t=1;for(i=0;i3;i+)for(j=i;j=i;j+)t=t+bibjj; printf(“%dn”,t); ,结果为:4,编程题1: 不用输入,自动生成下列矩阵。,2019/6/9,35,1 2 3 4 5 1 1 6 7 8 1 1 1 9 10 1 1 1 1 11 1 1 1 1 1,编程题1参考程序:,2019/6/9,36,main ( ) int i,j,a55,k; k=2;for(i=0;i5;i+) /* 按行循环 * /for(j=0;j5;j+) / * 按列循环* /if(j=i) a

15、i j =1; / *下三角* /else a i j =k+; / *上三角* /for(i=0;i5;i+) for(j=0;j5;j+)printf(“%4d”,a i j );printf(“n”); / * 输出一行后换行 * / ,编程题2: 将二维数组行列互换,存到另一个数组中并将两个数组输出。,2019/6/9,37,编程题2参考程序:,2019/6/9,38,main()int a23,b32,i,j;for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d“,printf(“n“);printf(“array b:n“);for(i=0;i3;i+)for(j=0;j2;j+)printf(“%5d“,bij);printf(“n“);getch();,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报