C语言—— 7数组

上传人:无*** 文档编号:247337401 上传时间:2024-10-18 格式:PPT 页数:88 大小:414.50KB
返回 下载 相关 举报
C语言—— 7数组_第1页
第1页 / 共88页
C语言—— 7数组_第2页
第2页 / 共88页
C语言—— 7数组_第3页
第3页 / 共88页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,7,章 数 组,7.1.1,一维数组的引入,例,7.1,输入,10,个数,并以与输入时相反的顺序输出这,10,个数。,例,7.2,输入,10,名学生的成绩,求这,10,名学生的平均分,并统计高于平均分的学生人数。,7.1.2,一维数组的定义,存储类别 类型标识符 数组名标识符,常量表达式,;,auto,int,test4;,(,1,)存储类别是静态型,static,、自动型,auto,、外部型,extern,(,2,)类型标识符可以是,int,、,char,、,float,、,long,、,unsigned,等,(,3,)数组名标识符的命名规则与变量的命名规则相同,(,4,)常量表达式是数组的元素个数,也称为数组长度,是一个整型常量表达式。,(,5,),C,语言规定数组元素的下标从,0,开始,例,static,int,a10;,下面是合法的数组定义:,int,m10,p2*5;,char str80;,float score35;,#define N 8,long,numN,;,short y4*N;,下面的定义是非法的:,int,a(5);,int,n=10;,char,cn,;,Why?,7.1.3,一维数组的存储结构及初始化,1.,一维数组的存储结构,例如:,long a5;,数组,a,的存储空间的分配如图,7-1,所示,a3,的地址为:,1000+3*4=1012,数组元素地址,=,数组起始地址,+,元素下标*,sizeof,(数组类型),2.,一维数组的初始化,C,语言允许在定义数组的同时,对数组各元素指定初值,把这个过程称为初始化。,(,1,)在定义数组时对所有数组元素赋初值,int,a5=8,8,2,4,123;,static char ch7=,p,r,o,g,r,a,m,;,(,2,)给数组部分元素赋初值,static,int,a5=7,6;,其他元素自动赋,0,值,(,3,)对全部元素赋初值,可以不指定数组长度,static,int,a=1,3,5,7,9,11,13;,(,4,)如果想使一个数组中全部元素值为,0,,可以写成,int,a10=0,0,0,0,0,0,0,0,0,0;,int,a10=0;,static,int,a10;,7.1.4,一维数组元素的引用,注意:,C,语言中数组名实质上是数组的首地址,是一个常量地址,int,k4;,k,k0,k1,k2,k3,数组元素的引用:,数组名,下标,下标的取值范围从,0,到,”,数组元素个数,”,减,1,例,7.1,输入,10,个数,并以与输入时相反的顺序输出这,10,个数。,void main(),int,i,a10;,for(i,=0;i=0;i-),printf(%5d,ai);,printf(n,);,若换个要求,将输入的,10,个数按逆序,(,反序,),存放在数组中并输出数组那又如何修改程序?,方法一:给数组元素输入时,元素的下标从大到小,这样数组存放数据就是与输入时反序。,void main(),int,i,a10;,for(i,=0;i10;i+),scanf(%d,for(i,=0;i10;i+),printf(%5d,ai);,printf(n,);,方法二:先给数组元素输入时,元素的下标还是从小到大,这样数组存放数据就是与输入时相同,再来把数组元素第一个与最后一个对调,第二与倒数第二个对调,直到第,N/2-1,个与第,N/2,个对调。如下图所示:,void main(),int,i,a10,t;,for(i,=0;i10;i+),scanf(%d,&ai,);,for(i,=0;i10/2;i+),t=,ai,;,ai,=a9-i;,a9-i=t;,for(i,=0;i10;i+),printf(%5d,ai);,printf(n,);,例,7.2,输入,10,名学生的成绩,,,求这,10,名学生的平均分,,,并统计高于平均分的学生人数。,#define M 10,void main(),int,i,count,=0;,float,scoreM,sum,=0,average;,for(i,=0;i,M;i,+),scanf(%f,&scorei,);,sum=,sum+scorei,;,average=sum/M;,for(i,=0;iaverage),count+;,printf(average,=%5.2fncount=%,dn,average,count,);,例,7.3,输入,10,个数,存放在数组中,找出最大和最小元素的值及它们的位置。,#define M 10,void main(),int,i,j,k,max,min,;,static,int,aM,;,for(i,=0;i,M;i,+),scanf(%d,&ai,);,max=min=a0;,j=k=0;,for(i,=0;i,M;i,+),if(max,ai,),min=,ai,;k=i;,printf(max:a%d,=%,d,min:a%d,=%,d,j,max,k,min,);,例,7.4,从键盘上输入,10,个数,用选择法将其按由大到小的顺序排列。,选择排序法,i n-i+1,1,n,2,n-1,3,n-2,每一趟排序从序列中没有排好序的元素中选择一个,值最小的元素,与没有排好序的元素最前面那个元素交,换位置。,核心思想,排序的趟号,第,i,趟排序前,序列中,未排好序的元素的个数,第,i,趟排序从序列的,后,n-i+1,个元素中,选择,一个值最,小的元素,与该,n-i+1,个元素最前面那个元素交换位置。,49 97 38 76 65 13 27 50,初 始:,第,1,趟:,第,2,趟:,第,3,趟:,第,4,趟:,第,6,趟:,第,5,趟:,第,7,趟:,13,97 38 76 65 49 27 50,13 27 38 49 50 65 76,97,13 27,38 76 65 49 97 50,13 27 38,76 65 49 97 50,13 27 38 49,65 76 97 50,13 27 38 49 50,76 97 65,13 27 38 49 50 65,97 76,#define N 10,void main(),int,i,j,t,;,int,aN,;,for(i,=0;i,N;i,+),scanf(%d,&ai,);,for(i,=0;iN-1;i+),for(j,=i+1;j,N;j,+),if(ai,aj,),t=,ai,;,ai,=,aj,;,aj,=t;,printf(n,);,for(i,=0;i,N;i,+),printf(%-6d,ai);,void main(),int,i,j,k,t,;,int,aN,;,for(i,=0;i,N;i,+),scanf(%d,&ai,);,for(i,=0;iN-1;i+),k=i;,for(j,=i+1;j,N;j,+),if(ak,aj,),k=j;,if(k,!=i),t=,ai,;,ai,=,ak,;,ak,=t;,printf(n,);,for(i,=0;i,N;i,+),printf(%-6d,ai);,(2008.9),若有定义语句:,int m=5,4,3,2,1,i=4;,则下面对,m,数组元素的引用错误的是,A)m-i,B)m2*2,C)mm0,D)mmi,C,(2008.9).,有以下程序,#include,void,fun(int,a,int,b),int,t;,t=,a;a,=,b;b,=t;,main(),int,c10=1,2,3,4,5,6,7,8,9,0,i;,for(i=0;i10;i+=2),fun(ci,ci+1);,for(i=0;i10;i+),printf(%d,ci);,printf(n,);,程序的运行结果是,A)1,2,3,4,5,6,7,8,9,0,B)2,1,4,3,6,5,8,7,0,9,C)0,9,8,7,6,5,4,3,2,1,D)0,1,2,3,4,5,6,7,8,9,A,(2008.9).,有以下程序,void,fun(int,a,int,n),int,i,t;,for(i=0;in/2;i+),t=ai;ai=an-1-i;,an-1-i=t;,main(),int,k10=1,2,3,4,5,6,7,8,9,10,i;,fun(k,5);,for(i,=2;i8;i+),printf(%d,ki,);,printf(n,);,程序的运行结果是,A)345678,B)876543,C)1098765,D)321678,D,(,2010.3,)下列选项中,能正确定义数组的语句是,A,),int num0.2008;,B,),int num;,C,),int N=2008;,int numN;,D,),#define N 2008,int numN;,D,(,2009.9,)有以下程序,main(),int,a=2,3,5,4,i;,for(i,=0;i4;i+),switch(i%2),case 0:switch(ai%2),case 0:ai+;break;,case 1:ai-;,break;,case 1:ai=0;,for(i,=0;i4;i+),printf(“%d”,ai,);,printf(“n,”);,程序运行后的结果是:,A,),3 3 4 4 B,),2 0 5 0,C,),3 0 4 0 D,),0 3 0 4,C,7.2,二维数组,7.2.1,二维数组的引入,例,7.5,输出杨辉三角形,(,要求,10,行,),。,例,7.6,求一个矩阵的转置。,例,7.7,有一个,34,的矩阵,编程求出其中最大的元素的值,以及其所在的位置,(,即行号和列号,),。,7.2.2,二维数组的定义,static,int,a34;,float b23;,存储类别 类型标识符 数组名,常量表达式,1,常量表达式,2,对二维数组,其数组元素的表示形式为:,数组名,下标,1,下标,2,7.2.3,二维数组的存储方式及初始化,static,int,a23;,先存储第一行元素,再存储第二行元素,a00,a01,a02,a10,a11,a12,对,mXn,的二维数组,a,,若,a,是数组元素的起始地址,,aij,的地址是多少?,a+(ixn+j)xsizeof,(,元素类型,),2.,二维数组的初始化,(,1,)将数组所有元素初始值按相应顺序写在一个花括号内,static,int,a32=0,1,2,3,4,5;,(,2,)分行给二维数组赋初值,static,int,a32=0,1,2,3,4,5;,(,3,)只对部分元素初始化,static,int,a32=1,2,4,0,3;,(,4,)给全部元素赋初值,可以不指定第一维大小,但是第二维大小必须指定,static,int,a 2=0,1,2,3,4,5;,static,int,a 2=1,2,0,5,3;,7.2.4,二维数组元素的引用,引用形式:,数组名,下标,1,下标,2,printf(“%d”,a00);,scanf(%d”,a10+=a00+3*a01;,例,7.5,输出如下的杨辉三角形(,10,行),1,1,1 2 1,1 3 3 1,4 6 4 1,1 5 10 10 5 1,ai0=1;,aii,=1;,aij,=ai-1j-1+ai-1j;,#define N 10,void main(),int,i,j,n,bNN,;,printf(Enter,n:);,scanf(%d,&n,);,for(i,=0;i,n;i,+),bi0=1;,bii,=1;,for(i,=2;i,n;i,+),for(j,=1;j,i;j,+),bij,=bi-1j-1+bi-1j;,for(i,=0;i,n;i,+),for(j,=0;j=,i;j,+),printf(%-
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!