C语言数组PPT课件_第1页
C语言数组PPT课件_第2页
C语言数组PPT课件_第3页
C语言数组PPT课件_第4页
C语言数组PPT课件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1,第8周实验,作业1:从键盘输入20个数到m数组,将下标为0、2、4的元素赋值给数组n,输出n中内容作业2:产生10个50,90上的随机整数,求其中能被5整除的所有数的和。作业3:将10个数(可以随机产生)中所有的偶数除以2,奇数乘以2.作业4:求20个数(可以随机产生)中的最大值和次最大值。作业5:30个元素,赋予从2开始的偶数,每5个求一个平均值放到另一数组作业6:数组为20个整数,求其中的素数。作业7:教材975-6作业8:实验指导45:6,2,引例:输入30个学生的成绩,求高于平均成绩的人数。,#includestdio.hmain()inti,x,k=0;floats=0,ave;for(i=1;i=30;i+)scanf(%d,for(i=1;i=30;i+)if(ave?)k+;如何保存30个成绩?,变量性质:能保存多个数据(长度)通过循环访问数据(有序),3,数组,定义:有序数据的集合特点:所有元素类型相同要素:数组名、下标,t,t0,t1,t9,4,第5章数组,数组的定义和引用对数组元素的操作:对调、最大值、最小值、平均值、和对整个数组的操作:产生随机数组、逆序、排序对字符数组的操作:连接、复制、比较,5,一、一维数组的定义和引用定义类型标识符数组名数组长度;,5.1一维数组,inta10;表示数组a共包括10个元素,分别为a0a9。,整数或整型常量表达式,6,main()inti,b10;for(i=0;i10;i+)scanf(%d,只能逐个引用数组元素,而不能一次引用整个数组。引用形式:数组名下标,2.一维数组的引用,例5-1数组元素的引用。,bi=i;,整型表达式,从0开始。,1、如何使数组元素为:1001092、作业1:从键盘输入20个数到m数组,将下标为0、2、4的元素赋值给数组n,输出n中内容。,7,在定义数组时,对全部数组元素赋初值。inta5=6,2,7,-3,5;只给一部分元素赋值。inta5=6,2;inta5=6,2,0,0,0;定义数组时使数组a中全部元素自动赋以0值。staticinta5;inta5=0;对全部数组元素赋初值时,可以不指定数组长度。inta3=1,2,3;inta=1,2,3;,二、一维数组的初始化,8,2.rand函数的用法:格式:rand()说明:(1)该函数包含在头文件stdlib.h中。(2)该函数产生0到整型最大值之间的一个随机整数。,产生a,b区间上任意整数的方法:rand()%(b-a+1)+a,srand函数(头文件time.h)srand(time(0)用当前时间作为随机数的初始种子,三、随机函数random和rand,9,说明:srand函数,可以产生不同的随机数,此函数包含在time.h头文件中。,#includestdlib.hmain()inti,a10;for(i=0;i10;i+)ai=rand()%11+5;for(i=0;i10;i+)printf(%5d,ai);printf(n);,#includetime.h,srand(time(0);,作业2:产生50,90上的随机整数,求能被5整除的数的和。作业3:将10个数中所有的偶数除以2,奇数乘以2.,10,例5-3、4求10个学生成绩的最高分、最低分和平均分。,#includestdio.hmain()inti,a10,min,max;floataverage,s;for(i=0;imax)max=ai;s+=ai;average=s/10;printf(max=%d,min=%d,ave=%7.2f,max,min,average);,5.1.4一维数组的简单应用,作业5:30个元素,赋予从2开始的偶数,每5个求一个平均值放到另一数组。,例5-5求10个数的最小的值,并将该最小值与最前面的元素互换(最小值唯一)。,方法1:数组元素变化较大无法知道最小值原来的位置方法2:,2,10,-1,2,-1,-13,0,3,5,7,-13,10,顺序法,选择法,12,#includemain()inti,j,t,a10,k;for(i=0;i=9;i+)scanf(%d,13,#includemain()inti,j,t,a10,k;for(i=0;i=9;i+)scanf(%d,作业4:求20个数中的最大值和次最大值。,14,例5-6产生10个40,100内的随机数,并按由小到大的顺序排序后输出。,3,45,2,-6,-17,66,50,2,3,-6,2,-17,-6,for(j=1;j10;j+)if(aja0)t=a0;a0=aj;aj=t;for(j=2;j10;j+)if(aja1)t=a1;a1=aj;aj=t;,for(i=0;i9;i+)for(j=i+1;j10;j+)if(ajai)t=ai;ai=aj;aj=t;,执行9次,15,#defineN10#includestdlib.h#includestdio.hmain()inti,j,t,aN,k;for(i=0;iN;i+)ai=rand()%61+40;printf(%5d,ai);for(i=0;iN-1;i+)for(j=i+1;jN;j+)if(ajai)t=ai;ai=aj;aj=t;for(i=0;iN;i+)printf(%5d,ai);,顺序排序,16,例5-6产生10个40,100内的随机数,并用选择排序法按由小到大的顺序排序后输出。,3,45,2,-6,-17,66,50,k=0,k=2,k=3,k=4,-17,3,17,k=0;for(j=1;j10;j+)if(ajak)k=j;if(k!=0)t=a0;a0=ak;ak=t;k=1;for(j=2;j10;j+)if(ajak)k=j;if(k!=1)t=a1;a1=ak;ak=t;,for(i=0;i9;i+)k=i;for(j=i+1;j10;j+)if(ajak)k=j;if(k!=i)t=ai;ai=ak;ak=t;,执行9次,18,#defineN10#includestdlib.hmain()inti,j,t,aN,k;for(i=0;iN;i+)ai=rand()%61+40;printf(%5d,ai);for(i=0;iN-1;i+)k=i;for(j=i+1;jN;j+)if(ajak)k=j;if(k!=i)t=ai;ai=ak;ak=t;for(i=0;iN;i+)printf(%5d,ai);,选择排序,19,例:5-10用二分查找法找一个数是否在一个有序的数组中。,#includestdio.hmain()intn=8,key,m,left,right;inta=1,3,5,7,9,15,19,24;printf(输入待查数据:n);scanf(%d,作业7:教材975-6,20,3,45,2,-6,-17,66,50,50,66,-17,-6,2,45,3,for(i=0;i=(n-1)/2;i+)t=ai;ai=an-1-i;an-1-i=t;,例5-8将一维数组中的n(n=50)个数按逆序存放。,21,#includestdio.hmain()inta50,t,n,i;scanf(%d,22,补充1:已知数组a中有8个互不相等的元素,数组b中有5个互不相等的元素,而数组c中包含那些在a中但不在b中的元素,编程产生数组c。(产生新数组),12,-1,3,2,77,31,-6,2,-14,77,-1,76,a,12,3,31,-6,c,b,0,0,23,#includestdio.hmain()inti,j,k=0,a8,b5,c8;for(i=0;i=5)ck=ai;k+;for(i=0;ik;i+)printf(%5d,ci);,作业6:数组为20个整数,求其中的素数。,24,补充2:打印以下方阵:128310283101831012310128101283,1,2,8,3,10,1,2,8,3,10,1,2,8,3,10,1,2,8,3,10,1,2,8,3,10,1,2,8,3,for(j=1;j5;j+)xj-1=xj;,y=x0;,x4=y;,25,main()inti,j,y;intx5=1,2,8,3,10;for(i=0;i=4;i+)for(j=0;j=4;j+)printf(%5d,xj);printf(n);y=x0;for(j=1;j=4;j+)xj-1=xj;x4=y;,for(j=0;j4;j+)xj=xj+1;,1、作业8:实验指导45:62、如何实现:数组逆序?,26,第9周实验,作业1:数组为20个整数,求其中的素数。作业2:教材975-6作业3:实验指导45:6作业4:产生10个20.80的随机数,并进行排序。作业5:打印等边杨辉三角(教材P975-9)。作业6:教材P975-10作业7:教材P975-5作业8:实验指导P56:三(1),27,5.2二维数组一、二维数组的定义和引用1、定义类型标识符数组名第1维的长度第2维的长度可以把二维数组看作是一种特殊的一维数组a0a00a01a02a1a10a11a12二维数组在内存中按行存放,a00a02a11a01a10a12,2、引用数组名下标下标,28,二、二维数组的初始化inta34=1,2,3,4,5,6,7,8,9,10,11,12;inta34=1,2,3,4,5,6,7,8,9,10,11,12;inta34=1,5,9;inta33=1,0,3,4,0,0,0,8,0;inta3=1,0,3,4,0,0,0,8,0;inta3=1,0,3,4,0,8,29,三、二维数组的输出,#includestdio.hmain()inta33,i,j,t,k=1;for(i=0;i3;i+)for(j=0;j3;j+)aij=k+;printf(原矩阵为:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,aij);printf(n);for(i=0;i3;i+)for(j=0;ji;j+)t=aij;aij=aji;aji=t;printf(转置后的矩阵为:n);,for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,aij);printf(n);,原矩阵为:123456789转置后的矩阵为:147258369,例5-12将一个3行3列的矩阵转置后输出。,30,例5-13输出如下图所示的杨辉三角形。,main()inta77,i,j;for(i=0;i7;i+)ai0=1;aii=1;for(i=2;i7;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i7;i+)for(j=0;j=i;j+)printf(%4d,aij);printf(n);,111121133114641151010511615201561,作业5:打印等边杨辉三角(教材P975-9)。,四、二维数组的常用算法,31,1000001310001433101443331444331214431222141222221,补充3:打印如下方阵(7*7),主对角线:i=j,副对角线:i+j=6,ijinti,j;floats,ave;for(i=0;iN;i+)s=0;for(j=0;jM;j+)s+=aij;ave=s/M;printf(第%d行的平均值为%.2fn,i,ave);,第0行的平均值为77.67第1行的平均值为84.67第2行的平均值为73.67第3行的平均值为90.33第4行的平均值为62.67,34,例5-15求一个5行3列的二维数组各列的最大值。,#includestdio.h#defineN5#defineM3main()intaNM=88,76,69,85,78,91,84,76,61,90,86,95,67,51,70;inti,j,lmax;for(j=0;jM;j+)lmax=a0j;for(i=1;iN;i+)if(lmaxaij)lmax=aij;printf(第%d列的最大值是%dn,j,lmax);,第0列的最大值是90第1列的最大值是86第2列的最大值是95,求N*M数组的最大值及其行标、列标。求5*5二维数组每行最大值和每行的和。,35,第10周实验,作业1:从键盘输入十个学生的成绩,统计最高分,最低分和平均分,以及得最高分的人数。作业2:输出斐波那契(Fibonacci)数列(1,1,2,3,5,8,13)的前20项作业3:将具有10个元素的一维数组最小值放到最前面,最大值放到最后面。作业4:求20个数的一维数组中的素数,并将素数排序作业5:求一个二维数组(5*5)中每行的最大值和每行的和作业6:求出NM整型数组的最大元素及其所在的行坐标及列坐标。作业7:实验指导P57:3,36,5.3字符型数据,普通字符用一对单撇号括起来的一个字符。axd?(2)转义字符将反斜杠后面的字符转变成另外的意义。(P81表5.1)n12x35,1、字符型常量,一、字符型数据常量,37,2、字符串常量,用一对双撇号括起来的字符序列。如:CHINA、a、howareyou.、。字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且在字符串的最后自动添加一个0(空字符,二进制00000000)作为字符串结束标志。,请区别:a和a,38,1、字符型变量,只能放一个字符,占一个字节,存放该字符的ASCII码值。定义charc1,c2;赋值c1=a;c2=b;,c=a;c=97;二者等价,整型与字符型变量可以通用,通用范围:0127,C的值相等但是在内存中的存放形式不一样,二、字符型数据变量,39,2、字符串变量,charc10;chard23;,初始化charc10=I,a,m,h,a,p,p,y;,对字符数组初始化,可以用字符串常量来使字符数组初始化。如:charc=Iamhappy;charc=Iamhappy;charc11=Iamhappy;,charc32=a,b,c,d,e,f;,40,三、字符型数据输入输出,1、字符型数据:(1)printf、scanf函数:%c格式(2)putchar、getchar函数例5-16从键盘上输入一个字符,然后输出到终端显示器上。,#includestdio.hmain()charc;c=getchar();putchar(c);,41,2、字符数组的输入输出,(1)printf、scanf:%c格式,逐个输入/输出。(2)printf、scanf:%s格式,一次输入/输出。,#includemain()charc10;inti;for(i=0;i10;i+)scanf(%c,ci=getchar();,putchar(ci);,#includemain()charc10;scanf(%s,c);printf(%s,c);,42,china,说明1:用%s格式输出字符时,输出遇0时结束,printf函数中的输出项是字符数组名,而不是数组元素。,例:charc11=china;printf(%s,c);,说明2:在使用scanf函数时,若用%s格式输入字符串,则后面跟数组名,且不带Iamhappy,注:用scanf函数(格式字符%s)无法输入空格。,43,(3)gets、puts:一次输入/输出整个字符串。,例:#includemain()chara10;gets(a);pu

温馨提示

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

评论

0/150

提交评论