C语言数组.pptx

上传人:莉*** 文档编号:73645784 上传时间:2023-02-21 格式:PPTX 页数:58 大小:305.62KB
返回 下载 相关 举报
C语言数组.pptx_第1页
第1页 / 共58页
C语言数组.pptx_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《C语言数组.pptx》由会员分享,可在线阅读,更多相关《C语言数组.pptx(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第7章数组记录1个学生成绩,可用ints1;记录2个学生成绩,可用ints1,s2;记录3个学生成绩,可用ints1,s2,s3;记录100个数,用ints1,s2,s100;?如何处理有相同属性的批量数据呢?数组intscore100;代表一个元素个数为100的整型数组score0,score1,score2,.,score99100个整型变量数组计数从0开始第1页/共58页第7章数组基本数据类型:char intfloatdouble一个基本数据类型的变量一次只能存储一个数值构造数据类型,由基本数据类型通过一定的规则组合而成,亦称导出类型。数组就属于构造数据类型,用数组一次可以表示一批属于

2、相同数据类型的数据。intscore100;定义一个数组score100后,内存中将开辟连续的100个int的空间单元,存储int变量score0,score99第2页/共58页1.一维数组的定义和引用(p121)1)定义 类型名数组名数组长度;数组的大小必须在定义时给定,在程序的运行过程中它是不能被改变的.数组(变量)的名称,标识符数组元素的类型inta10;定义一个含有10个整型元素的数组acharc200;定义一个含有200个字符元素的数组cfloatf5;定义一个含有5个浮点型元素的数组f常量表达式第3页/共58页先定义,后使用只能引用单个的数组元素,不能一次引用整个数组数组名下标下标

3、:整型表达式取值范围:0,数组长度-1inta10;10个元素:a0、a1、a9数组元素的使用方法与同类型的变量相同scanf(%d,&ai);printf(%d,ai);2)引用1.一维数组的定义和引用一维数组的定义和引用引用时千万不能越界,如a10第4页/共58页区分数组的定义和数组元素的引用内的是数组元素的下标内的是数组元素的下标下标可以是一个整型表达式下标可以是一个整型表达式下标的值不能越界下标的值不能越界,0.N1内的是数组的长度内的是数组的长度数组长度必须是常量数组长度必须是常量(表达式)表达式)一旦指定,就不能改变一旦指定,就不能改变定义数组类型名数组名数组长度;inta10;引

4、用数组元素数组名下标a0=a9=0;ak=temp;第5页/共58页2.一维数组的初始化(p122)静态数组初始化staticintb5=1,2,3,4,5;在定义数组时,对数组元素赋初值类型名数组名数组长度=初值表;inta10=1,2,3,4,5,6,7,8,9,10;a0=1,a1=2,.a9=10,静态存储的数组如果没有初始化,所有元素自动赋0动态存储的数组如果没有初始化,所有元素视为随机值.如:autointc5;或intc5;在引用前必须赋初值。首先考虑是否给变量赋初值是编程的好习惯!第6页/共58页一维数组的初始化 针对部分元素的初始化intb5=1,2,3;b0=1,b1=2,

5、b2=3,b3=0,b4=0如果对全部元素都赋初值,可以省略数组长度inta=0,1,2等价于inta3=0,1,2 实际编程最好不要省略数组长度在TC,VC中,其余元素实际值是被赋值为0第7页/共58页例 7-2 用数组计算 fibonacci 数列的前20个数,并按每行打印5个数的格式输出。1,1,2,3,5,8,分析:用数组计算并存放fibonacci数列的前20个数intf20;f0=f1=1;fn=fn-1+fn-2;2n193使用一维数组编程第8页/共58页例 7-2 源程序#includeintmain(void)inti;intfib20=1,1;/*数组初始化*/for(i=

