C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型

上传人:E**** 文档编号:89390776 上传时间:2019-05-24 格式:PPT 页数:106 大小:2.81MB
返回 下载 相关 举报
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型_第1页
第1页 / 共106页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型_第2页
第2页 / 共106页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型_第3页
第3页 / 共106页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型_第4页
第4页 / 共106页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型》由会员分享,可在线阅读,更多相关《C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第5章 数组类型与指针类型(106页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计(第3版),中国铁道出版社 China Railway Publishing House,普通高等教育“十一五”国家级规划教材,主 教 材:C语言程序设计(第三版) 书 号:ISBN 978-7-113-09512-3 中国铁道出版社 2009年2月 第3版 配套教材:C语言程序设计实验教程 书 号:ISBN 978-7-113-09513-0 中国铁道出版社 2009年2月 第1版 作者电子邮箱: L ,第5章 数组类型与指针类型,5.1 数据类型的构造,5.3 指针类型,5.2 数组类型,结束放映,系统预先提供的类型: C语言提供的基本数据类型,大致分为整型、实型、字符型等三

2、大类 用户新定义的类型: C语言提供构造新类型的方法,可以在已有数据类型的基础上构造新的数据类型,这种新的类型称为构造类型,根据构造方法的不同分为数组、指针、结构、联合等四种,5.1 数据类型的构造,例如: C语言没有描述出生日期的数据类型,但提供的结构构造方法可以构造出描述该种的数据的新类型 出生日期的数据类型的构造 struct Birthday int year; int month; int day; ; 建立一个出生日期数据 struct Birthday x; 说明: C语言中的数据表示为常量或变量两种形式,构造类型一般只提供变量形式的数据。,匿名类型建立一个出生日期数据 stru

3、ct int year; int month; int day; x; 说明: 匿名方式构造的类型只能使用一次,优点是无需命名比较简单。,类型定义命令 typedef 数据的定义; 说明: 可以将类型的构造规则记录下来并命名,以后使用该名称就是使用该构造规则。 例如: typedef struct int year; int month; int day; NBirthday; NBirthday x; 说明: 使用类型定义命令定义的类型名建立变量x可以省略struct保留字,因而更简单。,基本类型也可以根据使用场合定义别名以更具含义,例如: typedef int Year; Year ye

4、ar; 出生日期类型的构造因而变为: typedef struct Year year; Month month; Day day; NBirthday;,5.2 数组类型,数组类型的定义 数组是相互关联的一批数据的序列,序列中的数据称为数组的成员,可按排列顺序编号,起始编号为零,下个元素编号递增壹,通过编号可以唯一指定数组中的数据成员。 数组中的成员数据可以是基本类型,也可以是构造类型,若成员数据是整型则称为整型数组,若成员数据是结构类型则称为结构数组,若成员数据是指针类型则称为指针数组,若成员数据是数组则称为二维数组,数组类型的定义(续) 数组通过名称区分和使用,名称是一个标识符必须唯一,

5、后面可以加上一对方括号界定的编号来指定一个数组成员,编号可以是一个数也可以是一个变量或表达式 例如: 有一个数组类型的变量a,包含了10个元素,可以通过a0,a1,a9作为元素名字来使用这10个数组元素,也可以通过ai来作为元素名字。,数组的存储 数组的存储涉及两个问题: 每个成员要有存储空间且每个成员可以通过编号找到存储空间的位置。 数组的存储方法: 分配连续的一块内存区能够存放得下所有的成员,然后将数组成员按编号顺序连续存放,零号成员存放在这块内存区的最前面,假设内存地址为start,由于每个成员所占存储空间的大小是相同的,假设为m个字节,这时i号成员的内存地址就等于start+m*i。,

6、存储方式的一些限制: 首先,定义数组时给定一个编译时可知道的数组大小,不能在运行时根据需要来给定数组大小,即定义数组大小的值必须是常量表达式。如果要让数组大小在运行时才确定,可以采用后面介绍的动态数组机制。 其次,使用数组成员时编号有一个明确的范围,10个成员的数组编号从0到9,不能超过这个范围,这种现象称为下标的有界性。,一维数组 一维数组的成员不再是数组,每个数组成员只需一个下标编号就可以指定。数组成员一般是基本类型,也可以是结构,指针等构造类型。 一维数组变量的定义 元素类型 数组变量名常量表达式=初值表; 说明 元素类型是数组的数据成员的类型。 常量表达式的值定义了数组的大小,必须为正

7、整型,当提供了初值表时可以省略,这时以初值表中元素个数作为数组的大小。,数组变量名需要符合标识符的要求,不能与已有的变量名或保留字相同。 初值表用于提供每个数组成员的初值,若不想提供初值可以省略,无初始化的数组成员值是不确定的随机数。 例如: int a10=1; 定义10个int元素的数组a,第一元素初值为壹,其它为零,一维数组类型的定义 typedef 元素类型 数组类型名常量表达式; 说明: 新定义的一维数组类型由常量表达式指定大小,数组成员是元素类型,类型取名为数组类型名。 例如: typedef int Matrix10; Matrix A=1,2,3,B=1,2,3,4,C=1,2

8、,3,4,5; 定义了10个int元素的数组类型Matrix,使用该类型定义了三个变量A、B、C并初始化,【例5.1】输入10个0到100的随机整数到定义的数组中。 #include #include #include void main() int i,a10=0; srand(unsigned)time(NULL); /*初始化随机数序列*/ for(i=0;i10;i+) ai=rand()%100; /*产生100以内的随机整数*/ for(i=0;i10;i+) printf(“%dn“,ai); ,修改【例5.1】编程查找十个数中最小值。 #include #include #in

9、clude void main() int i,a10=0; int m,*p; srand(unsigned)time(NULL); for(i=0;iai) m=ai; printf(“The max is %d “,m); ,修改上例 编一个函数查找十个数中最小值并交换到最前面。 #include #include #include void findmin(int a,int start); void main() int i,a10=0; int *p; srand(unsigned)time(NULL); for(i=0;i10;i+) ai=rand()%100; for(i=0

10、;i10;i+) printf(“%d “,ai); printf(“n“); findmin(a,0); printf(“The max is %d “,a0); ,void findmin(int a,int start) int m,i,p,x; m=astart; p=start; for(i=start+1;iai) m=ai; p=i; x=astart; astart=ap; ap=x; ,修改上例 排序十个随机数 #include #include #include void main() int i,a10=0; int *p; srand(unsigned)time(NUL

