




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章数组(TheArray),掌握一维数组、二维数组的定义、初始化和引用。掌握字符串和字符数组的概念及其处理函数。掌握用数组进行编程的技术。,先看一个例子:,例:给出10个儿童的体重,要求计算平均体重并打印出低于平均体重的数值。,用变量来解决问题:main()intw1,w2,w3,w4,w5,w6,w7,w8,w9,w10;intt;scanf(%d%d%d%d%d%d%d%d%d%d,t=(w1+w2+w3+w4+w5+w6+w7+w8+w9+w10)/10;if(w1t)printf(%dn,w1);if(w2t)printf(%dn,w2);if(w3t)printf(%dn,w3);if(w4t)printf(%dn,w4);if(w5t)printf(%dn,w5);if(w6t)printf(%dn,w6);if(w7t)printf(%dn,w7);if(w8t)printf(%dn,w8);if(w9t)printf(%dn,w9);if(w10t)printf(%dn,w10);,用数组来解决问题:main()intw10;/*定义1个整型数组存放体重*/intt=0,i;for(i=0;i10;i+)scanf(%d,数组及其相关概念,数组是一组有序的、类型相同的单元的集合,这些单元被称为数组的元素。,数组下标,每个数组都有一个名字,称之为数组名。为标识数组中的每个元素,需要对它们进行编号,称为数组元素的下标。,下标使数组元素在数组中的位置(或排列顺序)被唯一地确定下来;用数组名加上下标可以准确地访问数组中的某个元素。,如:w0代表数组w中的第一个元素w9代表数组w中的第十个元素,注意:C语言规定下标从0开始。,说明:数组名代表数组的起始地址。数组元素在内存中是连续存储的。,7.1一维数组的定义和引用(OneDimensionArray),一、一维数组的定义,指明数组元素的数据类型,指明数组所含的元素个数,例如:inta10;/*定义的整型数组a含10个元素*/floatb20;/*定义的实型数组b含20个元素*/,说明:,数组名的命名规则同变量名的命名规则一样;数组名后用方括号,不能用();常量表达式必须是大于0的整型常量表达式,不能包含变量,即其大小不依赖运行过程中变量值;(4)定义数组时,数组的长度必须是确定的,C语言不允许对数组的大小作动态定义。,inta(10);,例如:,charname0;floatweight10.3;floatarray-100;,#definesize10floatasize,bsize;inta3*8+2,intn=5;intan,二、一维数组的初始化,1.定义时初始化,方法:将初值依次写在花括号内。,如:inta5=2,4,6,8,10;,存储形式:,存储单元,说明:,如果定义一维数组时给出了全部元素的初值,则数组的下标允许省略。此时编译系统自动根据初始化数据的个数来确定数组的长度。,如:inta=2,4,6,8,10;inta;,初始化的数据个数允许小于数组的长度,但不能大于数组的长度。当初始化的数据个数(至少要有一个)少于数组的长度时,未初始化部分将被编译系统自动用0赋值。,如:inta5=2,4;相当于:a0=2,a1=4,a2=0,a3=0,a4=0inta5=1,2,3,4,5,6,7,8;,2.使用其它方法初始化,利用输入语句初始化main()charas26;inti;for(i=0;i26;i+)scanf(%c,.,利用赋值语句初始化main()charas26,ch;for(ch=A;ch=Z;ch+)asch-A=ch;.,三、一维数组的引用,数组元素类似于单个变量,可以自由地存取和参与各种运算。但是,它与一般变量相比,有以下特殊之处:,数组元素是通过数组名加上该元素在数组中的位置(即数组元素的下标)来访问的。,如:a3,其中,下标可以是整型常量、整型变量或整型表达式。,如:inta10;floati=3;ai=10;,数组元素的下标是从0开始的。如果定义了an,则可使用a0、a1、an-1。但是,不能使用an。C语言编译系统不检查数组下标越界的错误,在编程的时候要注意避免这种错误。,如:inta2;scanf(“%d,%d”,数组元素的赋值是逐个元素进行的,不允许把一个数组作为一个整体赋给另一个数组。除了数组初始化外,也不允许用语句在花括号中列表的方式对数组整体赋值。,例1:inta5=2,4,6,8,10,b5;b5=a5;,例2:inta5;a5=2,4,6,8,10;,数组名a代表的是数组a在内存中的首地址,因此,可以用数组名a来代表数组元素a0的地址。,四、一维数组应用举例,例1:从键盘上输入10个实型数存入数组,然后按输入顺序的逆序输出这10个数。,main()floata10;inti;for(i=0;i=0;i-)printf(“%f”,ai);,例7.2:用数组来处理求斐波纳契数列:1,1,2,3,5,8的前20个数。,main()intf20=1,1;for(i=2;i20;i+)/*f2是数组第3个元素*/fi=fi-2+fi-1;/f2=f0+f1;for(i=0;i20;i+)/f3=f1+f2;printf(“%10d”,fi);if(i%2=1)printf(“n”);/*每行打印2个数*/,数学表示:f(0)=f(1)=1,f(n)=f(n-2)+f(n-1),例7.3:用冒泡法对n=6个数排序(由小到大)。,冒泡法的思路是:将相邻两个数比较,将小的调到前头。,988888895555559444444922222290000009,第一轮排序,比较了5次,获得第一次结果。,轮数剩数比较次数j=1n-1n-j+1n-j165254343432521,main()inta7,i,j,t;printf(Input6numbers:n);for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;for(i=1;i=6;i+)printf(%d,ai);,main()inta6,i,j,t;printf(Input6numbers:n);for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;for(i=0;i=5;i+)printf(%d,ai);,7.2二维数组的定义和引用,先看一个例子:某校近三年招收各专业本科生人数如下:,计算机电子管理数学19999040803020001005090402001954510050,要把这些数据组织起来,可以有两种选择:按从左到右从上到下的顺序存入一个一维数组中。(查询困难)每年用一个一维数组,把这些数据分别存入三个数组中。(增加一年数据困难),一、二维数组的定义,如:inta34;floatb56;,存储形式:,二维数组在内存中是按行的顺序存放的,即先存放第一行的元素,再存放第二行的元素。,说明:,二维数组除了维数比一维数组多一维外,其它性质与一维数组是全部类似的。,看看下面写法是否正确?,inta03;,用于定义数组长度的常量表达式的值必须是大于0的正整数。,inti=3,j=4;intaij;,定义数组元素的个数必须使用常量表达式,而不能使用变量。,二、二维数组的初始化,这里主要介绍定义时初始化,其它方法初始化和一维数组类似。定义时初始化有两种方法:,分行初始化,例如:inta23=1,2,3,4,5,6;inta34=1,2,3,4,5,6,7;123456007000,省略掉内层的花括号即按数组元素在内存中排列的顺序赋初值。,例如:inta23=1,2,3,4,5,6;,说明:,对二维数组初始化时,可以只对部分数组元素初始化,未被初始化的数组元素将自动赋0。,对二维数组初始化时,如果对全部元素都赋初值,或分行赋初值(每行至少一个数据),则可以省略第一维数组长度。但是,第二维数组长度不允许省略。,inta10=1,0;floatf2=1.1,2.2;,三、二维数组的引用,与引用一维数组元素一样,是用下标法引用二维数组元素的。,例如:若有inta2*53*4,i=15;则使用a3*30,a1i-5都是合法的。,说明:(1)数组名a代表的是a在内存中的首地址,因此可以用数组名a来代表数组元素a00的地址。例如:若有inta34,则aij的地址为a+i*4+j;a00的地址与a相同。(2)二维乃至多维数组是若干个比其低一维的数组的集合。换句话说,二维乃至多维数组可以化成多个降低维数后的数组使用。例如:若有inta34,则等价于有了3个一维整型数组a0:a00,a01,a02,a03a1:a10,a11,a12,a13a2:a20,a21,a22,a23,四、二维数组应用举例,例1:使用数组保存“九九乘法表”,然后输出。,main()inta991010,i,j;for(i=1;i10;i+)for(j=1;j=i;j+)a99ij=i*j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(%6d,a99ij);printf(n);,main()inta23=1,2,3,4,5,6;intb32,i,j;printf(arraya:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);,printf(narrayb:n);for(i=0;i3;i+)for(j=0;j2;j+)printf(%6d,bij);printf(n);,例7.5:求3*4数组中的最大值及其下标。,main()intmax,row,colum,i,j;inta4=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;imax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%d,max,row,colum);,7.3字符数组和字符串(CharacterArrayandStrings),一、字符数组(CharacterArray),当数组的元素类型为字符型时,被称为字符数组。,如:charc10;则c为字符数组。,如:main()charch5=c,h,i,n,a;for(i=0;i5;i+)printf(“%c”,chi);,字符数组的定义、初始化和元素的引用与一般的数组相同。,说明:,定义字符数组的类型说明符一般为char,如:charc10;由于字符型与整型的互相通用性,因此,上面定义也可改为:intc10;,初始化赋值的字符个数允许少于字符数组的长度,但不能多于字符数组的长度。当初始化赋值的字符数(至少要有一个)少于字符数组的长度时,未初始化部分将被编译系统自动用空字符0赋值。,如:intc8=H,e,l,l,o;则:c0=H,c1=e,c2=l,c3=l,c4=oc5=0,c6=0,c7=0,二、字符串与字符数组,字符串常量是用双引号括起来的一串字符,由系统自动加上一个字符串结束标志0。它占内存,但不记入字符串长度。,如:“china”占内存6个字节,但字符串长度是5,在C语言中用字符数组来处理字符串,每个数组元素存放一个字符型数据。,字符型数组可用一般数组的初始化方式初始化外,还可以使用字符串常量初始化:,如:charmessage=“Hello”;或charmessage=“Hello”;,(这时,字符数组长度是6,字符串长度是5),注意:用一般初始化方式:charmessage=H,e,l,l,o;,结果:,用字符串常量初始化:charmessage=“Hello”;,说明:字符数组本身并不要求它的最后一个元素一定是0,例如:charch2=A,B;是合法的。为了与用字符串常量对字符数组赋初值的处理方法一致,在字符数组中也常常人为地加上一个值为0的元素。,如:charmessage=H,e,l,l,o,0;,结果:,例7.7输出一个钻石图形main()chardiamond5=,*,*,*,*,*,*,*,*;inti,j;for(i=0;i5;i+)for(j=0;jstr2),n=strcmp(“China”,”Korea”);C=067”Canada”,n0“computer”compare”,n0,3.字符串连接strcat()函数,功能:连接两个字符串,把字符串2连接到字符串1的后面,连接后的字符串放在字符数组1中。,说明:字符数组1必须足够大以便能够容纳字符串2。连接时只在新串最后保留一个0。(3)字符串2可以是字符串常量或字符数组。,4.字符串复制strcpy()函数,功能:将字符串2复制到字符数组1中(其后自动加一个0)。,例如:charstr120,str210;strcpy(str1,“helloworld”);strcpy(str2,str1);,说明:,字符数组1必须足够大以便能够容纳被复制的字符串。不能用赋值语句将一个字符串常量或字符数组直接赋值给一个字符数组。,例如:charstr120,str220;str1=“hello”;str2=str1;,Strcpy使用举例:,#include#includemain()charfilewing20=wing.txt”,filefuse20=fuselage.txt”,filetail20=“tail.txt“;coutnumpart;switch(numpart)case1:strcpy(filedes,filewing);break;case2:strcpy(filedes,filefuse);break;case3:strcpy(filedes,filetail);break;case4:default;ifstreamin(filedes,ios:in);if(!in)coutcannotopenInputfilen;exit(1);,五、字符数组应用举例,例1:(例题7.8)统计字符串中的单词数。,#includemain()charstring81,c;inti,num=0,word=0;gets(string);for(i=0;stringi!=0;i+)if(stringi=)word=0;elseif(word=0)word=1;num+;printf(“nThereare%dwords.”,num);,Iamaboy,si0,word=0(后面出现新单词),si=,word=0,num+word=1(后面是旧单词),Y,Y,N,Y,N,N,Iamaboy,word=0,学习数组这一章要注意的几个问题:1.在C语言中数组的下标是从0开始;2.C语言不进行下标的越界检查,不论是在编译阶段还是在运行阶段,这个问题交给程序员。这样就给初学者带来一定的风险。3.数组名是地址,这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 格列佛游记奇幻与现实交融的写作风格教案
- 阅读童话灰姑娘的感悟读后感5篇
- 《物体的浮力与浮沉条件:初二物理教学教案》
- 教师评价与专业发展相结合的有效途径
- 人工智能深度学习知识梳理
- 精准农业与智能化种植技术的融合路径
- 中华文化与道德修养的联系:初中语文德育教育教案
- 培养跨领域复合型能源人才的路径设计
- 与奶奶的欢乐时光记人作文4篇
- 2025年信用与风险管理职业资格考试题及答案
- (2025)入党积极分子培训考试试题及答案
- 2025年计算机网络技术考试试卷及答案
- 思想道德与法治(湖南师范大学)智慧树知到期末考试答案章节答案2024年湖南师范大学
- 新苏教版牛津英语 英语四年级下册期末试卷
- 生产异常停线管理规范标准
- DB32∕T 4064-2021 江苏省城镇燃气安全检查标准
- 四川省泸州市泸县2021-2022学年八年级下学期期末数学试题(word版只含选择填空题答案)
- 国际汇款查询查复业务培训3
- 高中信息技术会考试题(必修部分)附答案
- 设备保全点检表(TPM推行必看)
- 市质监站工程竣工验收工作流程图
评论
0/150
提交评论