收藏 分享(赏)

《C语言程序设计》课件第五章11.ppt

上传人:bubibi 文档编号:16071808 上传时间:2023-09-14 格式:PPT 页数:81 大小:421.50KB
下载 相关 举报
《C语言程序设计》课件第五章11.ppt_第1页
第1页 / 共81页
《C语言程序设计》课件第五章11.ppt_第2页
第2页 / 共81页
《C语言程序设计》课件第五章11.ppt_第3页
第3页 / 共81页
《C语言程序设计》课件第五章11.ppt_第4页
第4页 / 共81页
《C语言程序设计》课件第五章11.ppt_第5页
第5页 / 共81页
亲,该文档总共81页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、C语言程序语言程序电子教案电子教案算法语言程序设计算法语言程序设计第五章第五章 数数 组组主要内容主要内容数组的基本概念数组的基本概念数组的定义和引用数组的定义和引用数组的基本操作数组的基本操作字符型数组字符型数组5.1 数组的基本概念数组的基本概念【例例5.15.1】设有两组数据设有两组数据(每组每组100100个个)已存入变量已存入变量a0,a1,a0,a1,a2,a2,a99,a99和和b0,b1,b2b0,b1,b2,b99,b99中。分别对应中。分别对应 求和。其结果存入求和。其结果存入c0,c1,c2,c0,c1,c2,,c99c99中。中。若用简单变量,则写成若用简单变量,则写成

2、:c0=a0+b0;c0=a0+b0;c1=a1+b1;c1=a1+b1;c2=a2+b2;c2=a2+b2;c99=a99+b99;c99=a99+b99;说明说明:程序需要程序需要100100条赋值语句和定义条赋值语句和定义300300个变量。这样,个变量。这样,显得冗长、烦琐。若将每组数据作为一整体,用同一显得冗长、烦琐。若将每组数据作为一整体,用同一个符号名表示,同组内不同的数据依靠下标来区别,个符号名表示,同组内不同的数据依靠下标来区别,则只需一条语句,即:则只需一条语句,即:for(i=1;i100;i+)ci=ai+bi;for(i=1;i100;i+)ci=ai+bi;称称ai

3、ai、bibi、cici为数组元素,为数组元素,i i为下标。为下标。aiai是数组是数组a a中的第中的第i i个元素;个元素;bi bi 是数组是数组b b中的第中的第i i个元素;个元素;cici是数组是数组c c中的第中的第i i个元素。个元素。a a、b b和和c c分别是数组的符分别是数组的符号名,称为数组名。号名,称为数组名。数组的四大要素:数组的四大要素:(1)(1)数组的名字。数组的名字。(2)(2)数组的类型。它表明了数组的基类型。数组的类型。它表明了数组的基类型。(3)(3)数组的结构。它指出数组的维数和数组元数组的结构。它指出数组的维数和数组元 素的个数。素的个数。(4

4、)(4)数组的存储类别。它关系到数组所占存储数组的存储类别。它关系到数组所占存储 位置的作用域和生存期。位置的作用域和生存期。通常,数组的四大要素由定义数组的说明语句通常,数组的四大要素由定义数组的说明语句来确定。来确定。例如例如:int array10;char b23;:int array10;char b23;static int a23;static int a23;5.2一维数组的定义和引用一维数组的定义和引用5.2.1 5.2.1 一维数组的定义一维数组的定义 程序中使用数组时,应遵循先定义,后引用的程序中使用数组时,应遵循先定义,后引用的原则。原则。我们将具有一个下标的数组称为一

5、维数组。定我们将具有一个下标的数组称为一维数组。定义一维数组的一般形式为:义一维数组的一般形式为:存储类型存储类型 类型说明符类型说明符 数组标识符数组标识符 常量表达式常量表达式;例如:例如:int array10,number20;int array10,number20;static char ch15 static char ch15;其中其中:存储类型存储类型:可以是自动型可以是自动型(auto)(auto),也可以是静态型,也可以是静态型 (static)(static)或者是外部型或者是外部型(extern)(extern);类型说明符类型说明符:用来说明数组的基类型,它可以是简

