小甲鱼课件C第六章数组

上传人:E**** 文档编号:90970407 上传时间:2019-06-20 格式:PPT 页数:51 大小:427KB
返回 下载 相关 举报
小甲鱼课件C第六章数组_第1页
第1页 / 共51页
小甲鱼课件C第六章数组_第2页
第2页 / 共51页
小甲鱼课件C第六章数组_第3页
第3页 / 共51页
小甲鱼课件C第六章数组_第4页
第4页 / 共51页
小甲鱼课件C第六章数组_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《小甲鱼课件C第六章数组》由会员分享,可在线阅读,更多相关《小甲鱼课件C第六章数组(51页珍藏版)》请在金锄头文库上搜索。

1、C程序设计 作者:谭浩强 主讲:小甲鱼 第六章 数组,更多资源下载:,QQ:181294552,数组的概念,有如下几组数据,它们分别该如何存储呢?,学生的学习成绩 银行的账单 一行文字,这些个数据的特点是: 1、具有相同的数据类型 2、使用过程中需要保留原始数据 C语言为这些数据,提供了一种构造数据类型:数组。,我们来看一下书本的定义: =,数组的概念,在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型

2、不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。,数组的概念,数组:具有相同类型的数据组成的序列,是有序集合。,数组中的每一个数据称,数组元素 由其所在的位置序号(称数组元素的下标)来区分。 用数组名与下标 可以用统一的方式来处理数组中的所有元素, 从而方便的实现处理一批具有相同性质数据的问题。 注意:数组元素有序不是指元素大小顺序,一维数组的定义和引用,一维数组的定义方式:,在语言中使用数组必须先进行定义。 一维数组的定义方式为: 类型说明符 数组名 常量表达式;,例如: int a10; 它表示定义了一个整形数组,数组名为a,此数组有10个元素,10个元素都是整型变量!

3、,一维数组的定义和引用,需要注意的是:,一、类型说明符是任一种基本数据类型或构造数据类型。对 于同一个数组,其所有元素的数据类型都是相同的。,二、数组名是用户定义的数组标识符。书写规则应符合标识 符的书写规定。,三、方括号中的常量表达式表示数据元素的个数,也称为数 组的长度。,四、允许在同一个类型说明中,说明多个数组和多个变量。 例如: int a,b,c,d,k110,k220;,五、a10,表示a数组有10个元素,注意下标是从0开始的,这10个元素是,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9。请持别注意,按上面的定义,不存在数组元素a10。,六、C语言不允许对数组的大小作