6、2;i20;i+)fibi=fibi-1+fibi-2;for(i=0;i20;i+)printf(%6d,fibi);if(i+1)%5=0)/*5个数换行*/printf(n);return0;第9页/共58页例7-3 在数组中查找一个给定的数要求:输入5个互异的整数,将它们存入数组a中,再输入一个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“NotFound”。输入:298169输出:1输入:298167输出:NotFound第10页/共58页例 7-3 源程序#includeintmain(void)inti,flag,x;inta5;printf(Enter5int

7、egers:);for(i=0;i5;i+)scanf(%d,&ai);printf(Enterx:);scanf(%d,&x);flag=0;for(i=0;i5;i+)if(ai=x)printf(Indexis%dn,i);flag=1;break;if(flag=0)printf(NotFoundn);return0;Enter5integers:29819Enterx:9Indexis1如果允许输入相同的数Enter5integers:29819Enterx:9Indexis1Indexis4输出所有满足条件的数的下标第11页/共58页#includeintmain(void)int

8、i,index,x;inta5;printf(Enter5integers:);for(i=0;i5;i+)scanf(%d,&ai);printf(Enterx:);scanf(%d,&x);index=-1;for(i=0;i5;i+)if(ai=x)index=i;if(index!=-1)printf(Indexis%dn,index);elseprintf(NotFoundn);return0;例 7-3 思考Enter5integers:29819Enterx:9Indexis4若要求输出最后一个相同数的下标第12页/共58页例 7-3 思考#includeintmain(void

9、)inti,flag,x;inta5;printf(Enter5integers:);for(i=0;i5;i+)scanf(%d,&ai);printf(Enterx:);scanf(%d,&x);flag=0;for(i=0;i=0;i-)第13页/共58页例7-4 求最小值 要求:输入一个正整数n(na0,a1,假设min=a0,与i 1,n-1所有的数进行比较,如果aiminmin=ai;所有的数都比较,一共循环n-1次第14页/共58页例 7-4(1)求最小值#includeintmain(void)inti,min,n;inta10;printf(Entern:);scanf(%d

10、,&n);printf(Enter%d integers:,n);for(i=0;in;i+)scanf(%d,&ai);min=a0;for(i=1;in;i+)if(aimin)min=ai;printf(minis%dn,min);return0;第15页/共58页例7-4 求最小值(2)要求:输入一个正整数n(n10),再输入n个整数,将它们存入数组a中。(1)输出最小值和它所对应的下标(2)将最小值与第一个数交换,输出交换后的n个数在求最小值的过程中,用index记录最小值对应的下标aindex就是最小值第16页/共58页#includeintmain(void)inti,index

11、,n;inta10;printf(Entern:);scanf(%d,&n);printf(Enter%dintegers:,n);for(i=0;in;i+)scanf(%d,&ai);index=0;for(i=1;in;i+)if(aiaindex)index=i;printf(minis%dtsubis%dn,aindex,index);return0;例7-4(2)求最小值及其下标第17页/共58页要使最小值与第一个数交换 例7-4 求最小值(3)要求:输入一个正整数n(n10),再输入n个整数,将它们存入数组a中。(1)输出最小值和它所对应的下标(2)将最小值与第一个数交换,输出交

12、换后的n个数aindexa0temp=a0;a0=aindex;aindex=temp;第18页/共58页temp=aindex;aindex=ak;ak=temp;任意两个数组元素值aindex和ak的交换515aindex=5,ak=1;temp=0;第19页/共58页例 7-1 选择法排序输入n(n10),再输入n个数,用选择法将它们从小到大排序后输出。设n=53528135281(1)15283(2)2583(3)385(4)58 选择法:每次从未排序的数中通过选择最小数进行排序。第20页/共58页35281(n=5)5个数(a0a4)中找最小数,与a0交换(1)15283a4a04个