11、L); for(i=0;i10;i+) ai=rand()%100; for(i=0;i10;i+) printf(“%d “,ai); printf(“n“); for(i=0;i=8;i+) findmin(a,i); for(i=0;i10;i+) printf(“%d “,ai); ,void findmin(int a,int start) int m,i,p,x; m=astart; p=start; for(i=start+1;iai) m=ai; p=i; x=astart; astart=ap; ap=x; ,一维数组的基本操作 数组只能以元素方式来使用,而不能直接作为一个整

12、体来使用。 例如: int a10,b10; a=100; /*错误:不能如此对数组a进行整体赋值*/ if(a=b) printf(“Equal!”) /*错误:不能如此对数组a和b进行整体比较*/ 如果要对数组变量进行整体操作,可通过函数与循环等机制,将数组变量的操作分解成对全体数组元素的操作。,一维数组的基本操作(续) 数组元素的下标可以是常量形式,也可以是数值表达式形式,若下标中包含小数则会先取整。 例如: a7/2=12; /*实际是对a3进行赋值*/ 数组的下标表达式中允许嵌套使用数组元素 例如: int a2; a0=1;a1=0; aa0=1; /* a1=1 a0不变*/ a

13、a1=0; /* a1=0 a0不变*/,【例5.2】利用数组获得20项Fibonacci数列元素,即后一项为前两项之和,开始两项为1,可得序列为1,1,2,3,5,8, #include void main() int i,f20=1,1; for(i=2;i=19;i+) fi=fi-2+fi-1; for(i=0;i=19;i+) printf(“%d/n“,fi); ,通过指针变量也可以访问数组元素。方法有两步: (1)建立指针变量,取得数组中第一个元素的指针; (2)重复通过指针加1来获得下一个数组元素的指针。 第一步获取指针可以通过两种方式 一种是利用取址运算(&)获得元素的指针,

14、 另一种是直接通过数组名获得第一元的指针,数组名本身可看成是一种特殊指针可以使用指针运算。,【例5.3】采用指针方式访问数组元素求Fibonacci数组。 #include void main() int i,f20=1,1,*p; /*通过*定义指针变量p/ p= /*数组f已通过指针方式进行了修改*/ ,【例5.5】有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 a数组已经按照从小到大的顺序排列好,加入数保持有序的方法是先将所有大于该数的元素后移一格,再将该数放到这些数的前面。,新元素X,【例5.5】程序如下: #include void main() int a1

15、1=1,4,6,9,13,16,19,28,40,100; int i,number; printf(“original array is:n“); for(i=0;i=0;i-) if(ainumber) ai+1=ai; else break; ai+1=number; for(i=0;i11;i+) printf(“%5d“,ai); printf(“n“); ,【例5.6】用筛选法求100之内的素数 素数: 只能被1与自身整除的大于1的正整数 筛选法: 一个数m如果不能被2到m-1中所有素数整除则是素数,否则将其筛除。 即从素数2开始筛除数组中所有整除数,再取下一个素数直到n,结束时数组中全是素数。,【例5.6】程序如下: #include #include “math.h“ #define N 100 void main() int i,j,num,aN+1; for(i=2;i=N;i+) ai=i; for(i=2;i=sqrt(N);i+) if(ai!=0)

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

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

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