6、单用来说明数组的基类型,它可以是简单 类型、指针类型或结构、联类型、指针类型或结构、联 合等构造类合等构造类 型,它说明了该数组元素所具有的类型;型,它说明了该数组元素所具有的类型;数组标识符数组标识符:用来说明数组的名字;用来说明数组的名字;常量表达式常量表达式:用来说明数组元素的个数,即数组的长用来说明数组元素的个数,即数组的长 度,它可以是整常量、字符常量或度,它可以是整常量、字符常量或sizeof sizeof 表达式。表达式。说明:说明:(1)(1)数组标识符命令规则与变量相同,遵循标识符命名数组标识符命令规则与变量相同,遵循标识符命名 规则。规则。(2)(2)相同类型的数组可以放在

7、同一说明行中,数组之间相同类型的数组可以放在同一说明行中,数组之间 用逗号分隔。用逗号分隔。(3)(3)数组名后是用方括号括起来的常量表达式,不能用数组名后是用方括号括起来的常量表达式,不能用 圆括号,下面是错误的写法:圆括号,下面是错误的写法:float ary(20);float ary(20);(4)(4)常量表达式是数组所含元素的个数。编译系统在处常量表达式是数组所含元素的个数。编译系统在处 理说明语句时,为数组在内存中分配一片连续的存理说明语句时,为数组在内存中分配一片连续的存 储空间,数组元素将按其下标的顺序依次存放。储空间,数组元素将按其下标的顺序依次存放。(5)(5)数组名表示

8、数组存储区别的首地址,即数组第一个数组名表示数组存储区别的首地址,即数组第一个 元素存放的地址。元素存放的地址。说明说明(续续):):(6)(6)数组元素的下标值由数组元素的下标值由0 0开始,名为开始,名为arrayarray的数组,由的数组,由 2020个元素组成,依照下标值的顺序,它们是:个元素组成,依照下标值的顺序,它们是:array0,array1,array2,array0,array1,array2,array19,array19 注意:不存在数组元素注意:不存在数组元素array20array20。(7)C(7)C语言中不允许出现动态数组说明,即数组的长度不语言中不允许出现动态

9、数组说明,即数组的长度不 能依赖运行过程中变化着的变量。能依赖运行过程中变化着的变量。例如例如:下面数组下面数组arrayiarrayi的长度依赖于变量的长度依赖于变量i i的输入结的输入结 果,这是不允许的。果,这是不允许的。int i;scanf(int i;scanf(%d%d,&i);,&i);char arrayi;char arrayi;说明说明(续续):):(8)(8)当常量表达式缺少时,数组的长度由以下两当常量表达式缺少时,数组的长度由以下两 个因素决定:个因素决定:a.a.给出该数组每一元素的初值,从而确定该给出该数组每一元素的初值,从而确定该 数组长度。例如:数组长度。例如

10、:static int a5=2,4,6,8,10;static int a5=2,4,6,8,10;与与 static int a=2,4,6,8,10;static int a=2,4,6,8,10;的的描描述述等等价价。这这表表明明,当当数数组组长长度度由由显显式式表表示示的的初初值值个个数数直直接接决决定定时时,数数组组长长度度不不必必再以显式给出。再以显式给出。b.b.已在其它场合说明了数组长度。已在其它场合说明了数组长度。如该数组是函数定义的形式参数,或该数组如该数组是函数定义的形式参数,或该数组是一个在函数外已经定义了的外部数组,则不是一个在函数外已经定义了的外部数组,则不再作长

11、度说明。再作长度说明。例如例如:int a10;int a10;main()main()int s10;int s10;char t10;char t10;.fun(a,s,t)fun(a,s,t)int a ,s;int a ,s;char t;char t;.小结:数组与前面介绍的各种基本数据类型变数组与前面介绍的各种基本数据类型变量不同。量不同。数组具有存储类型、类型说明符、数组数组具有存储类型、类型说明符、数组标识符和常量表达式四方面的信息,且以标识符和常量表达式四方面的信息,且以它们来综合描述。它们来综合描述。数组是一种在基本数据类型基础上构造数组是一种在基本数据类型基础上构造出的复

12、杂数据类型。出的复杂数据类型。5.2.2 5.2.2 一维数组的初始化一维数组的初始化使数组元素得到值,可以有三种基本途径使数组元素得到值,可以有三种基本途径:(1)(1)用赋值语句;用赋值语句;(2)(2)用输入语句;用输入语句;(3)(3)初始化。初始化。前两种方式占运行时间,而初始化数组,可以使程序在运前两种方式占运行时间,而初始化数组,可以使程序在运行之前的编译阶段得到初值行之前的编译阶段得到初值 。数组的初始化数组的初始化:在定义数组时为数组元素赋初值。在定义数组时为数组元素赋初值。C C语言规定语言规定:只有静态存储只有静态存储(static)(static)数组和外部存储数组和外

