第六章数组 ppt课件.pptx
《第六章数组 ppt课件.pptx》由会员分享,可在线阅读,更多相关《第六章数组 ppt课件.pptx(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章 数组 数 组 数组数组是有序数据的集合。是有序数据的集合。 数组数组中的每一个中的每一个元素元素都属于都属于同一同一个个数据类型数据类型。用一个用一个统一统一的的数组名数组名和和下标下标来唯一地确定数组中来唯一地确定数组中的元素。的元素。6.1 一维数组6.1.1 6.1.1 一维数组的定义和初始化一维数组的定义和初始化1.1.一维数组的定义一维数组的定义定义格式定义格式: :类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例如:例如:int a10int a10 数组名为数组名为a a,此数组有,此数组有1010个元素。个元素。说明:说明:(1 1)数组名的命名规则和变量名
2、相同,遵循标识符命)数组名的命名规则和变量名相同,遵循标识符命名规则。名规则。(2 2)定义数组时,需要指定数组名中元素的个数,)定义数组时,需要指定数组名中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长方括弧中的常量表达式用来表示元素的个数,即数组长度。度。注意:数组下标是从注意:数组下标是从0 0开始的。开始的。例如:例如: int array5; int array5; 定义整型数组定义整型数组arrayarray,共有,共有5 5个元素,分别是个元素,分别是array0array0,array1array1,array2array2,array3array3,array4
3、array4。 数组的长度虽然是数组的长度虽然是5 5,但由于第一个元素的下标是从,但由于第一个元素的下标是从0 0开始的,所以最后一个元素的下标是开始的,所以最后一个元素的下标是4 4而不是而不是5 5。6.1 一维数组(3 3)常量表达式中可以包括常量和符号常量,不能包)常量表达式中可以包括常量和符号常量,不能包含变量。含变量。例如:下面这样定义数组是不行的。例如:下面这样定义数组是不行的。int n;int n;scanf(%d,&n);scanf(%d,&n);int an;int an;6.1 一维数组2. 2. 一维数组的初始化一维数组的初始化初始化数组的一般格式为:初始化数组的一
4、般格式为: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式=值值1 1,值,值22值值nn; 例如:例如:int array6=1,2,3,4,5,6;int array6=1,2,3,4,5,6;6.1 一维数组说明:(1)(1)在对全部数组元素赋初值时在对全部数组元素赋初值时, ,可以不指定数组长度。可以不指定数组长度。例如例如: : int a5=1,2,3,4,5; int a5=1,2,3,4,5;可以写成可以写成: : int a=1,2,3,4,5; int a=1,2,3,4,5;如果定义数组长度为如果定义数组长度为1010,就不能省略数组长度的定义。,就不能省略数组
5、长度的定义。必须写成:必须写成: int a10=1,2,3,4,5int a10=1,2,3,4,5(2) (2) 在定义数组时对数组元素赋初值。在定义数组时对数组元素赋初值。例如例如: : int a10=0,1,2,3,4,5,6,7,8,9; int a10=0,1,2,3,4,5,6,7,8,9; (3)(3)可以只给一部分元素赋初值可以只给一部分元素赋初值, ,初值个数少于长度,初值个数少于长度,余下的为余下的为0 0。 例如例如: : int a10=0,1,2,3,4; int a10=0,1,2,3,4;(4)(4)只能给数组元素逐个赋值,不能给数组整体赋值。只能给数组元素逐
6、个赋值,不能给数组整体赋值。 例如例如:int int a5=4,9,8,7,3a5=4,9,8,7,3;定义含有定义含有5 5个元素的整型数组个元素的整型数组a a,并对其赋初值。,并对其赋初值。int int a5=4a5=4; ;不能不能试图试图用用这种方式定义这种方式定义含有含有5 5个个元素的整型数组元素的整型数组a a,并对其所有元素赋初值并对其所有元素赋初值4 4。6.1 一维数组6.1.2 6.1.2 一维数组元素的引用一维数组元素的引用数组元素的表示形式为:数组元素的表示形式为: 数组名数组名 下标下标 下标可以是整型常量、整型变量或整型表达式。下标可以是整型常量、整型变量或
7、整型表达式。例如:例如:a0=a5+a7-a2a0=a5+a7-a2* *33注意注意: :定义数组的定义数组的“数组名数组名 常量表达式常量表达式 ”和引用数组和引用数组时用到的时用到的“数组名数组名 下标下标”的区别。的区别。int a10; /int a10; /* *定义数组长度为定义数组长度为1010* */ /t=a6; /t=a6; /* *引用引用a a数组中序号为数组中序号为6 6的元素的元素* */ / 6.1 一维数组【例例6.16.1】输出】输出一维数组中下标为偶数的元素值。一维数组中下标为偶数的元素值。 for i=0 to 10 输出数组中下标为偶数的元素值 定义数
8、组 a 并赋初值 定义变量 i 6.1 一维数组程序运行结果:a0=1a0=1a2=33a2=33a4=25a4=25a6=17a6=17a8=a8=6363a10a10=10=10#include#includevoid main( )void main( ) int int i;i;int int a10=1,12,33,4,25,-6,17,8,63,-56; a10=1,12,33,4,25,-6,17,8,63,-56; for(i=0;i=10;i+,i+)for(i=0;i=10;i+,i+)printfprintf(a%d=%dn,i,ai); (a%d=%dn,i,ai);
9、6.1.3 6.1.3 一维数组应用举例一维数组应用举例【例例6.26.2】输入】输入N N个整数,依次输出前个整数,依次输出前i i个整数的和。个整数的和。6.1 一维数组#include#include#define N 5#define N 5void main()void main() int int aN,i,x=0aN,i,x=0; ; printf printf(Please input the array: );(Please input the array: ); for(i=0;iN;i for(i=0;iN;i+) +) scanf scanf(%d,&ai);(%d,&
10、ai); x=a0 x=a0; for(i=2;i for(i=2;i=N;i+)aj+1ajaj+1假假for i=0 to n-2for i=0 to n-2输出数组输出数组a a真真输入输入n n个数给个数给a1a1到到ananfor j=0 to n-2-ifor j=0 to n-2-i程序如下:#include #include void main()void main() int i,j,t,a5;int i,j,t,a5;printf(Please input the array: );printf(Please input the array: );for(i=0;i5;i+
11、)for(i=0;i5;i+)scanf(%d,&ai);scanf(%d,&ai);6.1 一维数组 for(i=0;i4;i+)for(i=0;i4;i+) for(j=0;j4-i;j+) for(j=0;jaj+1) if(ajaj+1) t=aj; t=aj; aj=aj+1; aj=aj+1; aj+1=t; aj+1=t; printf(the result is: ); printf(the result is: ); for(i=0;i5;i+) for(i=0;i5;i+)printf(%d ,ai);printf(%d ,ai); printf(n); printf(n)
12、; 6.1 一维数组运行结果运行结果: :Please input the array:Please input the array:6 5 4 3 26 5 4 3 2 the result is: 2 3 4 5 6the result is: 2 3 4 5 6【例【例6.46.4】 用用“折半查找法折半查找法”查找数组中是否存在某查找数组中是否存在某个整数,若存在,输出是第几个数,不存在,则输出个整数,若存在,输出是第几个数,不存在,则输出“查无此数查无此数”。“折半查找法折半查找法”又称又称“二分查找法二分查找法”,其基本思想是,其基本思想是: 数组数组中的元素按升序排列的前提下,首
13、先将给定值中的元素按升序排列的前提下,首先将给定值与中间位置的元素进行比较,若相等,则查找成功;若与中间位置的元素进行比较,若相等,则查找成功;若给定值小于中间位置的元素,则对前半部分元素进行折给定值小于中间位置的元素,则对前半部分元素进行折半查找;若给定值大于中间位置的元素,则对后半部分半查找;若给定值大于中间位置的元素,则对后半部分元素进行折半查找。元素进行折半查找。 6.1 一维数组6.1 一维数组程序如下:#include#includevoid main()void main() int int a10=7,9,12,24,35,48,57,72,86,93;a10=7,9,12,2
14、4,35,48,57,72,86,93; int int low=0,high=9,mid,x;low=0,high=9,mid,x; printf printf(Please input the key:);(Please input the key:); scanf scanf(%d,&x);(%d,&x);6.1 一维数组while(lowwhile(low=high)amid if(xamid) ) low=mid+1low=mid+1; ; else else if(xamid) if(xamid) high=mid-1high=mid-1; ; else else break; b
15、reak; 6.1 一维数组if(lowif(low=high)=high) printfprintf(Search successful!nThe index is (Search successful!nThe index is % %dn,mid+1);dn,mid+1);elseelse printfprintf(Fail!Cant find!n);(Fail!Cant find!n); 6.1 一维数组运行结果运行结果: :Please input the key:86Please input the key:86 Search successful!Search successfu
16、l!The index isThe index is 9 9再次运行结果:再次运行结果:Please input the key:39Please input the key:39 Fail!Cant find!Fail!Cant find!6.2.1 6.2.1 二维数组的定义二维数组的定义二维数组的定义格式为:二维数组的定义格式为:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22;如如: : float a34,b510; float a34,b510; 定义定义a a为为3 3行行4 4列的数组列的数组,b,b为为5 5行行1010列的数组。列的数组。
17、注意注意: :不能写成不能写成: float a3,4,b5,10;: float a3,4,b5,10;6.2 二维数组可以把可以把二维数组二维数组a a看作看作是一种特殊的是一种特殊的一维数组一维数组: :它有它有3 3个元素:个元素:a0,a1,a2,a0,a1,a2,每个元素又是一个每个元素又是一个包含包含4 4个元素的一维数组。个元素的一维数组。语言中,二维数组中元素排列的顺序是:语言中,二维数组中元素排列的顺序是: 按行存放,即在内存中先顺序存放第一行的元素,按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。再存放第二行的元素。定义三维数组的方式为:定义三维数组的方式
18、为: float a345float a345;6.2 二维数组6.2.2 6.2.2 二维数组的初始化二维数组的初始化(1)(1)分行给二维数组赋初值分行给二维数组赋初值int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)(2)可以将所有数据写在一个花括弧内,按数组排列的可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。顺序对各元素赋初值。如:如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;
19、(3)(3)部分元素赋初值部分元素赋初值如:仅对第一列元素赋初值如:仅对第一列元素赋初值, ,其余元素为其余元素为0 0。 int a34=1,5,9;int a34=1,5,9;6.2 二维数组int a32=1,2,3,4int a32=1,2,3,4; 根据根据数组列数对元素进行分割,按行存放,数组列数对元素进行分割,按行存放,1 1、2 2赋赋给第给第0 0行,行,3 3、4 4赋给第一行,第二行没有对应的初值,赋给第一行,第二行没有对应的初值,自动赋值为自动赋值为0 0。(4) (4) 对全部元素赋初值对全部元素赋初值, ,则定义数组时对第一维的长度则定义数组时对第一维的长度可以不指
20、定可以不指定, ,但第二维的长度不能省略。但第二维的长度不能省略。例如例如: : int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a34=1,2,3,4,5,6,7,8,9,10,11,12;等价于等价于: : int a 4=1,2,3,4,5,6,7,8,9,10,11,12; int a 4=1,2,3,4,5,6,7,8,9,10,11,12;系统会根据数据总个数分配存储空间。系统会根据数据总个数分配存储空间。在定义时可省略第一维的长度,但应分行赋初值。在定义时可省略第一维的长度,但应分行赋初值。 int a 4=0,0,3, ,0,1,0;int a
21、4=0,0,3, ,0,1,0;6.2.3 6.2.3 二维数组元素的引用二维数组元素的引用引用引用形式为:形式为:数组名数组名 下标下标11下标下标22例如:例如:b12=a23/2b12=a23/26.2 二维数组【例例6.56.5】求】求3 33 3的矩阵主对角线和次对角线上各的矩阵主对角线和次对角线上各元素元素之之和和。6.2 二维数组程序如下:#include#includevoid main( )void main( ) int a33=1,2,3,4,5,6,7,8,9;int a33=1,2,3,4,5,6,7,8,9; int int i,j,sum=0;i,j,sum=0;
22、 for(i=0;i3;ifor(i=0;i3;i+)+) sumsum+=aii; +=aii; for(i=0;i3;i for(i=0;i=0;j-) for(j=2;j=0;j-) if(i+jif(i+j=2)=2) sum sum+=aij; +=aij; sum=sum-a3/2 sum=sum-a3/23/2; 3/2; printf(sum=%dn,sum);printf(sum=%dn,sum); 程序运行结果程序运行结果:sum=25sum=256.2.4 6.2.4 二维数组应用举二维数组应用举例例 【例【例6.66.6】将】将3 34 4的二维数组中的第的二维数组中的
23、第0 0列和最后一列元素列和最后一列元素的值相互交换,第一列和第二列元素的值相互交换的值相互交换,第一列和第二列元素的值相互交换。程序如下:程序如下:#include#includevoid main( )void main( ) int int a34=5,8,9,1,4,2,6,7a34=5,8,9,1,4,2,6,7,12,13,14,10,12,13,14,10; int int i,j,k;i,j,k; for(i=0;i3;ifor(i=0;i3;i+)+) for(j=0;j4/2;jfor(j=0;j4/2;j+)+) k=aij;k=aij; aiaij=ai3-j;j=ai
24、3-j; aiai3-j=k;3-j=k; 程序如下:程序如下:for(i=0;i3;ifor(i=0;i3;i+)+) printf(n); printf(n); for(j=0;j4;j+) for(j=0;j4;j+) printf(%4d,aij);printf(%4d,aij); printf(n);printf(n); 程序运行结果:1985762410141312【例例6.76.7】将将4 44 4矩阵的矩阵的4 4个最小值按升序存放在主对个最小值按升序存放在主对角线上。角线上。#include#includevoid main()void main() int a44=1,8,
25、7,4,15,6,17,9, int a44=1,8,7,4,15,6,17,9, 2,10,3,12,13,5,28,16; 2,10,3,12,13,5,28,16; int int i,j,k,t,mini,minj;i,j,k,t,mini,minj; for(i=0;i4;i for(i=0;i4;i+)+) mini=i mini=i; ; minj=i; minj=i; for(j=0;j4;j for(j=0;j4;j+)+) for(k=0;k4;k for(k=0;k4;k+)+) if(j=k&ji) if(j=k&jajminjajk) k) mini=j mini=j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 数组 ppt课件 第六 ppt 课件
限制150内