13、数(a1a4)中找最小数,与a1交换(2)12583a2a13个数(a2a4)中找最小数,与a2交换(3)12385a4a22个数(a3a4)中找最小数,与a3交换(4)12358a4a3选择法(1)第21页/共58页选择法(2)(1)5个数(a0a4)中找最小数,与a0交换(2)4个数(a1a4)中找最小数,与a1交换(3)3个数(a2a4)中找最小数,与a2交换(4)2个数(a3a4)中找最小数,与a3交换(1)n个数(a0an-1)中找最小数,与a0交换(2)n-1个数(a1an-1)中找最小数,与a1交换(n-1)2个数(an-2an-1)中找最小数,与an-2交换an-1n个数排序,

14、n-1次找最小数以及交换操作第22页/共58页#includeintmain(void)inti,index,k,n,temp;inta10;printf(Entern:);scanf(%d,&n);printf(Enter%dintegers:,n);for(i=0;in;i+)scanf(%d,&ai);for(k=0;kn-1;k+)/*对n个数排序*/index=k;for(i=k+1;in;i+)if(aiaindex)index=i;temp=aindex;aindex=ak;ak=temp;printf(Aftersorted:);for(i=0;in;i+)/*输出n个数组元素

15、的值*/printf(%d,ai);return0;源代码选择法排序第23页/共58页for(i=0;in;i+)scanf(%d,ai);数组:相同类型数据的有序集合,在内存中连续存放。l由数组名和下标惟一地确定每个数组元素l每个元素都属于同一类型在数组中,一批相同类型的变量使用同一个数组变量名,用下标来相互区分。inta10;第24页/共58页40027从高位开始逐位输出一个整数的各位数字(选作)if(in0)/*先向左找到最高位的位数*/power=power/10;temp+;k=k*10;power=in;while(temp0)/*再向右计算每位数值*/temp-;k=k/10;d

16、igit=power/k;power=power%k;printf(%-2d,digit);第25页/共58页40027用一维数组实现inti,digit10,number,temp;while(number!=0)digiti=number%10;i+;number=number/10;temp=i-1;for(i=temp;i=0;i-)printf(%-2d,digiti);第26页/共58页二维数组一维数组:访问单个变量元素时,由一个下标决定。一维数组:访问单个变量元素时,由一个下标决定。inta6;int b 3 6;一维数组用于表示一列长表,一个多维向量访问单个变量元素时,由两个下

17、标同时决定。二维数组3行6列700b12=700;第j行、第k列的元素为bjk第27页/共58页二维数组二维数组常用于表示矩阵的运算inta32;intb32;intc32;for(j=0;j3;j+)for(k=0;k2;k+)cjk=ajk+bjk;Mc=Ma+Mb第28页/共58页inta6;intb36;intc1036;访问单个变量元素时,由三个下标同时决定。三维数组多维数组的空间想象一维数组:一列长表或一个向量二维数组:一个表格或一个平面矩阵4*3*34*5三维数组:三维空间的一个数据阵多维数组:多维空间的一个数据列阵第29页/共58页7.2.2 二维数组的定义和引用1、定义 类型

18、名数组名行长度列长度;数组元素的类型数组(变量)的名称,标识符常量表达式,给定数组的大小;inta32;定义一个二维数组a,3行2列,3*2=6个int元素floatb510;定义一个二维数组b,5行10列,5*10=50个float元素第30页/共58页下标不能越界下标不能越界7.2.2 二维数组的定义和引用二维数组的定义和引用先定义,后引用2、引用数组元素的引用格式:数组名行下标列下标行下标和列下标:整型表达式行下标的取值范围是0,行长度-1列下标的取值范围是0,列长度-1inta32;3行2列,3*2=6个int元素a00a01a10a11a20a21第31页/共58页二维数组在内存中的

