[政史地]数组类型与指针类型-m课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[政史地]数组类型与指针类型-m课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 政史地 数组 类型 指针 _m 课件
- 资源描述:
-
1、C语言提供的基本数据类型,大致分为整型、实型、字符型等三大类C语言提供构造新类型的方法,可以在已有数据类型的基础上构造新的数据类型,这种新的类型称为构造类型,根据构造方法的不同分为数组、指针、结构、联合等四种 问题:假如现在班级里有问题:假如现在班级里有100个人,要求用个人,要求用C语言程序来语言程序来实现求这实现求这100个人的数学成绩之和,(个人的数学成绩之和,(想一想怎么写?)想一想怎么写?)使用数组的目的:使用数组的目的:为了解决这种大量同种类型数据的存储与使用问题为了解决这种大量同种类型数据的存储与使用问题 数组是由一系列同类型的元素(Element)所组成的集合,数组变量名就一个
2、数组中元素的数据类型可以是基本类型,也可以是构造类型,若元素的类型是整型则称为整型数组,若元素类型是结构体类型则称为结构体数组,若元素类型是指针类型则称为指针数组,若成员的类型是数组则称为二维数组(重点掌握)(重点掌握)当数组中元素的类型不是数组,而是基本类型,或者结构,指针等构造类型时,称为一维数组一维数组变量的定义的格式一维数组变量的定义的格式(掌握)(掌握)元素数据类型 数组变量名常量或数值表达式注意注意l常量的值表示了数组的大小即元素的个数,必须为正整型常量的值表示了数组的大小即元素的个数,必须为正整型(记住:这里数组的大小一定不能是个变量)(记住:这里数组的大小一定不能是个变量)。l
3、如果数组大小是个数值表达式的值是小数,一定先取整如果数组大小是个数值表达式的值是小数,一定先取整,int int a7/2 a7/2 即即 a3a3 l数组变量名需要符合标识符命名的要求,不能与已有的变量数组变量名需要符合标识符命名的要求,不能与已有的变量名或系统关键字相同。名或系统关键字相同。#include void main()int a5;int i;for(i=0;i5;i+)printf(please input the%d data:,i+1);scanf(%d,&ai);printf(n);for(i=0;i5;i+)printf(%dn,ai);void main()int
4、maxIndex=0;int a5=1,2,3,4,5;int i;for(i=0;i amaxIndex)maxIndex=i;printf(the maxIndex is%dn,maxIndex);printf(the array max value is%dn,amaxIndex);void main()int value;int a5=1,2,3,4,5;int i;int flag=0;scanf(%d,&value);for(i=0;i5;i+)if(value=ai)flag=1;break;if(flag=1)printf(exists);else printf(not exi
5、st);void main()int a5=1,2,3,4,5;int i=0;int j=4;int temp;while(i j)temp=ai;ai=aj;aj=temp;i+;j-;/下面内容请自行编写使用下面内容请自行编写使用for循环遍历输出数组的内容循环遍历输出数组的内容void main()int i,j,smallIndex=0;int temp;int a5=5,2,4,3,1;for(i=0;i4;i+)smallIndex=i;for(j=i+1;j5;j+)if(aj asmallIndex)smallIndex=j;temp=ai;ai=asmallIndex;as
6、mallIndex=temp;利用数组获得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);每个成员要有存储空间且每个成员可以通过下标找到存储空间的位置。分配连续的一块内存区域能够存放得下所有的元素,然后将数组成员按下标顺序连续存放,零号成员存放在这块内存区的最前面,所以数数组的实质是内存中一段连续的存储区域组的实质是内存中一段连续的存储区域,假设内存地
7、址为start,由于每个成员所占的存储空间大小是相同的,假设为m个字节,这时i号成员的内存地址就等于start+m*i。定义了一个定义了一个10个元素的个元素的int数组,占据的内存空间,数组,占据的内存空间,10*4个字节,每个字节,每4个字节空间就代表着一个元素个字节空间就代表着一个元素越界?越谁的界?当然是内存。一个变量存放在内存里,你想读的越界?越谁的界?当然是内存。一个变量存放在内存里,你想读的是这个变量的内存空间,结果却读过头了,很可能读到了另一个变是这个变量的内存空间,结果却读过头了,很可能读到了另一个变量的头上。这就造成了越界。量的头上。这就造成了越界。数组的访问越界问题,看如
8、下代码数组的访问越界问题,看如下代码:int arr10,i;for(i=1;i=10;i+)printf(“%d”,arri);这里访问数组的元素已经越界了!但是编译器不提示错误,即这里访问数组的元素已经越界了!但是编译器不提示错误,即编译器不进行数组访问越界的检查。但这明明是个错误,所以编译器不进行数组访问越界的检查。但这明明是个错误,所以一个隐秘的错误就包含到了你的程序中,这是非常可怕的事,当一个隐秘的错误就包含到了你的程序中,这是非常可怕的事,当程序运行起来后,有可能会出现莫名奇妙的错误。错误表现不定程序运行起来后,有可能会出现莫名奇妙的错误。错误表现不定有问题的代码有问题的代码为什么
9、数组访问越界会造成莫名其妙的错误?为什么数组访问越界会造成莫名其妙的错误?前面我们讲过数组的前面我们讲过数组的实质是一段连续的内存空间。然后,我们可以通过指定数组下标来访实质是一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存就不再是这个数组就不再是这个数组“份内份内”的内存。你访问的,将是其它变量的内存了。的内存。你访问的,将是其它变量的内存了。举个例子数组就像一排的宿舍,假设有举个例子数组就像一排的宿舍,假设有5间,你住在第间,你住在第2间;间;如果你晚上喝多了,回来
10、时进错了房间,只要你进的还是这如果你晚上喝多了,回来时进错了房间,只要你进的还是这5间,间,那倒不会有大事,可是若是你那倒不会有大事,可是若是你“越界越界”了。竟然一头撞入第了。竟然一头撞入第6间间这第这第6间会是什么?很可能它是走廊的尽头,结果你一头掉下楼,间会是什么?很可能它是走廊的尽头,结果你一头掉下楼,这在生活中很不幸,可对于程序倒是好事了,因为错误很直接这在生活中很不幸,可对于程序倒是好事了,因为错误很直接(类似直接死机),你很容易发现。可是,(类似直接死机),你很容易发现。可是,如果第如果第6间是?据我所知,第间是?据我所知,第6间可能是厕所,也可能是女生宿舍。间可能是厕所,也可能
11、是女生宿舍。所以数组访问下标越界问题,程序会表现出不可预知的错误。所以数组访问下标越界问题,程序会表现出不可预知的错误。这个问题:怎样解决?这个问题:怎样解决?注意:注意:p-2中的中的2是地址偏移量,表示是地址偏移量,表示p的内容的内容-2个元素大小的内存空间个元素大小的内存空间有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。a数组已经按照从小到大的顺序排列好,加入数保持有序的方法是先将所有大于该数的元素后移一格,再将该数放到这些数的前面。A数组X.一维数组实参采用地址传递方式,提供给形参的不是数组的所有元素值,而是一个简单的数组零号元素的地址。通过形参中的地址可以找到
12、一维数组实参的所有元素的存储空间,函数中可以直接访问这些元素空间。为了函数可以检查越界错误,可以将数组大小作为函数参数一并传递。形参定义方式可以是一维数组定义形式,也可以省略定义中的数组大小,还可以直接定义为指针类型,这三种方式含义是一样的。调用函数时提供的一维数组实参就是待传递数组的第一元素的地址,一般直接将数组名作为实参。编写一个函数实现将一维数组的内容倒置,该功能前面已进行过讲解,请自行写一下试一试【例【例5.8】编写一个自定义函数可以查找任意数组中是否存在一个特定数据。】编写一个自定义函数可以查找任意数组中是否存在一个特定数据。#include int search(int s10,i
展开阅读全文