13、部存储(extern)(extern)数组才可数组才可以进行初始化。以进行初始化。一维数组初始化的定义形式为:一维数组初始化的定义形式为:存储类型存储类型 类型说明符类型说明符 数组标识符数组标识符 常量表达式常量表达式=常量常量表达式表达式;说明:说明:“=常量表达式表常量表达式表”为赋初值部分;为赋初值部分;中各常量表达式是对应的数组元素初始,中各常量表达式是对应的数组元素初始,它们相互之间用逗号分隔。它们相互之间用逗号分隔。例如:例如:static int a4=0,1,2,3;static int a4=0,1,2,3;它等价于它等价于 static int a4;static int

14、 a4;a0=0;a1=1;a2=2;a3=3;a0=0;a1=1;a2=2;a3=3;注:由于数组长度可由初值个数确定,故可以写成注:由于数组长度可由初值个数确定,故可以写成 static int a=0,1,2,3;static int a=0,1,2,3;数组初始化还具有以下几个特点:数组初始化还具有以下几个特点:(1)(1)当数组指明的元素个数大于初值个数时,则当数组指明的元素个数大于初值个数时,则 表明初值只赋给数组开始的若干元素,余下表明初值只赋给数组开始的若干元素,余下 部分为相应类型的缺省值,部分为相应类型的缺省值,intint为整型数为整型数0 0,字符型为空格。字符型为空格

15、。例如:例如:static int a5=0,1,2,3;static int a5=0,1,2,3;表示表示 a0=0,a1=1,a2=2,a3=3,a4=0a0=0,a1=1,a2=2,a3=3,a4=0(2)(2)不允许数组指明的元素个数小于初值个数,不允许数组指明的元素个数小于初值个数,否则作语法出错处理。例如:否则作语法出错处理。例如:static int a6=0,1,2,3,4,5,6,7;static int a6=0,1,2,3,4,5,6,7;是错误的。是错误的。特点:(续)特点:(续)(3)(3)不允许对数组元素整体赋值,只能对每个数组元素不允许对数组元素整体赋值,只能对

16、每个数组元素 赋赋初初值值。要要使使数数组组a a中中的的全全部部元元素素初初值值为为0 0,则则可可以以写写成:成:static int a4=0,0,0,0;static int a4=0,0,0,0;而不能写成:而不能写成:static int a4=0*10static int a4=0*10;其实,按上述其实,按上述(1)(1)的规定,对的规定,对staticstatic数组不赋初值,数组不赋初值,系统会自动对全部数组元素赋以系统会自动对全部数组元素赋以0 0值。值。即:即:static int a4static int a4;相当于相当于a0a0a3a3全部都赋以初值全部都赋以初值

17、0 0。特点:(续)特点:(续)(4)(4)在对数组元素全部赋初值时,可以不指在对数组元素全部赋初值时,可以不指 定数组长度,其长度由所赋初值的个数定数组长度,其长度由所赋初值的个数 自动确定自动确定 。如:。如:static int a=1,2,3,4static int a=1,2,3,4;a a数组的初值有数组的初值有4 4个,故系统自动确定个,故系统自动确定a a的长度为的长度为4 4。5.2.3 5.2.3 一维数组元素的引用一维数组元素的引用 数组一经定义,其元素就可以被引用了。数组一经定义,其元素就可以被引用了。C C语言规定:语言规定:对数组的使用只有逐个引用数组元对数组的使用

18、只有逐个引用数组元 素,而不能将数组做为整体引用。素,而不能将数组做为整体引用。通常,可以利用数组下标的变化,来实现数组元通常,可以利用数组下标的变化,来实现数组元素的素的“弹出弹出”。换句话说,可以用不同的方法,。换句话说,可以用不同的方法,引起下标的变化,从而使用数组元素一一地呈现出引起下标的变化,从而使用数组元素一一地呈现出来,以达到对数组元素引用的目的。来,以达到对数组元素引用的目的。一维数组元素的一般形式为:一维数组元素的一般形式为:数组名数组名 下标下标 其其中中,下下标标可可以以是是整整常常数数或或整整型型表表达达式式。C C语言规定语言规定:下标是从:下标是从0 0开始的。开始