19、存放方式inta32;3行2列,6个元素表示1个3行2列的矩阵a00a01a10a11a20a21 二维数组的元素在内存中按先行后列的方式存放a00a01a10a11a20a21第32页/共58页7.2.3 二维数组的初始化1、分行赋初值inta33=1,2,3,4,5,6,7,8,9;intb43=1,2,3,0,0,0,4,5;数组a123456789数组b1230004500002、按先行后列的顺序赋初值、按先行后列的顺序赋初值inta33=1,2,3,4,5,6,7,8,9;intb43=1,2,3,0,0,0,4,5;后面缺省的项均为零后面缺省的项均为零第33页/共58页3、省略行长

20、度对全部元素都赋初值,inta3=1,2,3,4,5,6,7,8,9;或分行赋初值时,在初值表中列出了全部行intb3=1,2,3,0,0,0,4,5建议不要省略数组a123456789数组b1 2 30 0 04 5 00 0 07.2.3 二维数组的初始化二维数组的初始化第34页/共58页7.2.3 二维数组的初始化二维数组的初始化P130staticintb43=1,2,3,4,5;intb43=1,2,3,4,5;inta10=;第35页/共58页7.2.4 使用二维数组编程通常将行下标做为外循环的循环变量 列下标 内循环利用行下标和列下标分别做为循环变量,通过二重循环,遍历二维数组第

21、36页/共58页例7-6 生成一个矩阵并输出 定义1个3*2的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。aij=i+j(0i2,0j1)分析:a00a01a10a11a20a21aij0 11 22 3inta32;第37页/共58页#includeintmain(void)inti,j;inta32;for(i=0;i3;i+)for(j=0;j2;j+)aij=i+j;for(i=0;i3;i+)for(j=0;j2;j+)printf(%4d,aij);printf(n);return0;a00a01a10a11a20a21 i=0j=0i=0j=1i=1j=0i=1j=1

22、i=2j=0i=2j=1例7-6 源程序011223第38页/共58页7.2找出矩阵中最大值所在的位置例7-5将1个3*2的矩阵存入1个3*2的二维数组中,找出最大值以及它的行下标和列下标,并输出该矩阵。第39页/共58页#includeintmain(void)inti,j,col,row;inta32;printf(Enter6integers:n);for(i=0;i3;i+)for(j=0;j2;j+)scanf(%d,&aij);for(i=0;i3;i+)for(j=0;j2;j+)printf(%4d,aij);printf(n);row=col=0;for(i=0;i3;i+)

23、for(j=0;jarowcol)row=i;col=j;printf(max=a%d%d=%dn,row,col,arowcol);return0;例7-5源程序row记录最大值的行下标col最大值的列下标arowcol就是最大值第40页/共58页二维数组的输入例7-5中,inta32;for(i=0;i3;i+)for(j=0;j2;j+)scanf(%d,&aij);a00a01a10a11a20a21 for(j=0;j2;j+)for(i=0;i3;i+)scanf(%d,&aij);Enter6integers:3210-96-1Enter6integers:3210-96-13-

24、92610-1max=a20=10max=a10=10 3210-96-1第41页/共58页用二维数组a表示N*N方阵时:intaNN;N是正整数aij:i、j的取值范围0,N-1矩阵元素与二维数组元素的对应关系:矩阵与二维数组i=j主对角线i=j下三角a00a01a02a10a11a12a20a21a22i+j=N-1副对角线第42页/共58页输入一个正整数n(1n6),根据下式生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。aij=i*n+j+1(0in-1,0jn-1)例7-7 方阵转置 123456789147258369a01a10a02a20a12a21aijaji 分析

25、:inta66;n=3时第43页/共58页#includeintmain(void)inti,j,n,temp;inta66;printf(“Entern:);scanf(%d,&n);/*给二维数组赋值给二维数组赋值略略*/*行列互换*/for(i=0;in;i+)for(j=0;jn;j+)if(i=j)/*只遍历上三角阵*/temp=aij;aij=aji;aji=temp;/*按矩阵的形式输出a略略*/return0;例7-7 源程序第44页/共58页 /*行列互换*/for(i=0;in;i+)for(j=0;jn;j+)if(i=j)temp=aij;aij=aji;aji=tem

