1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,/45,第,9,章 数组,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,9.1.1,一维数组的定义,类型名 数组名,整型常量表达式,例如:,int a8,;,double w22,v100,u5;,char c1,c2,cay181;,char cay210+5;,int bx+1;,3,9.1.2,一维数组元素
2、的引用,引用一维数组的元素必须用一个下标,其形式为:,数组名,下标,下标可以用一个整数或一个整数表达式表示,下标从,0,开始。,注意不要越界,例如:,int a8;,a0=1;a2=9;a7=6;,4,9.1.3,一维数组的初始化,1.,将数组元素全部初始化,int a5=1,2,3,4,5;,2.,对将数组元素部分初始化,int a5=1,2,3;,int a5=0;,3.,对大小不确定的数组进行初始化,int a=1,2,3,4,5,;,int a=1,2,3,;,5,例,9.1,编写程序,定义一个含有,30,个元素的,int,类型数组。依次给数组元素赋奇数,1,、,3,、,5,、,,然后
3、按每行,10,个数顺序输出,再按每行,10,个数逆序输出。,6,#include,#define M 30,main(),int sM,i,k=1;,for(i=0;iM;i+),si=k;k+=2;,for(i=0;i=0;i-),printf(%3d%c,si,(i%10=0)?n:);,7,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,int a5,*p=a;,下标法、数组名法、指针变量法,下
4、标法,数组名法,1,3,5,7,9,a0,a1,a2,a3,a4,*,a,*,(a+1),*,(a+2),*,(a+3),*,(a+4),指针变量法,*,(p=a),*,p+,*,p+,*,p+,*,p+,9,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,9.3.1.,数组元素作实参,与一般变量参数完全相同,9.3.2.,数组名作实参,实际上是地址传送,11,例,9.2,编写程序,:,通过一个函数为
5、主函数中定义的数组输入若干大于等于,0,的整数,用负数作为输入结束标志,;,调用另一个函数输出该数组中的数据,12,9.3.3,数组元素地址作为实参,例,9.3:,编写函数,对具有,10,个元素的,char,数组,从下标为,4,的元素开始,全部设置为“”,前,4,个元素中的内容不变。,原始:,ABCDEFGHIJK,处理后:,ABCD*,13,9.3.4,函数的指针形参和函数体中数组的区别,int*fun(int aN,int n),/,写作,a,*a,亦可,但实质上是指针变量,int bN;,return b;,/,无指向指针,main(),int wN,*p;,p=fun(w,N);,14
6、9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,例,9.4,编写程序,定义一个含有,15,个元素的数组,并编写函数分别完成以下工作:,(,1,)为所有元素赋以,0,49,的随机数,(,2,)输出数组中的元素,(,3,)按顺序每隔三个数求一个和数,(,4,)输出求出的和,16,例,9.5,对数组逆序操作,17,例,9.6,统计数组中每个整数的个数,18,例,9.7,已知存放在,a,数组中的数不重复,在
7、a,数组中查找和,x,值相同的元素的位置。若找到,输出该值和该值在,a,数组中的位置;若没找到,输出相应的信息。,19,例,9.8,w,数组中存放,n,个数据,编写函数删除下标为,k,的元素中的值。,20,例,9.9,选择法排序(升序),21,补充:冒泡法排序,22,补充:冒泡法排序,#define NUM 6,void main(void),int aNUM=5,7,4,2,8,6;,int i,j,t;,for(j=0;j=NUM-2;j+),for(i=0;iai+1),t=ai;ai=ai+1;ai+1=t;,for(i=0;i=NUM-1;i+),printf(%3d,ai);,p
8、rintf(n);,23,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,9.5.1,二维数组及其定义,类型标识符 数组名,下标,1,下标,2,int a34;,数组,a,的,12,个元素在内存中的存放顺序为:,a00,a01,a02,a03,a10,a11,a12,a13,a20,a22,a23,a23,25,9.5.2,二维数组元素的引用,数组名,下标表达式,1,下标表达式,2,例如,:,int
9、a23;,a01=5;,26,9.5.3,二维数组的初始化,1.,逐行赋值,int a23=1,2,3,4,5,6;,int a 3=1,2,3,4,5,6;,2.,整体赋值,int a23=1,2,3,4,5,6;,int a 3=1,2,3,4,5,6;,3.,不完全赋值,int a36=10,11,20,30,31,32,int a36=10,11,12,20,21;,int a36=10,11,0,30,31,32;,int a36=0,11,20,0,0,32;,27,例,9.10,通过键盘给,2 3,的二维数组输入数据,第一行赋,1,、,2,、,3,,第二行赋,10,、,20,、,
10、30,,然后按行输出此二维数组。,28,#include,main(),int a23,i,j;,for(i=0;i2;i+),for(j=0;j3;j+),scanf(%d,for(i=0;i2;i+),for(j=0;j3;j+),printf(%4d,aij);,printf(n);,29,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,9.6.1,二维数组和数组元素的地址,int*p,a34;
11、1.,二维数组由若干个一维数组组成,2.,二维数组名也是一个地址常量 可理解为行指针,3.,二维数组元素的地址例:元素,aij,的地址,(1)&aij (2)ai+j (3)*(a+i)+j,(4)&a00+4*i+j (5)a0+4*i+j,31,9.6.2,通过地址引用二维数组元素,设:,int aMN,aij,*,(ai+j),*,(*(a+i)+j),(*(a+i)j,*,(&a00+N*i+j),32,9.6.3,通过指针数组引用数组元素,int*p3,a32,i,j;,33,9.6.3,通过指针数组引用数组元素,int*p3,a32,i,j;,for(i=0;i3;i+)pi=a
12、i;,*(pi+j)*(ai+j),*(*(p+i)+j)*(*(a+i)+j),(*p+i)j (*a+i)j,*pij*pij,34,9.6.4,通过行指针引用数组元素,int a3,2,(*prt),2,;,prt=a;,(1)*(pi+j)*(pi+j),(2)*(*p+i)+j)*(*p+i)+j),(3)(*(p+i)j (*(p+i)j,(4)pij pij,35,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,
13、9.8,二维数组程序举例,9.7.1,二维数组名作实参,main(),double sM,N,;,fun(s);,(1)fun(double(*a),N,),(2)fun(double a,N,),(3)fun(double aM,N,),37,9.7.2,指针数组作实参,main(),double sMN,*psM;,for(i=0;iM;i+)psi=si;,fun(ps);,(1)fun(double*aM),(2)fun(doubel*a),(3)fun(double*a),38,9.1,一维数组,9.1,一维数组的定义和引用,9.2,一维数组和指针,9.3,函数对一维数组的引用,9.
14、4,一维数组应用举例,9.5,二维数组的定义和引用,9.6,二维数组和指针,9.7,二维数组名和指针数组作实参,9.8,二维数组程序举例,例,9.11,编写程序,通过调用随机函数给,56,的二维数组元素赋,1040,范围内的整数,求出二维数组每行元素的平均值。,40,例,9.12,打印杨辉三角形,程序按以下形式输出杨辉三角形:,1,1 1,1 2 1,1 3 3 1,1 4 6 4 1,41,例,9.13,找出矩阵每列中的最小元素,#include,#define M 5,void findmin(int a M,int ln),int i,j,t;,for(i=0;iM;i+),t=0;,f
15、or(j=1;jM;j+),if(ajiati)t=j;,lni=t;,42,void outdata(int(*a)M,int*ln),int i,j;,printf(The primary Maiti:n);,for(i=0;iM;i+),for(j=0;jM;j+),printf(%8d,aij);,printf(n);,printf(nmin,for(i=0;iM;i+),printf(%3d:%2dn,alnii,lni);,printf(n);,43,main(),int sMM=23,87,10,44,11,91,66,24,5,51,31,2,19,91,28,65,40,9,6,39,22,35,49,82,76;,int lnmM;,findmin(s,lnm);,outdata(s,lnm);,44,45,