19、的。若数组定义为:若数组定义为:int a10int a10;其其下下标标值值分分别别为为:0 0、1 1、2 2、8 8、9 9。其其对对应应的的数数组组元元素素分分别别为为:a1a1、a2a2、,a8a8、a9a9。不能存在数组元素。不能存在数组元素a10a10。【例例5.25.2】说明数组元素和下标的用法说明数组元素和下标的用法#include#include“stdio.hstdio.h”void main()void main()int a10,i;int a10,i;for(i=0;i10;i+)for(i=0;i10;i+)ai=i;ai=i;for(i=0;i10;i+)for

20、(i=0;i10;i+)printf(printf(%d%d,ai);,ai);程序运行结果如下:程序运行结果如下:0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 程序使程序使a0a0a9a9的的值分别为值分别为0 09 9,然后按,然后按下标的顺序依次输出各下标的顺序依次输出各元素中的值。元素中的值。【例例5.35.3】设设X X,Y Y是是m m维向量:维向量:X=x1,x2,X=x1,x2,xm,xm,Y=y1,y2,Y=y1,y2,ym,ym,试编写一程序,用以计算:向量和试编写一程序,用以计算:向量和A=X+Y,A=X+Y,向量差向量差B=X-Y,B=X

21、-Y,向量与标量积之和向量与标量积之和 C=rX+sY,C=rX+sY,其其中中r=1.2,s=2.4r=1.2,s=2.4。#include#includestdiohstdioh#define M,10#define M,10void main()void main()float aM,bM,cM;float aM,bM,cM;float xM,yM;float xM,yM;float r=1.2,s=2.4;float r=1.2,s=2.4;int i;int i;for(i=0;iM;i+)for(i=0;iM;i+)scanf(%f,%f,&xi,&yi);scanf(%f,%f,