26、p;1 2 3 4 5 67 8 9主对角线:主对角线:i=j上三角:上三角:i=ji=0147256389i=1147258369例7-7 说明for(j=i;jn;j+)(ij)for(j=i+1;jn;j+)第45页/共58页 /*行列互换*/for(i=0;in;i+)for(j=0;jn;j+)temp=aij;aij=aji;aji=temp;123456789例7-7 思考i=0147256389i=1127458369i=2123456789第46页/共58页分析:月01231112非闰年03128313031闰年03129313031例7-8 日期计算inttab213=0,

27、31,28,31,30,31,30,31,31,30,31,30,310,31,29,31,30,31,30,31,31,30,31,30,31自定义1个函数day_of_year(year,month,day),返回year,month和day所对应的是该年的第几天。day_of_year(2000,3,1)返回61day_of_year(1981,3,1)返回60第47页/共58页例7-8 源程序intday_of_year(intyear,intmonth,intday)intk,leap;inttab213=0,31,28,31,30,31,30,31,31,30,31,30,310,

28、31,29,31,30,31,30,31,31,30,31,30,31;leap=(year%4=0&year%100!=0)|year%400=0;for(k=1;kmonth;k+)day=day+tableapk;returnday;第48页/共58页一维字符数组 t0 t1 t4tHappy输出数组t的所有元素for(i=0;i5;i+)putchar(ti);chart5=H,a,p,p,y;chart5;第49页/共58页字符串常量:用一对双引号括起来的字符序列一个字符串的结束符:0字符串(P136)Happy6个字符Happy0有效字符有效字符字符串的有效长度:有效字符的个数字符

29、串的有效长度:有效字符的个数字符0,就是ASCII码值为0的字符第50页/共58页利用一维字符数组存储字符串常量“Helloworld!”charstr80=“Helloworld!”;charstr80=H,e,l,l,o,w,o,r,l,d,0;严格区别字符常量和字符串常量A/*占一个字节charc=A*/“A”/*占两个字节charstr2=“A”*/printf(%d,%dn,sizeof(A),sizeof(A);第51页/共58页利用一维字符数组存储字符串常量 s0 s1 s5s Happy0 t0 t1 t4t Happychart5=H,a,p,p,y;chars6=“Happ

30、y”;字符串是一个特殊的一维字符数组第52页/共58页/*“Helloworld”*/产生相同结果的字符串:chars05=ABCD;chars1=ABCD;chars25=A,B,C,D,0;chars3=A,B,C,D,0;chars35=ABCDE;第53页/共58页字符串的存储autochars80=Happy;字符串“Happy”由第一个0前面的所有字符和0一起构成0之后的其他数组元素与该字符串常量无关 s0 s1 s5s H a p p y 0?第54页/共58页利用一维字符数组对字符串进行操作或运算例7-9输入一个以回车结束的字符串(少于10个字符),它由数字字符组成,将该字符串

31、转换成整数后输出。字符串转化为十进制整数(p134)第55页/共58页#includeintmain(void)inti,n;chars10;printf(“Enterastring:);/*输入字符串*/i=0;while(si=getchar()!=n)i+;si=0;n=0;/*将字符串转换为整数*/for(i=0;si!=0;i+)if(si=0)n=n*10+(si-0);elsebreak;printf(digit=%dn,n);return0;字符串转化为整数=8进制数if(si=0)n=n*7+(si-0);123=(1*10+2)*10+3第56页/共58页对字符串的操作把字符串放入一维字符数组(存储)对字符串的操作=对字符数组的操作普通字符数组:数组元素的个数是确定的,一般用下标控制循环字符串:没有显式地给出有效字符的个数,只规定在字符串结束符0之前的字符都是字符串的有效字符,一般用结束符0来控制循环循环条件循环条件:si!=0第57页/共58页感谢您的观看!第58页/共58页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