C语言课件数组.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言课件数组.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 数组
- 资源描述:
-
1、给一组数排序,这组给一组数排序,这组 数该数该 如何存放呢如何存放呢82945637617188888888881111111111111118 8 88888888本章要点7.1 7.1 一维数组的定义和引用一维数组的定义和引用7.2 7.2 二维数组的定义和引用二维数组的定义和引用7.3 7.3 字符数组字符数组有如下几组数据,它们分别该如何存储呢?有如下几组数据,它们分别该如何存储呢? 是一组具有是一组具有相同数据类型相同数据类型的数据的的数据的有序集合。有序集合。 一个班学生的学习成绩 一行文字 一个矩阵这些数据的特点是:这些数据的特点是:1、具有相同的数据类型、具有相同的数据类型2、
2、使用过程中需要保留原始数据、使用过程中需要保留原始数据 C语言为这些数据,提供了一种语言为这些数据,提供了一种构造数据类型:数组。构造数据类型:数组。类型说明符类型说明符 数组名常量表达式;数组名常量表达式;例如:例如: int aint a1010; ; 它表示定义了一个整形数组,数组名为它表示定义了一个整形数组,数组名为a a,此数组,此数组有有1010个元素。个元素。 7.1.1 7.1.1一维数组的定义一维数组的定义(1 1)数组名定名规则和变量名相同,遵循标识符定名规则。(2 2)在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。例如,指定a
3、10,表示a数组有10个元素,注意下标是从0开始的,这10个元素是,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9。请持别注意,按上面的定义,不存在数组元素a10。(3 3)常量表达式中可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:int n;int n; scanf( scanf(“%d%d,&n); &n); / /* *在程序中临时输入数在程序中临时输入数 组的大小组的大小 * */ / int a int an n; ; float afloat a0 0;/
4、 /* * 数组大小为数组大小为0 0没有意义没有意义 * */ / int b(2)(3); int b(2)(3); / /* * 不能使用圆括号不能使用圆括号 * */ / int k, ak;int k, ak; / /* * 不能用变量说明数组大小不能用变量说明数组大小* */ / 每个数据元素占用每个数据元素占用的字节数,就是的字节数,就是基基类型类型的字节数的字节数一个元素占一个元素占4个个字节字节一维数组:一维数组: floatfloat markmark100;100;mark0mark1mark2mark3. . . .mark9986.592.077.552.0. . .
5、 .94.0低地址低地址 高地址高地址数组名下标数组名下标下标可以是整型常量或整型表达式。例如下标可以是整型常量或整型表达式。例如: :a a0 0=a=a5 5+a+a7 7-a-a2 2* *3 3定义数组时用到的“数组名常量表达式” 和引用数组元素时用到的“数组名下标” 是有区别的。例如 int a10; /* 定义数组长度为10 */ t=a6; /* 引用a数组中序号为6的元 素。此时6不代表数组长度 */ 7.1.2 7.1.2一维数组元素的引用一维数组元素的引用1 1、数组元素的引用方式:、数组元素的引用方式:2 2、一维数组元素引用的、一维数组元素引用的#include voi
6、d main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); 运行结果如下:运行结果如下:9 8 7 6 5 4 3 2 1 0 程序使a0到a9的值为09,然后按逆序输出。 1、对数组元素初始化的实现方法:对数组元素初始化的实现方法: (1 1)在定义数组时对数组元素赋以初值。例如)在定义数组时对数组元素赋以初值。例如: :int aint a1010=0=0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9;9;将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,a0=0,a1=1,a2=
7、2,a3=3,a4=4,a5=5,a6=6,a7=7,a8=8,a9=9。 7.1.3 7.1.3一维数组的初始化一维数组的初始化 (3 3)如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为0 0, 可以写成可以写成 int aint a1010=0=0,0 0,0 0,0 0,0 0,0 0,0 0,0 0, 0 0,0; 0; 或或intainta1010=0;=0; 不不能写成能写成:int aint a1010=0=0* *10;10;这是与FORTRAN语言不同的,不能给数组整体赋初值。 2 2)可以只给一部分元素赋值。例如)可以只给一部分元素赋值。例如: :int ai
8、nt a1010=0=0,1 1,2 2,3 3,4;4; 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。4 4)在对全部数组元素赋初值时,由于数据的个数已在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。经确定,因此可以不指定数组长度。 例如例如: :int aint a5 5=1=1,2 2,3 3,4 4,5;5; 也可以写成也可以写成 int a=1,2,3,4,5; 在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5。但若数组长度与提供初值的个数不相同,则数组长度不能省略。例如,想定义数组
9、长度为10,就不能省略数组长度的定义,而必须写成 int aint a1010=1=1,2 2,3 3,4 4,5; 5; 只初始化前5个元素,后5个元素为0。用数组来处理用数组来处理, ,求解求解Fibonacci数列。数列。#include #include void main()void main() int i; int i; int f int f2020=1=1,1;1;Fibonacci数列公式:数列公式:已知已知: : a a1 1=a=a2 2=1=1a an n=a=an-1n-1+a+an-2 n-2 即即:1,1,2,3,5,8,13:1,1,2,3,5,8,13 7.
10、1.4 7.1.4一维数组程序举例一维数组程序举例for(i=2;i20;i+)for(i=2;i20;i+)f fi i=f=fi-2i-2+f+fi-1i-1; ;for(i=0;i20;i+)for(i=0;i20;i+) if(i%5=0) printf( if(i%5=0) printf(n);n); printf(%12d printf(%12d,f fi i) ) / /* *ForFor循环结束循环结束* */ / / /* *程序结束程序结束* */ /运行结果如下:运行结果如下: 1 1 2 3 51 1 2 3 5 8 13 21 34 55 8 13 21 34 55
11、89 144 233 377 610 89 144 233 377 610 987 1597 2584 4181 6765 987 1597 2584 4181 6765if语句用来控制换行,每行输出5个数据。用起泡法对用起泡法对1010个数排序个数排序( (由小到大由小到大) )。 起泡法的思路是:起泡法的思路是:将相邻两个数比较,将小的调到前头。 第一趟比较 经过第一趟(共5次比较与交换)后,最大的数9已“沉底” 。然后进行对余下的前面5个数第二趟比较,注注第二趟比较如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。 经过第二趟
12、(共4次比较与交换)后,得到次大的数8。注注程序流程图如下:程序流程图如下:#include void main() int a10; int i,j,t; printf(input 10 numbers :n); for (i=0;i10;i+) scanf(%d,&ai); printf(n); for(j=0;j9;j+) for(i=0;iai+1) t=ai;ai=ai+1; ai+1=t; printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n);/*程序结束*/程序运行结果如下:程序运行结果如
13、下:input 10 numbers:input 10 numbers:1 0 4 8 12 65 -76 100 -45 123the sorted numbers:the sorted numbers:-76 -45 0 1 4 8 12 65 100 123 7.2.1 7.2.1二维数组的定义二维数组的定义类型说明符类型说明符 数组名数组名常量表达式常量表达式常量表达式常量表达式;例如:例如:定义定义a a为为3 34(34(3行行4 4列列) )的数组,的数组,b b为为5 510(510(5行行1010列列) )的数组。如下:的数组。如下:float afloat a3 34 4,
14、b b5 51010;不能写成不能写成 float afloat a3 3,4 4,b b5 5,1010; ;注意注意我们可以把二维数组看作是一种特殊的一维数组:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。它的元素又是一个一维数组。例如,可以把例如,可以把a看作是一个一维数组,它有看作是一个一维数组,它有3个元素:个元素:a0、a1、a2,每个元素又是一个包含,每个元素又是一个包含4个元素的一维数组。个元素的一维数组。 二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素 b b0000b b0101b b0202b b101
15、0b b1111b b1212b b2020b b2121b b22223003000 0H H3003002 2H H3003004 4H H3003006 6H H3003008 8H H300300A AH H300300C CH H300300E EH H30301010H H例如:整型数组例如:整型数组 b33= 1,2,3, 4,5,6, 7,8,9 ;123456789多维数组多维数组如何定义呢?如何定义呢? 定义三维数组定义三维数组: float afloat a2 23 34 4; ;多维数组元素在内存中的排列顺序:第一维的下标变化多维数组元素在内存中的排列顺序:第一维的下标
16、变化最慢,最右边的下标变化最快。最慢,最右边的下标变化最快。 a000a000a001a001a002a002a003a003 a010 a010a011a011a012a012a013a013 a020a020a021a021a022a022a023a023 a100 a100a101a101a102a102a103a103 a110 a110a111a111a112a112a113a113 a120 a120a121a121a122a122a123a123三维数组的元素排列顺序三维数组的元素排列顺序二维数组元素的表示形式为:二维数组元素的表示形式为:数组名下标下标数组名下标下标 例如:例如
17、: a a2 23 3下标可以是整型表达式,下标可以是整型表达式,如如 a a2-12-12 2* *2-12-1数组元素可以出现在表达式中,也可以被赋值,例如:数组元素可以出现在表达式中,也可以被赋值,例如:b b1 12 2=a=a2 23 3/2/2注意注意不要写成不要写成 a a2 2,3 3,a a2-12-1,2 2* *2-12-1形式形式常出现的错误有:常出现的错误有: int a34; / /* * 定义定义a a为为3 34 4的数组的数组 * */ / a34=3; 在使用数组元素时,应该注意下标值应在已定义在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。的
18、数组大小的范围内。可以用下面可以用下面4 4种方法对二维数组初始化种方法对二维数组初始化数据类型数据类型 数组名数组名 常量表达式常量表达式1 1常量表达式常量表达式2 2 初始化数据初始化数据;(1)(1) 分行给二维数组赋初值。分行给二维数组赋初值。如:如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; (2)(2) 可以将所有数据写在一个花括弧内,按数组排列可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。的顺序对各元素赋初值。如:如:int aint a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010
19、,1111,12;12;(3)(3) 可以对部分元素赋初值。可以对部分元素赋初值。如如 int a34=1,5,9; 1 0 0 01 0 0 05 0 0 0 5 0 0 0 9 0 0 0也可以对各行中的某一元素赋初值,如int a34=1,0,6,0,0,11; 1 0 0 01 0 0 00 6 0 00 6 0 00 0 0 0 110 0 11 1 0 0 01 0 0 05 6 0 0 5 6 0 0 0 0 0 0也可以只对某几行元素赋初值也可以只对某几行元素赋初值。如。如:int a34=1,5,6; (4)(4)如果对全部元素都赋初值,则定义数组时对第一维如果对全部元素都赋
20、初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。的长度可以不指定,但第二维的长度不能省。如:如:int aint a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;它它等价等价于于:int aint a4 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;在定义时也可以只对部分元素赋初值而省略第一维的在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如:长度,但应分行赋初值。如:int aint a4 4=0=0,0 0,33,00
21、,10;10;0 0 3 00 0 0 00 10 0 0例例7.4 7.4 将一个二维数组行和列元素互换,存到另一个将一个二维数组行和列元素互换,存到另一个 二维数组中。二维数组中。#include void main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) 例如:a= 1 2 3 1 4 4 5 6 b= 2 5 3 6 printf(%5d,aij); bji=aij; printf(n); printf(array b:n);for (i=0;i=2
22、;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); / /* *程序结束程序结束* */ /运行结果如下:array a: 1 2 3 4 5 6array b: 1 4 2 5 3 6 例例7.5: 7.5: 有一个有一个34的矩阵,要求编程序求出其中值最大的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。的那个元素的值,以及其所在的行号和列号。 先用先用N-S流程图表示算法流程图表示算法 ,如下:如下:程序如下:程序如下: #include void main() int i,j,row=0,colum=0,max; in
23、t a34=1,2,3,4,9,8,7,6, -10,10,-5,2; max=a00; for (i=0;i=2;i+) for (j=0;jmax) max=aij; row=i; colum=j; printf(max=%d,row=%d,colum=%dn,max,row,colum); /*程序结束程序结束*/用来存放字符数据用来存放字符数据的数组是字符数组。的数组是字符数组。字符数组中的一个字符数组中的一个元素存放一个字符。元素存放一个字符。 7.3.1 7.3.1字符数组的定义字符数组的定义定义方法与前面介绍的类似。例如:定义方法与前面介绍的类似。例如:char cchar c1
展开阅读全文