22、&xi,&yi);for(i=0;iM,i+)for(i=0;iM,i+)ai=xi+yi;ai=xi+yi;bi=xi-yi;bi=xi-yi;ci=r*xi+s*yi;ci=r*xi+s*yi;for(i=0;iM;i+)for(i=0;i a01=a02=:a00=a01=a02=a10=a11=a12 a10=a11=a12 又例如:又例如:int b234;int b234;可理解:可理解:b b为三维数组,有为三维数组,有2 23 34 4个元素;个元素;b0,b1b0,b1为二维数组,其各有为二维数组,其各有3 34 4个元素;个元素;b00,b01,b02,b10,b11,b0

23、0,b01,b02,b10,b11,b12 b12为一维数组,它们各有为一维数组,它们各有4 4个元素。个元素。因此,对于已定义的三维数组因此,对于已定义的三维数组b b,可有以下四种写法:,可有以下四种写法:b b 书写形式书写形式 bi /*bi /*数组类型数组类型*/bij bij bijk /*bijk /*数组元素数组元素*/其中前三种形式为数组类型,只有第其中前三种形式为数组类型,只有第种形式是数组种形式是数组元素,可以作为运算对象进行处理。元素,可以作为运算对象进行处理。C C语言的这种表示法语言的这种表示法给多维数组赋值和用指针表示带来很大方便。给多维数组赋值和用指针表示带来

24、很大方便。5.3.2 5.3.2 多维数组的存储顺序多维数组的存储顺序 C C语语言言中中,数数组组在在内内存存中中存存储储时时,是是按按照照其其元元素素下下标标的的顺顺序序依依次次存存储储在在内内存存的的连连续续递递增增的的空空间间中中,即即从从第第一一个个元元素素直直至至最最后后一一个个元元素素连连续续存存储储。多多维维数数组组的的存存储储顺顺序序是是以以最最右右边边下下标标最先变化为规律最先变化为规律(即即按行存储按行存储)。对对于于二二维维数数组组,其其存存储储顺顺序序是是:先先存存储储第第一一行行中中的的元元素素,再再存存储储第第二二行行中中的的元元素素,以以此此类类推推 ,直至存储

25、最后一行中的元素。,直至存储最后一行中的元素。二维数组二维数组a33a33的元素的元素:a00 a01 a02 a00 a01 a02 a10 a11 a12 a10 a11 a12 a20 a21 a22a20 a21 a22 a00a01a02a10a11a12a20a21a225.3.3 5.3.3 多维数组的初始化多维数组的初始化 同样可以在定义时对多维数组各元素指同样可以在定义时对多维数组各元素指定初始值。定初始值。基本原则:基本原则:对多维数组的各元素赋初值时的数据排对多维数组的各元素赋初值时的数据排列顺序必须与数组各元素在内存中的存储列顺序必须与数组各元素在内存中的存储完全一致。

26、完全一致。多维数组的初始化方法多维数组的初始化方法 1.1.按行对全部数组元素赋初值按行对全部数组元素赋初值 如:如:static int a34=1,2,3,4,static int a34=1,2,3,4,5,6,7,8,9,10,11,12;5,6,7,8,9,10,11,12;把第一对花括号内的数据赋给第一行各元把第一对花括号内的数据赋给第一行各元素,第二对花括号内的数据赋给第二行各元素,第二对花括号内的数据赋给第二行各元素,第三对花括号内的数据赋给第三行各元素。素,第三对花括号内的数据赋给第三行各元素。这种按行赋初值的方法比较直观,是较常使用这种按行赋初值的方法比较直观,是较常使用的

27、方法。的方法。2.2.按数组元素的存储顺序依次对全部数组元素按数组元素的存储顺序依次对全部数组元素 赋初值。赋初值。如:如:static int static int a34=1,2,3,4,5,6,7,8,9,10,11,12;a34=1,2,3,4,5,6,7,8,9,10,11,12;由于多维数组的各元素是按行存储的,故这种赋初值方由于多维数组的各元素是按行存储的,故这种赋初值方法与上述按行赋初值方法效果一样。法与上述按行赋初值方法效果一样。赋初值后数组各赋初值后数组各元素为:元素为:1 2 3 4 1 2 3 4 5 6 7 8 5 6 7 8 9 10 11 12 9 10 11 1

28、2 与第与第2 2种方法相比,第种方法相比,第1 1种方法好,一行对一行,界限清种方法好,一行对一行,界限清楚。用第楚。用第2 2种方法,如果数据多写成一大片时,容易遗种方法,如果数据多写成一大片时,容易遗漏,也不易检查。漏,也不易检查。3.3.对部分数组元素赋值初值对部分数组元素赋值初值 如:如:static int a34=1,5,9;static int a34=1,5,9;赋初值后数组各元素为:赋初值后数组各元素为:1 0 0 0 1 0 0 0 5 0 0 0 5 0 0 0 9 0 0 0 9 0 0 0 相当于只对各行第相当于只对各行第1 1列元素赋值,其余元素自动为列元素赋值,

29、其余元素自动为0 0。也可以对指定行中的制定元素赋初值,如:也可以对指定行中的制定元素赋初值,如:static int a34=1,0,6,0,0,11;static int a34=1,0,6,0,0,11;赋初值后数组各元素为:赋初值后数组各元素为:1 0 0 0 1 0 0 0 0 6 0 0 0 6 0 0 0 0 11 0 0 0 11 0注意:注意:若对全部数组元素都赋初值,则第一维长度若对全部数组元素都赋初值,则第一维长度可省略不写,但第二维长度不能省。如:可省略不写,但第二维长度不能省。如:static int a 4=1,2,3,4,5,6,7,8,9,10,11,12;st

30、atic int a 4=1,2,3,4,5,6,7,8,9,10,11,12;与下面的定义等价:与下面的定义等价:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;static int a34=1,2,3,4,5,6,7,8,9,10,11,12;系统会根据数据总个数自动分配存储空间,系统会根据数据总个数自动分配存储空间,一共一共1212个数据,每行个数据,每行4 4列,则确定为列,则确定为3 3行。行。5.3.4 5.3.4 关于初始化的其它说明关于初始化的其它说明(1)(1)对简单变量在任何场合对简单变量在任何场合(函数内部或外部,静态或非静态函数内部或

31、外部,静态或非静态)均可均可置初初;而数组初始化的条件是:对外部数组置初初;而数组初始化的条件是:对外部数组(函数外说明的函数外说明的数组数组)或静态数组或静态数组(静态的概念见下章静态的概念见下章)可置初值;反之,对函可置初值;反之,对函数内的非静态数组不能置初值。数内的非静态数组不能置初值。(2)(2)外部和静态数组与简单变量一样在编译时得到初值,不占用运外部和静态数组与简单变量一样在编译时得到初值,不占用运行时间;非静态局部变量行时间;非静态局部变量 (函数或复合语句内说明的变量函数或复合语句内说明的变量)在在进入函数或复合语句时得到初值,占用运行时间,多次进入进入函数或复合语句时得到初

32、值,占用运行时间,多次进入多次重新赋初值。多次重新赋初值。(3)(3)外部或静态数组以及简单变量未进行初始化时,等价于置零外部或静态数组以及简单变量未进行初始化时,等价于置零(数值类型数值类型)或空格符或空格符(字符字符 型型)。局部变量未进行初始化时,。局部变量未进行初始化时,是不定值。其值的确定依赖于调用函数或进入复合语句的环是不定值。其值的确定依赖于调用函数或进入复合语句的环境。境。5.3.5 5.3.5 多维数组的引用多维数组的引用 多维数组与一维数组一样必须多维数组与一维数组一样必须“先定先定义,后引用义,后引用”。多维数组元素的一般形式为:多维数组元素的一般形式为:数组名数组名 下

33、标下标下标下标 其中,下标可以是整常数或整型表达式。其中,下标可以是整常数或整型表达式。【例例5.45.4】将二维数组将二维数组a23a23中的元素按其存中的元素按其存 储顺序复制到一维数组储顺序复制到一维数组b6b6中。中。#include#include“stdio.hstdio.h”void main()void main()static int static int a23=1,2,3,4,5,6;a23=1,2,3,4,5,6;int b6,i,j;int b6,i,j;for(i=0;i2;i+)for(i=0;i2;i+)for(j=0;j3;j+)for(j=0;j3;j+)b

34、i*3+j=aij;bi*3+j=aij;for(i=0;i6;i+)for(i=0;i6;i+)printf(%d,bi);printf(%d,bi);程序运行结果如下:程序运行结果如下:1 2 3 4 5 6 1 2 3 4 5 6 二维数组二维数组a23a23向一维数组向一维数组b6b6按存储顺序复制元按存储顺序复制元素值时,其下标的对应关系为素值时,其下标的对应关系为:k=i*D+j k=i*D+j 其中,其中,D D为为a23a23中第二维的长度,其值为中第二维的长度,其值为3 3,故程,故程序中序中b b的下标为的下标为i*3+ji*3+j。推广到一般,多维数组按存储顺序转换成一维

35、数组推广到一般,多维数组按存储顺序转换成一维数组时,其下标的对应关系由下式给出:时,其下标的对应关系由下式给出:k=k=第一维下标值第一维下标值D2D2D3D3Dk+Dk+第二维下标值第二维下标值D3D3D4D4Dk+Dk+第三维下标值第三维下标值D4D4D5D5Dk Dk +第第k-1k-1维下标值维下标值Dk+Dk+第第k k维下标值维下标值 其中,其中,Di(i=2,Di(i=2,,k)k)是多维数组第是多维数组第i i维的长度。维的长度。例如,有数组定义为例如,有数组定义为 num4567 num4567 其转换成一维数组时,按存储顺序有:其转换成一维数组时,按存储顺序有:k=i*5*

36、6*7+j*6*7+l*7+m k=i*5*6*7+j*6*7+l*7+m i i 是第一维下标值是第一维下标值 j j 是第二维下标值是第二维下标值 l l 是第三维下标值是第三维下标值 m m 是第四维下标值是第四维下标值 事实上,这里的事实上,这里的k k就是多维数组元素在内存中存储位就是多维数组元素在内存中存储位置的序号。置的序号。【例例5.55.5】统计数组统计数组a44a44中元素值为中元素值为x(x=5)x(x=5)的元素的个数。的元素的个数。#include#include“stdio.hstdio.h”void main()void main()static int a4=5

37、,2,1,6,2,5,7,4,8,10,5,6,5,2,4,5;static int a4=5,2,1,6,2,5,7,4,8,10,5,6,5,2,4,5;int i,j,k,x;int i,j,k,x;x=5;x=5;k=0;k=0;for(i=0,i4;i+)for(i=0,i4;i+)for(j=0,j4;j+)for(j=0,j4;j+)if(aij=x)k=k+1;if(aij=x)k=k+1;printf(%d,k);printf(%d,k);程序中使用了整型变量k作为计数器,每当找到一个与x值相等的元素时,计数器k就加1。当所有元素找完时,k中就是元素值为5的元素个数。使用计数

38、器之前,应清零(赋初值为0)。【例例5.65.6】查找数组查找数组a222a222中的最小元素值。中的最小元素值。#include#include“stdio.hstdio.h”void main()void main()static int a222=1,2,3,4,5,6,7,0;static int a222=1,2,3,4,5,6,7,0;int i,j,k,small;int i,j,k,small;small=a000;small=a000;for(i=0;i2;i+)for(i=0;i2;i+)for(j=0;j2;j+)for(j=0;j2;j+)for(k=0;k2;k+)f

39、or(k=0;k2;k+)if(aijksmall)small=aijk;if(aijksmall)small=aijk;printf(%d,small);printf(%d,small);5.4 5.4 数组的基本操作数组的基本操作 数组在数组在C C语言程序设计中有着广泛地应用。语言程序设计中有着广泛地应用。而且有的应用包含了较为复杂的数组操作。而且有的应用包含了较为复杂的数组操作。但无论其操作多么复杂,它们都是由一些但无论其操作多么复杂,它们都是由一些基本的操作组合起来的。基本的操作组合起来的。5.4.1 5.4.1 一维数组的典型操作一维数组的典型操作一、排序一、排序(sorting)

40、(sorting)排序排序:是把一组数据按其值的递增是把一组数据按其值的递增(升序升序)或递减或递减(降序降序)的次序排列起来,使一个无序组成为一个有序组。的次序排列起来,使一个无序组成为一个有序组。对于数组的排序,则是把数组元素按其值递增或递减对于数组的排序,则是把数组元素按其值递增或递减的次序排列的次序排列 。排序是数据处理中常见的操作。排序有。排序是数据处理中常见的操作。排序有许多方法,这里不讨论各种排序方法的优劣,只介绍排许多方法,这里不讨论各种排序方法的优劣,只介绍排序中如何对数组元素进行操作。选择排序是诸多排序算序中如何对数组元素进行操作。选择排序是诸多排序算法的一种。法的一种。基

41、本做法:多次重复地找出数组中最小值基本做法:多次重复地找出数组中最小值(或最大值或最大值),并依据被找到的先后次序将数组元素排列起来。下面,并依据被找到的先后次序将数组元素排列起来。下面只讨论升序选择排序。只讨论升序选择排序。升序选择排序方法:升序选择排序方法:设整形数组设整形数组a a中有中有n n个元素,第一次选择是从个元素,第一次选择是从n n个元个元素中选择素中选择(找出找出)值最小的元素,将其与数组中的第一值最小的元素,将其与数组中的第一个元素交换,于是,第一个元素就成为值最小的元素。个元素交换,于是,第一个元素就成为值最小的元素。第二次选择是从数组中第二个元素起的第二次选择是从数组

42、中第二个元素起的(n-1)(n-1)个元素个元素中选择值最小的元素,将该元素与数组的第二个元素中选择值最小的元素,将该元素与数组的第二个元素进行交换,于是,第二个元素也排好序。如此进行第进行交换,于是,第二个元素也排好序。如此进行第三次、第四次,第五次三次、第四次,第五次.。每选择一次,就排好一。每选择一次,就排好一个元素的次序,所余下来排序的元素就减少一个。选个元素的次序,所余下来排序的元素就减少一个。选择择(N-1)(N-1)次后,只余下一个元素次后,只余下一个元素(数组中最大的元素)数组中最大的元素),排序就完成了。,排序就完成了。例如:例如:有一数组有一数组a7a7其元素值及其初始次序

