计算机二级C++ 九二.ppt_第1页
计算机二级C++ 九二.ppt_第2页
计算机二级C++ 九二.ppt_第3页
计算机二级C++ 九二.ppt_第4页
计算机二级C++ 九二.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对于一维数组: (1)数组名array表示数组的首地址,即array0的地址; (2)数组名array是可以看做一个指针变量,但值是不能变化 故又称为地址常量。 (3)array+i是元素arrayi的地址即array+i=& arrayi (4)arrayi *(array+i),回顾,二维数组定义与元素引用,datatype arrayNamerowsizecolsize;,int num42;,num,4 X 2 = 8,8*sizeof(int) 字节,二维数组初始化,int books42 = 11, 1294,22,450, 33,4000, 44,79;,int arr43 = 1,2, 4,5,7,10 ;,int arr43 = 1,2, 4,5 ;,int arr43 = 1,2,4,5 ; 没有花括号依次赋值,其余补零,通过赋初值定义二维数组的大小,int arr 3 = 1,2,3,4,5,6,8 ; 由初值行数来确定第一维的大小,int arr 3 = 1,2,3,4,5; 第一维的大小为: 1.数值数%列数=0,维数=商 2.数值数%列数!=0,维数=商+1 故:上述等价于: int arr 23 = 1,2,3,4,5;,int arr2 = 1,2,3,4,5,6,8 ; 错误,可以省略行但不能省略列,从终端设备二维数组赋值,int i, j, num42; for (i = 0; i = 3; i+) for (j = 0; j =1 ; j+) scanf(“%d“, ,二维数组和指针,int a34; 对于一个二维数组可以看成一个一维数组,这个一维数组的每个元素又是一个一维数组。如上:可以将二维数组a看成一个由a0,a1,a2三个元素组成的一维数组,而每个元素a0,a1,a2分别又是由四个元素组成的一维数组。如a0元素又可由a00, a01, a02, a03四个元素组成的一维数组。,对于二维数组: (1)a是数组名, 包含三个元素 a0,a1,a2 (2)每个元素ai 又是一个一维 数组,包含4个 元素,int a34;,前面对于一维数组学过int a3数组名a是一个地址常量,或可以看做一个指针变量,值为第一个元素的地址 int a34; 首先讨论二维数组中的一维数组名: 二维数组a34,包括a0,a1,a2三个元素,每个元素又是一个一维数组名。故a0,a1,a2三个一维数组名分别代表地址常量,或指针,值为每行第一个元素的地址。 讨论二维数组名: 二维数组名a,包含着三个一维数组名(地址常量或指针)的指针,值为第一个元素的首地址。,回顾二重指针: int *p,*a,k=10; a=,p,a,k,&a,&k,10,*p=a=&k,p=&a,*p=k,对二维数组 int a34,有 a-二维数组的首地址,即第0行的首地址 a+i-第i行的首地址 ai *(a+i)-第i行第0列的元素地址 ai+j *(a+i)+j -第i行第j列的元素地址 *(ai+j) *(*(a+i)+j) aij,a+i=&ai=ai=*(a+i) =&ai0, 值相等,含义不同 a+i &ai,表示第i行首地址,指向行 ai *(a+i) &ai0,表示第i行第0列元素地址,指向列,二维数组元素表示形式: (1)a12 (2)*(a1+2) (3)*(*(a+1)+2) (4)*(&a00+1*4+2) ( 5)*(*(a+1) 2,地址表示: (1) a+1 (2) &a10 (3) a1 (4) *(a+1),地址表示: (1) &a12 (2) a1+2 (3) *(a+1)+2 (4)&a00+1*4+2 (5)a0+1*4+2,9.6.3建立指针数组引用二维数组元素,int *p3,a32 p首先与 结合,p是一个数组名,系统为它开辟3个连续存储单元;*说明数组p是指针类型,则每个单元存储的是一个地址。即pi与ai类型一致,所以合法赋值形式为:pi=ai;,*(pi+j) *(*(p+i)+j) (*(p+i)j pij,对应 *(ai+j) *(*(a+i)+j) (*(a+i)j aij,9.6.4建立一个行指针引用二维数组元素 定义形式: 数据类型 (*指针名)一维数组维数; 例 int (*p)4,a34; p先与*结合,说明p是一个指针变量 再与 结合,即p指向一个含有4个元 素的一维数组。在这里p的类型与二维 数组名a相同,因此合法赋值语句: p=a; 故p+1=a+1,p+i=a+1 则可用以下形式来表示aij *(pi+j) *(*(p+i)+j) (*(p+i)j pij,1.( )不能少, 2.p是行指针, 不是 数组名 3.一维数组指针变量 维数和二维数组列数 必须相同,若有以下定义 int x10,*pt=x; 则对数组元素的正确引用是 A)*,则p的含义是( )。 A指向整型变量的指针数组 B指向4个整型变量的函数指针 C4个指向整型变量的指针变量 D指向具有4个整型元素的一维数组的指针 4. 课后题9.12和9.13,9.7二维数组名和指针数组作为参数,1.二维数组名作为实参时,形参必须是一个指针变量 main() double sMN f (s); 则f子函数:f(double (*a)N) f(double a N) f(double aMN) 系统将a处理成行指针,2.指针数组名作为实参时,形参必须是指向指针的数组 main() double sMN,*pM; for()pi=si; f (p); 则f子函数可为如下之一: f(double *aM) f(double *a ) f(double *a ),9.8二维程序举例,例题9.11 编写程序,通过调用随机函数给5*6的二维数组元素赋10-40范围内的整数,求出二维数组每行元素的平均值 思路:#include #include #define M 6 #define N 5 void getdata(int (*) M) void lineave(int M,float *) void outdata (int NM,float*) main 定义一个二维数组存放随机数;int rNM; 定义一个一维数组存放每行元素的平均值;inaveN; 调用一个子函数获得随机数;getdata(r); 调用一个子函数求二维数组的行平均值;lineave(r,ave); 调用一个子函数输出平均值:outdata(r,data); 注意格式:被调用函数的位置,函数原型:跟子函数函数一样 但可省略参数名称,获得随机数的子函数: void getdata(int (*sp) M) int i,j,x; for(i=0;i=10)/只有产生的随机数在=10至40之间才可放入数组 spij=x; j+; ,求二维数组的行平均值: void lineave(int sp M,float *a) int i,j; float ave; for(i=0;iN;i+) ave=0.0;/每求完一行,重新将ave赋值为0.0 for(j=0;jM;j+) ave+=sij;/求每行的总和 ai=ave/M;/求行平均值存储于数组a中 ,输出平均值的子函数: void outdata (int spNM,float a ) int i,j; printf(“输出二维数组元素:n”); for(i=0;iN;i+) for(j=0;jM;j+) printf(“%4d,spij); printf(“:%6.2fn,ai); ,例题9.12打印如下杨辉三角,1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 1 1 6 15 20 1 思路:首先建立一个二维数组 根据规律给二维数组赋值 按照上述图形输出二维数组,规律:1.第一列和斜对角线的元素为1。 2.其他元素=上一行的同列元素+前列元素,for(i=0;in;i+) si0=1;sii=1; for(i=2;in;i+) for(j=1;jn;j+) sij=si-1j+si-1j-1;,规律:列数=行数 for(i=0;in;i+) for(j=0;j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论