c语言程序设计 第7章_数组.ppt
《c语言程序设计 第7章_数组.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计 第7章_数组.ppt(114页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计教程语言程序设计教程(第(第2版)版)第第7 7章章 数组数组第7章 数组本章主要内容本章主要内容1.1.一维数组的概念一维数组的概念2.2.二维二维(多维多维)数组的概念数组的概念3.3.字符数组的概念字符数组的概念4.4.数组作为函数参数的作用数组作为函数参数的作用5.5.不同类型数组的区别不同类型数组的区别程序设计遇到的问题:程序设计遇到的问题:处理大量具有相同数据类型数据时遇到不方便。处理大量具有相同数据类型数据时遇到不方便。如:计算如:计算Fibonacci数列前数列前4040个元素的值;统计个元素的值;统计5050个商品的个商品的平均价格等等。平均价格等等。问题具有的
2、特性问题具有的特性:数据类型相同。:数据类型相同。现有的解决方案:采用简单变量的方式。现有的解决方案:采用简单变量的方式。现有方案的缺陷:现有方案的缺陷:需要大量不同的标识符作为变量名;需要大量不同的标识符作为变量名;变量在内存中的存放是随机的;变量在内存中的存放是随机的;随着这种变量的增多,组织和管理好这些变量会使程随着这种变量的增多,组织和管理好这些变量会使程序变得复杂。序变得复杂。改进的解决改进的解决方案:使用数组。方案:使用数组。数组具有的特点数组具有的特点:1、数组属于构造数据类型中的一种数组属于构造数据类型中的一种是指具有相同数据类型的有序数据的集合是指具有相同数据类型的有序数据的
3、集合,在这个集合中,所有数据的数在这个集合中,所有数据的数据类型都是相同的;据类型都是相同的;2、数组、数组用唯一的一个数组名来标识。用唯一的一个数组名来标识。数组名代表的是数组在内存中数组名代表的是数组在内存中的首地址。数组的大小(数组元素的个数)必须在定义时确定,在程序的首地址。数组的大小(数组元素的个数)必须在定义时确定,在程序中不可改变;中不可改变;3、每一个数组元素的作用相当于简单变量;同一数组中的数组元素在内、每一个数组元素的作用相当于简单变量;同一数组中的数组元素在内存中占据的内存空间是连续的;存中占据的内存空间是连续的;4、数组中的每一个元素具有相同的名称(就是数组名),每数组
4、中的每一个元素具有相同的名称(就是数组名),每一个元素属同一数据类型一个元素属同一数据类型,它们用数组名和下标来确定。它们用数组名和下标来确定。5 5、数组的下标:是数组元素的位置的一个索引或指示。、数组的下标:是数组元素的位置的一个索引或指示。6 6、数组中的维数、数组中的维数:数组元素下标的个数。数组元素下标的个数。定义了一个数组后,在内存中就会分配一片连续的存储空间,依次存定义了一个数组后,在内存中就会分配一片连续的存储空间,依次存放数组的各个元素。放数组的各个元素。如:如:int a10;它有以下含义:它有以下含义:1.表示定义了一个一维数组。表示定义了一个一维数组。2.数组名为数组名
5、为a。3.数组中的每一个元素的数据类型都是整型。数组中的每一个元素的数据类型都是整型。4.该数组由该数组由10个数组元素组成个数组元素组成,10个元素分别个元素分别为为a0、a1、a2、a3、a4、a5、a6、a7、a8、a9。它们的下标为它们的下标为09。其中的每一个数组元素均可当作整型变量其中的每一个数组元素均可当作整型变量使用(如赋值、参与运算等)。使用(如赋值、参与运算等)。5.数组数组a在内存中占据在内存中占据20个字节的存储空间,个字节的存储空间,10个数组元素依次存放在其中个数组元素依次存放在其中。如:如:如:如:float b23;float b23;它有以下含义:它有以下含义
6、:它有以下含义:它有以下含义:1.1.表示定义了一个表示定义了一个表示定义了一个表示定义了一个 二维数组二维数组二维数组二维数组。2.2.数组名数组名数组名数组名为为为为b b。3.3.数组中的每一个元素的数据类型都是数组中的每一个元素的数据类型都是数组中的每一个元素的数据类型都是数组中的每一个元素的数据类型都是浮点型浮点型浮点型浮点型。4.4.该数组由该数组由该数组由该数组由6 6个数组元素个数组元素个数组元素个数组元素组成组成组成组成,6,6个元素分别为个元素分别为个元素分别为个元素分别为b00b00、b01b01、b02b02、b10b10、b11b11、b12b12。它它它它们的下标们
7、的下标们的下标们的下标 由两个数字组成,第一个下标从由两个数字组成,第一个下标从由两个数字组成,第一个下标从由两个数字组成,第一个下标从0101,第二个下标从第二个下标从第二个下标从第二个下标从0202。其中的每一个数组元素均可。其中的每一个数组元素均可。其中的每一个数组元素均可。其中的每一个数组元素均可当作浮点型变量使用。当作浮点型变量使用。当作浮点型变量使用。当作浮点型变量使用。5.5.数组数组数组数组b b在内存中也是连续存放的,共占据在内存中也是连续存放的,共占据在内存中也是连续存放的,共占据在内存中也是连续存放的,共占据2424个字节个字节个字节个字节的存储空间。的存储空间。的存储空
8、间。的存储空间。例:从键盘输入例:从键盘输入10个数并将其输出。个数并将其输出。分析分析:用简单变量来处理,则要定义:用简单变量来处理,则要定义10个不同的变量来存放个不同的变量来存放输入的数,使用起来很不方便。若是用数组来处理,则只要输入的数,使用起来很不方便。若是用数组来处理,则只要定义一个数组就可。定义一个数组就可。程序清单如下:程序清单如下:main()int i,a10;for(i=0;i10;i+)scanf(“%d”,&ai);for(i=0;i10;i+)printf(“%4d”,ai);if(i%5=0)printf(“n”);7.1.1一维数组的定义一维数组的定义 一维数组
9、的定义格式:一维数组的定义格式:存储类型存储类型数组大小数组大小;如:int a6;说明:说明:数组名为a;数组有6个元素:a0、a1、a2、a3、a4、a5。每个元素都代表着一个整型变量。数组在内存中是按顺序连续存放的,占用的内存大小为每一个元素占用内存的大小的和。使用数组时要注意的几个方面:使用数组时要注意的几个方面:C语言对数组的下标值是否越界不做检测。语言对数组的下标值是否越界不做检测。如有数组如有数组intscore6,数组,数组score的下标值为的下标值为05。若在程序中使用了若在程序中使用了score6或其他下标值,程序仍会运行,或其他下标值,程序仍会运行,但有可能出现意外情况
10、。但有可能出现意外情况。数组不能整体输入或整体输出。数组不能整体输入或整体输出。只能对其数组元素进行输入和输出。只能对其数组元素进行输入和输出。数组名遵循标识符命名规则;数组名遵循标识符命名规则;常量表达式用方括弧括起来;常量表达式用方括弧括起来;常量表达式表示数组元素个数常量表达式表示数组元素个数,即数组长度,数组元素的下标即数组长度,数组元素的下标从从0开始;开始;数组类型为数组中每一个元素类型;数组类型为数组中每一个元素类型;数组名表示内存首地址数组名表示内存首地址,它是一地址常量它是一地址常量例:例:intint a6;a6;a00145a1a2a3a4a523a又例如:又例如:#de
11、fineI4intdataI;(这里的这里的常量表达式为符号常量常量表达式为符号常量)而:而:int i=15;int data i;是不合法的是不合法的(不能用变量定义数组维数不能用变量定义数组维数)还有:还有:int data5;data5=10;(不合法不合法)这里不能使用这里不能使用data5,注意:注意:C语言对数组不作越界检查,使用时要注意语言对数组不作越界检查,使用时要注意例例例例1 1 1 1:阅读程序,通过程序的运行结果,了解一维简单数组:阅读程序,通过程序的运行结果,了解一维简单数组:阅读程序,通过程序的运行结果,了解一维简单数组:阅读程序,通过程序的运行结果,了解一维简单
12、数组的输入和输出。的输入和输出。的输入和输出。的输入和输出。(课本例课本例课本例课本例-1-1-1-1)main()int i,a5;for(i=0;i5;i+)/*输入第一组的输入第一组的5个值个值*/scanf(“%d”,&ai);for(i=0;i5;i+)/*输出输出5个值个值*/printf(“na%d=%dn”,i,ai);for(i=0;i5;i+)/*输入第二组的输入第二组的5个值个值*/scanf(“%d”,&ai);for(i=0;i5;i+)/*输出输出10个值个值*/printf(“na%d=%dn”,i,ai);for(i=0;i10;i+)/*输入第三组的输入第三组
13、的10个值个值*/scanf(“%d”,&ai);for(i=0;i10;i+)/*输出输出10个值个值*/printf(“na%d=%dn”,i,ai);程序运行情况见课本第159页所示。结论:结论:结论:结论:为确保程序的正确性,要求使用的数组元素与定为确保程序的正确性,要求使用的数组元素与定为确保程序的正确性,要求使用的数组元素与定为确保程序的正确性,要求使用的数组元素与定义的大小要相符合。如第义的大小要相符合。如第义的大小要相符合。如第义的大小要相符合。如第1 1组的输入输出情况;组的输入输出情况;组的输入输出情况;组的输入输出情况;对于超出数组大小范围的非数组元素,程序并未对于超出数
14、组大小范围的非数组元素,程序并未对于超出数组大小范围的非数组元素,程序并未对于超出数组大小范围的非数组元素,程序并未检查其合理性,其结果是无法预料的。如第检查其合理性,其结果是无法预料的。如第检查其合理性,其结果是无法预料的。如第检查其合理性,其结果是无法预料的。如第2 2组的组的组的组的输入输出情况;输入输出情况;输入输出情况;输入输出情况;如果对超出数组大小的非数组元数输入合理的值,如果对超出数组大小的非数组元数输入合理的值,如果对超出数组大小的非数组元数输入合理的值,如果对超出数组大小的非数组元数输入合理的值,表面上看输出的结果也是正确的,但实际上系统表面上看输出的结果也是正确的,但实际
15、上系统表面上看输出的结果也是正确的,但实际上系统表面上看输出的结果也是正确的,但实际上系统已经出现了问题,程序会非正常结束。如第已经出现了问题,程序会非正常结束。如第已经出现了问题,程序会非正常结束。如第已经出现了问题,程序会非正常结束。如第3 3组的组的组的组的输入输出情况。输入输出情况。输入输出情况。输入输出情况。特别提示:特别提示:特别提示:特别提示:使用数组的时候,要注意数组元素的合法性。使用数组的时候,要注意数组元素的合法性。使用数组的时候,要注意数组元素的合法性。使用数组的时候,要注意数组元素的合法性。7.1.2一维数组的初始化一维数组的初始化 定义了一数组后,就可以用赋值语句或输
16、入语句给数组元定义了一数组后,就可以用赋值语句或输入语句给数组元素赋值。除此之外,素赋值。除此之外,C语言还允许在定义数组的同时对数组元素语言还允许在定义数组的同时对数组元素赋值,这就是数组的初始化。赋值,这就是数组的初始化。1.初始化:初始化:在定义数组时对数组元素赋初值,数组元素这样获得在定义数组时对数组元素赋初值,数组元素这样获得初值的方法称为数组的初始化。初值的方法称为数组的初始化。数组初始化的格式:数组初始化的格式:static数组名数组名=;或:或:数组名数组名=;例如:例如:inta5=2,4,6,8,10;或:;或:inta=2,4,6,8,10;则数组元素的值:则数组元素的值
17、:a0=2,a1=4,a2=6,a3=8,a4=10。staticintb5=2,4,6,8,10;或:或:staticintb=2,4,6,8,10;则数组元素的值:则数组元素的值:b0=2b1=4b2=6b3=8b4=10存储类行为自动型:存储类行为自动型:auto2 2、数组的初始化的几种常见形式:数组的初始化的几种常见形式:数组的初始化的几种常见形式:数组的初始化的几种常见形式:给全部元素赋初值给全部元素赋初值 如:如:inta5=0,1,2,3,4;在对全部数组元素赋初值时,可以不指定数组长度,即数组在对全部数组元素赋初值时,可以不指定数组长度,即数组长度可以省略。如长度可以省略。如
18、inta=0,1,2,3,4;/*与前面功能一致与前面功能一致*/对部分数组元素赋初值对部分数组元素赋初值,此时数组长度不能省略。,此时数组长度不能省略。如:如:floatb5=1.4,7.2;/*此时此时b0=1.4,b1=7.2,其余元素系其余元素系统自动赋统自动赋0值值*/又如:又如:inta5=1,2;/*此时此时a0=1,a1=2,其余元素系统自动其余元素系统自动赋赋0值值*/又如,又如,又如,又如,char w5=A,B,Cchar w5=A,B,C;/*此时此时w0=A,w1=B,w2=C,w3=w4=。*/对数组全部元素赋初值对数组全部元素赋初值0 如:如:int a5=0;相
19、当于相当于a0=a1=a2=a3=a4=03 3 3 3、初始化数组元素时,要注意以下几情况:初始化数组元素时,要注意以下几情况:初始化数组元素时,要注意以下几情况:初始化数组元素时,要注意以下几情况:只能给数组元素逐个赋初值,不能给数组元素整体赋值。只能给数组元素逐个赋初值,不能给数组元素整体赋值。如要给如要给10个元素全部赋值个元素全部赋值1,只能写成,只能写成 int a10=1,1,1,1,1,1,1,1,1,1;不能写成:不能写成:int a10=1对于自动存储类型的对于自动存储类型的数组若不初始化,其元素值为随机数数组若不初始化,其元素值为随机数;如:如:int a5;在没有给数组
20、元素赋值前,在没有给数组元素赋值前,ai的值是不确定的,这和普通的值是不确定的,这和普通变量是一样的。变量是一样的。对存储类型为对存储类型为static数组若不赋初值,系统会自动赋以数组若不赋初值,系统会自动赋以0值值如,如,static int a5;等价于:等价于:a0=0;a1=0;a2=0;a3=0;a4=0;给数组元素赋初值的个数只能少于或等于数组的大小。给数组元素赋初值的个数只能少于或等于数组的大小。如:如:int a3=6,2,3,5,1;这种用法是错误的这种用法是错误的;1 1、数组同变量一样、数组同变量一样、数组同变量一样、数组同变量一样,必须必须必须必须先定义后引用先定义后
21、引用先定义后引用先定义后引用。数组元素的作用等同于。数组元素的作用等同于。数组元素的作用等同于。数组元素的作用等同于简单变量。简单变量。简单变量。简单变量。2 2、引用数组元素的格式是:、引用数组元素的格式是:、引用数组元素的格式是:、引用数组元素的格式是:数组名数组名 下标下标 3 3、只能逐个引用数组元素,、只能逐个引用数组元素,、只能逐个引用数组元素,、只能逐个引用数组元素,不能一次引用整个数组。不能一次引用整个数组。不能一次引用整个数组。不能一次引用整个数组。可以是整型常量可以是整型常量或整型常量表达式或整型常量表达式其最小值默认为其最小值默认为0.如有定义如有定义 int a10;则
22、可引用的数组元素为则可引用的数组元素为a0到到a9,引用的方法有引用的方法有:a5=6;a7=a5+;a6=3;a0=a5+a7-a2*3;7.2 一维数组的使用例:例:inta10;for(i=0;i10;i+)scanf(“%d”,&ai);printf(“%d”,a);(输出的是数组输出的是数组a的首地址的首地址)可以用:可以用:for(j=0;j10;j+)printf(“%dn”,aj);()又如:又如:又如:又如:intintintint a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;
23、a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;char w4=char w4=char w4=char w4=a,b,c,d,a,b,c,d,;则下面的语句是合法的:则下面的语句是合法的:则下面的语句是合法的:则下面的语句是合法的:a3=28;a3=28;b4=a2+a3;b4=a2+a3;w3=d;w3=d;c2=c4%2;c2=c4%2;printf(%dprintf(%d,a0);,a0);数组元素引用的说明数组元素引用的说明下标可以是整数或整型表达式。下标可以是整数或整型表达式。如若如若i
24、,j均为整型变量,则下面的数组使用是合法的。均为整型变量,则下面的数组使用是合法的。vari+j=2;str1+2=e;下标的值不应超过数组的大小,如数组下标的值不应超过数组的大小,如数组a的大小为的大小为5,则下标的取值在则下标的取值在04的范围内。的范围内。再次提醒:再次提醒:C编译不检查下标是否“出界”。对于数组:对于数组:intvar5,如果使用,如果使用var5,系统不报错,会把系统不报错,会把var4下面一个单元中的下面一个单元中的内容作为内容作为var5引用,如图所示。引用,如图所示。例:输入例:输入1010个整数,分别按顺序和逆序输出。个整数,分别按顺序和逆序输出。#inclu
25、devoidmain()inti,a10;printf(input10numbers:n);for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=0;i=0;i-)printf(%d,ai);程序的运行情况:程序的运行情况:input 10 numbers:1 2 3 4 5 6 7 5 9 101 2 3 4 5 6 7 5 9 1010957654321常用此方法给数组元素赋值常用此方法给数组元素赋值常用此方法输出数组元素常用此方法输出数组元素例:从键盘输入例:从键盘输入例:从键盘输入例:从键盘输入4 4个学生某一课程的成绩,并输出。个学生某一课程的成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言程序设计 第7章_数组 语言程序设计 数组
限制150内