43、为:其元素值及其初始次序为:4 4、5 5、9 9、1212、1717、3 3、1 1 根据上述选择排序方法,每次选择后各元素的次序可表根据上述选择排序方法,每次选择后各元素的次序可表述如下:述如下:数组初始状态:数组初始状态:44,5 5,9 9,1212,1717,3 3,1 1 第一次选择后:第一次选择后:1 1,55,9 9,1212,1717,3 3,4 4 第二次选择后:第二次选择后:1 1,3 3,99,1212,1717,5 5,4 4 第三次选择后:第三次选择后:1 1,3 3,4 4,1212,1717,5 5,9 9 第四次选择后:第四次选择后:1 1,3 3,4 4,5

44、 5,1717,1212,9 9 第五次选择后:第五次选择后:1 1,3 3,4 4,5 5,9 9,1212,17 17 第六次选择后:第六次选择后:1 1,3 3,4 4,5 5,9 9,1212,17 17 至此该数组排序完毕。至此该数组排序完毕。小结小结:归纳起来,选择排序的基本方法归纳起来,选择排序的基本方法是先选出最小值元素和第一个元素交是先选出最小值元素和第一个元素交换位置,然后,再对剩下的换位置,然后,再对剩下的n-1n-1个元素个元素重复这样的选择和交换,这样不断重重复这样的选择和交换,这样不断重复至所有的元素都被排序为止。复至所有的元素都被排序为止。程序程序:#includ