4、动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:,int n; scanf(“%d,,一维数组的定义和引用,一些常见的错误:, float a0; /* 数组大小为0没有意义 */ int b(2)(3); /* 不能使用圆括号 */ int k, ak; /* 不能用变量说明数组大小*/,以下是正确的演示: int a10; /说明整型数组a,有10个元素。 float b10,c20; /说明实型数组b,有10个元素,实型数组c, /有20个元素。 char ch20; /说明字符数组ch,有20个元素。,重点补充:一维数组在内存中的存放,一维数组:

5、int mark100;,每个数据元素占用的字节数,就是基类型的字节数,一个元素占4个字节。,一维数组元素的引用,数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。,数组元素的一般形式为:,数组名下标 (下标可以是整型常量或整型表达式。) 例如: a0= a5+a7-a2*3 a i+j a i+ 都是合法的数组元素。,一维数组元素的引用,一些个注意的事项: 数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在语言中只能逐个地使用下标变量,而不能一次引用整个数组。,例如:输出有10个元素的数组必须使用循环语句逐个输出

6、 各下标变量: for(i=0; i10; i+) printf(“%d“,ai); 而不能用一个语句输出整个数组。 下面的写法是错误的: printf(“%d“,a);,一维数组元素的引用,定义数组时用到的“数组名常量表达式” 和引用数组元素时用到的“数组名下标” 是有区别的。 例如 int a10; /* 定义数组长度为10 */ t=a6; /* 引用a数组中序号为6的元 素。此时6不代表数组长度 */,一维数组元素的引用,请看例题 =,void main() int i,a10; for(i=0;i=0;i-) printf(“%d “,ai); ,一维数组的初始化,小秘密:给数组赋值

7、的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。,数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行间,提高效率。,!注意:之前用赋值语句或输入语句也可给数组素指定初值,是在运行时完成。,初始化赋值的一般形式为: 类型说明符 数组名常量表达式=值,值,值;,一维数组的初始化,(一)在定义数组时对数组元素赋以初值。例如: int a10= 0,1,2,3,4,5,6,7,8,9; 将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,a0=0,a1=1,a2=2, a3=3,a4=4,a5=5, a6=6,a7

8、=7,a8=8, a9=9。,实现方法有如下几种:,一维数组的初始化,(2)可以只给一部分元素赋值。例如: int a10= 0,1,2,3,4; 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。不信的话可以调试一下!尽信书则不如无书!,(3)如果想使一个数组中全部元素值为0, 可以写成 int a10=0,0,0,0,0,0,0,0,0,0; 或 int a10=0;,一维数组的初始化,!(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。 例如: int a5= 1,2,3,4,5; 也可以写成: int a =

9、 1,2,3,4,5;,在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5。但若数组长度与提供初值的个数不相同,则数组长度不能省略。例如,想定义数组长度为10,就不能省略数组长度的定义,而必须写成int a10=1,2,3,4,5; 只初始化前5个元素,后5个元素为0。,一维数组的初始化,数组初始化与未初始化比较 #include void main() int i, a5 = 3, 4, 5, b5; printf(“ n array a is: ”); for(i=0; i5; i+) printf(“%6d”, ai); printf(“ n array b is:

10、”); for(i=0; i5; i+) printf(“%6d”, bi); ,一维数组的初始化,动态赋值的方法 :,void main() int i, max, a10; printf(“input 10 numbers:n“); for(i=0; imax) max=ai; /有条件的话还是加回括号给它哦 printf(“maxmum=%dn“,max); ,补充:程序举例 1,!利用数组来处理、求解Fibonacci数列。,回顾:Fibonacci数列公式:已知: a1 = a2 = 1 an = an-1 + an-2 即:1, 1, 2, 3, 5, 8, 13, ,过程:先定义

11、一个20个元素的数组,并将数组的第一、第二个 元素都初始化为1,其他元素初始化为0,通过公式求出其他各 个各个元素的值。,参考代码 =,补充:程序举例 1,#include void main() int i; int a20 = 1,1; for( i=2; i 20; i+) ai = ai-2 + ai-1; for(i=0;i20;i+) if( 0 = i%5 ) printf(“n”); printf(%12d,ai); /*For循环结束*/ /*程序结束*/,/if语句用来控制换行, /每行输出5个数据。,补充:程序举例 2,!用冒泡法(起泡法)对10个数排序(由小到大)。,冒

12、泡法的思路是:将相邻两个数比较,将小的调到前头。,注意: 经过第一趟(共5次比较与交换)后,最大的数9已“沉底” 。然后进行对余下的前面5个数第二趟比较,补充:程序举例 2,如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。,补充:程序举例 2,过程提示: 1、先通过动态赋值的方法让用户输入十个待排序的数字,通过数组保存起来。 2、掌握两个循环,外层循环限制有多少趟比较,内层循环 限制某趟比较要进行两两对比的次数。 3、如果ai ai+1,则将两数进行交换,因为要求从小 到大排列嘛 4、把最终的结果输出到屏幕! 5、完成!,实现方法

13、示例 =,补充:程序举例 2,#include void main() int a10; int i, j, t; printf(input 10 numbers :n); for (i=0; i 10; i+) scanf(“%d“, /* 前面这些实现用户输入数据到数组 */,页面不够,接着往下看=,补充:程序举例 2,for(j=0;jai+1) t = ai; ai = ai+1; ai+1 = t; /*上边是将ai和ai+1两数调换*/ printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n);

14、 /*程序结束*/,二维数组的定义和引用,二维数组的定义,二维数组定义的一般形式为 类型说明符 数组名常量表达式常量表达式; 例如:定义a为34(3行4列)的数组,b为510(5行10列)的数组。如下: float a34,b510;,不能写成 float a3,4,b5,10;,那3行4列怎么表示的呢?,二维数组的定义,例如: int a34; 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有34个,即: a00, a01, a02, a03 a10, a11, a12, a13 a20, a21, a22, a23,二维数组的定义,我们可以把二维数组看作是

15、一种特殊的一维数组:它的元素又是一个一维数组。 例如,可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。,二维数组的定义,二维数组在概念上是二维的,但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。 如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。在语言中,二维数组是按行排列的。,右图表示对a34- ,衍生:多维数组的定义,有了二维数组的基础,那么多维数组如何定义呢?,定义三维数组: float a234; 多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。,二维数组元素的引用和初始化,数据类型 数组名 常量表达式1常量表达式2

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号