c语言程序设计(王勇)第9章数组-建工化学.ppt
第九章 数组,引 入,上一页,下一页,暂 停,重 放,系统,返 回,休息,一、数组的概念,数组是指一组同类型数据组成的序列。数组中的每个数据称为一个元素,用一个统一的名字来标识,用下标指示数组中的各个元素。,二、数组的维数,一维:只含有一个下标的数组称为一维数组 a9,二维:含有两个下标的数组称为二维数组 b34,多维:含有多个下标的数组称为多维数组 c2354,上一页,下一页,暂 停,重 放,系统,返 回,休息,第一节 一维数组,一、定义,格式:类型标识符 数组名常量表达式;,(1)用,不能用(),(2)下标只能用常量,(3)下标必须是大于零的整数,(4)下标最大元素个数是65535,指明数组中各元素的数据类型,指明数组包含的元素个数,举例:int ab10;,说明:,练习,上一页,下一页,暂 停,重 放,系统,返 回,休息,二、数组元素的初始化,在定义数组时对各元素指定初始值,称为数组的初始化,例:int ab5=1,3,5,7,9;,内存中存储格式为:,例:char c10=c,l,a,n,g,u,a,g,e,内存中存储格式为:,ab0 ab1 ab2 ab3 ab4,c0 c1 c2 c3 c4 c5 c6 c7 c8 c9,ab,c,上一页,下一页,暂 停,重 放,系统,返 回,休息,说明:,1.下标是从 0 开始的,2.初始化数据用 括起,各数据间用“,”分隔,3.数据个数可以少于数组的元素个数,但不能大于元素个数。,int a5=1,3,5;,int a5=1,2,3,4,5,6,7;,4.当给所有元素赋值时,可以省略数组元素个数,系统根据数据个数确定数组元素的个数。,float b3=1.0,2.0,3.5;,float b=1.0,2.0,3.5;,float b=1.0,2.0,3.5;,float b8=1.0,2.0,3.5;,上一页,下一页,暂 停,重 放,系统,返 回,休息,三、数组元素的引用,引用格式:数组名下标,(1)定义与引用的区别,int a9;a9=10;,(2)数组元素的赋值只有在初始化时才能整体赋值,以后只能通过逐个赋值的方法进行。,例:int b3=1,0,5;,例:a2=3;,说明:,a0=a4+a2;,int b3;b=1,0,5;,上一页,下一页,暂 停,重 放,系统,返 回,休息,上一页,下一页,暂 停,重 放,系统,返 回,休息,二、数组首地址引用方法,第二节 一维数组和指针,例:*(a+2)=3;scanf(“%d”,a+i);printf(“%d”,*(a+i);,例:int a5=1,3,5,7,9;,内存中存储格式为:,a0 a1 a2 a3 a4,地址,a+1,a+2,a+3,a+4,a,一、一维数组和数组元素的地址,引用格式:数组名+i,上一页,下一页,暂 停,重 放,系统,返 回,休息,例:*(p+2)=3;for(I=0;I=4;I+)scanf(“%d”,p+);p=a;for(I=0;I=4;I+)printf(“%d”,*p+);,例:int a5=1,3,5,7,9,*p=a;,内存中存储格式为:,a0 a1 a2 a3 a4,p+1,p+2,p+3,p+4,p,三、利用指针引用一维数组元素,引用格式:指针名+i,上一页,下一页,暂 停,重 放,系统,返 回,休息,例:p2=5;for(i=0;i=4;i+)scanf(“%d”,当指针指向一维数组以后,就可以像使用数组一样使用指针,内存中存储格式为:,a0 a1 a2 a3 a4,P1,P2,P3,P4,P0,四、用带下标的指针引用一维数组元素,引用格式:指针名I,例:p=,上一页,下一页,暂 停,重 放,系统,返 回,休息,格式:max(a);数组名做实参 max(p);指针做实参,一、数组元素做实参(传值调用),例:int mix(int a,int b);if ab return a;else return b;,第三节 指针和数组做为函数参数,二、数组名和指针做实参(传址调用),三、数组和指针做形参格式1:函数类型 函数名(参数类型 指针)例:int max(int*p);格式2:函数类型 函数名(参数类型 数组)例:int max(int a);或 int max(int aM);,例:main()int a=1,2,3,4,5;printf(“%d”,mix(a1,a3);,第四节 数组元素的引用举例,输出下列矩阵,上一页,下一页,暂 停,重 放,系统,返 回,休息,#include“stdio.h”main()int i;int a20;for(i=0;i20;i+)ai=i+1;for(i=0;i20;i+)if(i%5=0)printf(“n”);printf(“%8d”,ai);,2 3 4 5 7 8 9 1011 12 13 14 1516 17 18 19 20,printf(“%8d”,*(a+i);,*(a+i)=i+1;,输入十个数,计算其平均值,float aver(float a,int n)int i;float sum=0,average;for(i=0;i=n-1;i+)sum=sum+ai;average=sum/n;return average;,上一页,下一页,暂 停,重 放,系统,返 回,休息,main()int i;float sum=0,a10,av;for(i=0;i10;i+)scanf(“%f”,第五节 二维数组,一、引言,假设某班级学生的成绩如下:,上一页,下一页,暂 停,重 放,系统,返 回,休息,二、定义,格式:类型 数组名常量表达式1常量表达式2,举例:int b34;,说明:,1.二维数组的排列顺序是按行排列的,2.二维数组所有元素个数不能大于65535,int b200400;,上一页,下一页,暂 停,重 放,系统,返 回,休息,三、初始化,同一维数组一样,二维数组也可以在定义的时候赋值,int b34=1,2,3,4,5,6,7,8,9,10,11,12;,说明:,1.初始化可以采用分行的方法完成,2.也可以直接按各个元素在数据中的排列顺序直接列出,int b34=1,2,3,4,5,6,7,8,9,10,11,12;,这种方式直观,清晰,是最常见的一种方式,这种方式分不清行列间的关系,而且数据较多时很容易出错,上一页,下一页,暂 停,重 放,系统,返 回,休息,3.给所有元素赋值时或采用分行方式赋值时,下标1可省略,例:int 3=1,2,3,6,5,4;,a00 a01 a02 a10 a11 a12,int a23=1,2,1;,int b3=1,2,3,4,5,6,7,8,9,10,11,12;,int a23=1,2,3,6,5,4;,int a3=1,2,1,a00 a01 a02 a10 a11 a12,4.任何时候下标2不能省略,因为系统无法判断元素个数,a00 a01 a02 a10 a11 a12,上一页,下一页,暂 停,重 放,系统,返 回,休息,四、二维数组的引用,与一维数组的引用类似,二维数组的引用也是通过数组名和两个下标进行的,例:编写输入各位同学成绩的程序段(假设有40位同学),main()int i,j;float cj416;for(i=1;i=40;i+)for(j=1;j=5;j+)printf(“请输入第%d位同学第d门成绩”),i,j);scanf(“%f”,cjij);,上一页,下一页,暂 停,重 放,系统,返 回,休息,指向指针的指针,i,4,p2,&i,p1,&p2,定义方法:类型标识符*指针变量名*结合方向:自右自左*p 相当于*(*p),例:int*p1;int*p2;int i=3;p2=,定义一个指向指针变量的变量 p1,定义一个指针变量p2,定义一个整型变量i,将变量i的地址传给p2,即使p2指向变量i,将指针变量p2的地址传给p1,即使p1指向p2,一个指针可以指向一个整型数据、实型数据、字符型数据以及结构体、共用体等数据类型,也可以指向另一个指针。,上一页,下一页,暂 停,重 放,系统,返 回,休息,输出杨辉三角形(程序见P133),111 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1,分析特点是:第一列是1 对角线为1 从第三行开始,每数是它上面前一列和它对应列的和 可用 aij=ai-1j-1+ai-1j表示,