45、e#include“stdio.hstdio.h”void main()void main()int a10,i,j,;int a10,i,j,;int temp,min;int temp,min;printf(Enter 10 numbers:printf(Enter 10 numbers:n);n);for(i=0;i10;i+)for(i=0;i10;i+)scanf(%d,&ai);scanf(%d,&ai);for(i=0;i9;i+)for(i=0;i9;i+)k=i+1;k=i+1;min=i;min=i;for(j=k;j10,j+)for(j=k;j10,j+)if(ajam

46、in)min=j;if(ajamin)min=j;temp=ai;temp=ai;ai=amin;ai=amin;amin=temp;amin=temp;for(i=0;i10;i+)for(i=0;i10;i+)printf(%d,ai);printf(%d,ai);输入输入:-10 9 1 0-24 220 88 12 95 4-10 9 1 0-24 220 88 12 95 4 程序运行结果程序运行结果:程序运行结果如下:程序运行结果如下:Enter 10 numbers:Enter 10 numbers:-10 9 1 0-24 220 88 12 95 4-10 9 1 0-24

47、220 88 12 95 4 The sorted numbers:The sorted numbers:-24,-10,0,1,4,9,12,88,95,220-24,-10,0,1,4,9,12,88,95,220二、查找二、查找(search)(search)查找也是数据处理中常见的操作。对于数组的查找,查找也是数据处理中常见的操作。对于数组的查找,则是按给定值在数组中寻找与给定值相同的数组元素。则是按给定值在数组中寻找与给定值相同的数组元素。查找:指在一数组数据中寻找某一特定数据的过程。查找:指在一数组数据中寻找某一特定数据的过程。查找的方法很多,选择使用何种方法除了人为因素查找的方法

48、很多,选择使用何种方法除了人为因素外,有时还取决于具体数组的特征。外,有时还取决于具体数组的特征。未排序的数组:未排序的数组:采用顺序查找法而不能用折半查找法;采用顺序查找法而不能用折半查找法;已排序的数组已排序的数组 既可采用顺序查找法,也可以用折半查找法。既可采用顺序查找法,也可以用折半查找法。1.1.顺序查找法顺序查找法 顺顺序序查查找找法法是是最最简简单单的的查查找找方方法法。若若有有一一数数组组为为anan,给给定定数数组组元元素素的的查查找找值值为为x x,查查找找时时,先先从从数数组组的的第第一一个个元元素素a0a0查查起起,接接着着查查第第二二个个元元素素a1a1,第第三三个个

49、元元素素a2.a2.,直直到到查查找找出出所所需需找找的的数数组组元元素素或或判判定定出出不不存存在在的的需需找找的的元元素素为为止止。无无论论是是未未排排序序或或已已排排序序的的数数组,都可以用顺序查找法。组,都可以用顺序查找法。例:例:设有一数组设有一数组a10a10,x x为需查找的数组元素为需查找的数组元素 值,其顺序查找的程序如下:值,其顺序查找的程序如下:#include#include“stdio.hstdio.h”void main()void main()static int a10=3,6,9,10,12,15,1,4,2,5;static int a10=3,6,9,10

50、,12,15,1,4,2,5;int x,i,t=0;int x,i,t=0;scanf(%d,&x);scanf(%d,&x);for(i=0;i10;i+)for(i=0;i10;i+)if(ai=x)printf(a%d=%d,i,ai);t=1;if(ai=x)printf(a%d=%d,i,ai);t=1;if(t=0)printf(No found);if(t=0)printf(No found);运行结果运行结果:输入输入 12 12 输入输入 9999 输出输出 a4=12 a4=12 输出输出 No foundNo found2.2.折半查找法折半查找法 顺序查找的算法简单,

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

当前位置:首页 > 金融行业 > 保险行业

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报