300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言指针与一维数组PPT C语言第5章指针和一维数组.ppt

c语言指针与一维数组PPT C语言第5章指针和一维数组.ppt

时间:2020-11-05 06:27:16

相关推荐

c语言指针与一维数组PPT C语言第5章指针和一维数组.ppt

C语言第5章指针和一维数组.ppt

/11/5,第5章 指针与一维数组,软件学院计算机科学与技术教研室 冯海文 fhw19770704,/11/5,5.1 指针的概念与运算,C语言继承了高级语言的内存管理机制,但也还给了编程者一定程度的自主权。,汇编语言程序里使用的数据存放在内存的什么位置等需要编程者自己决定。,权限大,复杂和危险,高级语言不允许编程者直接操作内存,由系统决定内存单元的大小以及在内存区中的位置,安全,权限小,钥匙指针,/11/5,5.2 指针做函数的参数,第4章的函数参数可以是整数、浮点数和字符,可以是指针么,答案是可以。,要点, 参数对应,形参和实参都是指针,基类型一致,例 53 函数的指针参数。 void f(int*p) Printf(“P”,p); void main( ) int x; float y; f( ,/11/5,5.2 指针做函数的参数,指针做函数的参数的作用,传递地址。,要点, 利用指针做函数的参数能实现形参影响实参的作用。,用TurboC举例利用函数传递指针实现交换两个变量的值。,/11/5,5.2 指针做函数的参数,要点, 利用指针做函数的参数能实现返回多个返回值的功能。,用TurboC举例编写一个函数返回一个数的平方和立方。,通过return最多能返回一个值,/11/5,5.3 一维数组,定义变量解决了个别数据的存储问题,当有大量的数据需要存储时应如何处理呢,答案是定义数组。, 数组是存储同一种类型数据的有序集合。定义一个数组可以替代定义大量的变量,从而降低程序设计的复杂性。, 在后续的C、Java等语言中,还有其它的解决大量数据的存储工具,如vector向量、list列表和queue队列等。,/11/5,一维数组的定义,5.3 一维数组,类型符 数组名元素个数;,char a10;,要点,数组名 一个合法的标识符,类型符 说明元素的类型,元素个数 常量表达式,存储属性 可以用auto、static、 extern修饰,一维数组的定义,语法,/11/5,5.3 一维数组,一维数组的引用,一维数组的引用,double a8; 元素为a0a7,数组名下标;,a8,1. 元素表示,2. 数组元素是普通变量,便于循环操作。 数组元素总是占用连续的内存区。,a3、a5都是double变量; a2为变量的地址。,语法,/11/5,5.3 一维数组,一维数组的引用,include void main int a10,k; fork0; k10; k scanf“d”, ,/11/5,5.3 一维数组,一维数组的引用,C语言不做数组边界检查,是常见的严重错误之一。,int b10; b10 3;超界的数组,x b9 b8 b7 .,b10 b10xX很生气,后果很严重X我的家被b10占了,3. 数组边界,/11/5,定义时的初始化,5.3 一维数组,定义时的初始化,类型 数组名长度 值1,值2值n;,语法,形式,按顺序对元素赋以初值。 int a8 2,5,6,9,4,2,3,9; char b5H,e,l,l,o;,不完全初始化。 int a8 2,5,6,9;,由系统自测数组长度。 int a5 -1,0,1,3,4; int a -1,0,l,3,4;,a6 int a50;,/11/5,5.3 一维数组,定义时的初始化,问题在未初始化时,每个元素的值是多少 int a5;,include void main int a3 1, 2, i, j; fori0; i3; i forj0; j3; j ai aj1; printf“nd”, a1; ,/11/5,5.3 一维数组,一维数组应用示例,一维数组应用示例,通常,数组不能作为整体使用,只能逐个访问其元素。 数组元素的下标表示为利用循环语句来访问数组带来了便利。,常识,/11/5,5.3 一维数组,一维数组应用示例,从键盘接收10个浮点数,计算并输出它们的最大值和最小值。例5.9,伪程序描述,include void main 定义一个长度为10的一维数组; 定义临时最大、最小值变量max和min; 循环输入10个数,保存到数组; fork0; k10; k 比较并更新临时最大最小元素; 输出结果; ,/11/5,5.3 一维数组,一维数组应用示例,梗概,用选择排序法将10个数按由小到大的次序排序。例5.10,对n个元素做n-1次扫描处理 第1次扫描通过n-1次比较,从n个数据中找出最小元素,将它与第1个元素交换; 第2次扫描通过n-2次比较,从后n-1个数据中找出最小n个元素中的次小元素元素,将它与第2个元素交换; . 第n-1次扫描在最后2个元素中找出最小元素并交换到首位置。排序结束。 显然,需要2层循环来实现。,/11/55.3 一维数组,一维数组应用示例,过程演示,初始49 38 65 97 76 13,结果13 38 49 65 76 97,13,38,49,65,76,/11/5,5.3 一维数组,一维数组应用示例,伪程序描述,include void main 定义数组a和相关变量; 循环输入数组元素值; fork0; kn-1; k 找akan-1中的 最小元素下标min; 若需要,交换ak与amin; 输出数组元素排序结果; ,/11/5,5.4 数组与指针的关系,用指针操纵一维数组,要点,数组元素在内存中连续存放,知道第一个元素的地址就可以顺次得到其它元素地址,实现对所有数组元素的间接访问。,示例,double a10; 第一个元素变量a0 第一个元素地址a0,第k个元素变量a0k 第k个元素间接引用*a0k,ak,*ak,/11/5,5.4 一维数组与指针的关系,用指针操纵一维数组,输入示例,fork0; k10; k scanf“lf”, 用指针变量double* p ,/11/5,5.4 一维数组与指针的关系,用指针操纵一维数组,输出示例fork0; k10; k printf“lf”, ak; fork0; k10; k printf“lf”, *,double* p ,/11/5,数组名代表指针常量,5.4 一维数组与指针的关系,数组名代表指针常量,要点,C语言对一维数组名有如下约定 数组名代表一个指针; 指针指向数组的第一个元素; 基类型数组元素类型。,思考,double a10; 定义数组,a是指向a0的指针,基类型为double。因此,a与a0含义、用法完全相同,但书写简单。,/11/5,5.4 一维数组与指针的关系,数组名代表指针常量,示例,double a 4, 2, 3, 9; fork0; k4; k scanf“lf”, ,double* p a; fork0; k4; k printf“lf”, ak;,问题为什么不使用*a,/11/5,5.4 一维数组与指针的关系,数组名代表指针常量,不能采用*a的原因是a是常量而非变量,这是容易被忽略的问题。,典型错误,a a a *a,重点问题,问题*a 5与a 5有何不同,/11/5,5.4 一维数组与指针的关系,数组名代表指针常量,小节,一个量的多种表示法,double a10, *p a;指向数组中第k个元素的指针,ak、a0k、ak、pk数组中第k个元素,ak、*a0k、*ak、*pk、ak0,/11/5,指针与数组的一致性,5.4 一维数组与指针的关系,指针与数组的一致性,相同写法,指针和数组都可以采用下标引用方法和间接引用方法。,int a3; int *p a; a1 2; *a1 2; p1 2; *p1 2;,强调,在p指向数组a时,a与p可以使用同样的形式表示地址和元素。 p是变量,值可变,但a是常量,值不可变。,/11/5,5.4 一维数组与指针的关系,指针与数组的一致性,在一个数组 a中查找一个指定的值 x是否存在,若存在则删除数组中第一次出现的对应元素,若不出现则什么也不做。例5.11,查到后,p指向中间某处,图 利用指针查找时的位置关系,/11/5,5.4 一维数组与指针的关系,指针与数组的一致性,伪程序描述,void main 定义数组a和相关变量x等; 输入数组元素和x的值; fork0; kn; k ifak x 删除元素ak; 输出数组元素; ,问题字符串时如何删除,/11/5,5.4 一维数组与指针的关系,指针与数组的一致性,小节,何时使用指针操纵数组, 在连续处理一个数组的元素时,可以定义一个指针变量p并赋以数组的首地址,利用*p形式访问数组元素,比直接使用数组下标更快。, 向函数传递数组时使用指针。,/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,传递一维数组的首地址和长度,要点,传递的是数组的首地址,数组是连续存放,通过首地址能够访问数组中每一个元素.,/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,形参与实参的一致性,形参,1直接按照数组定义方式 float x10 2)系统不做边界检查,省略长度 float x 3)传递的是指针,指针和数组通用 float *x;,实参,数组首地址 float a10; 1数组名是首地址 a 2)首地址 a0,形参和实参可以同名,/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,示例,includestdioh int funint x ,int n int i,rtl; for(i0;in;i) rt(xi ) return rt; void main() int a2,3,4,5,6,7,8,9; printf(“nd”,fun(a,3; ,形参的三种写法,数组下标法,/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,一维数组做函数参数的思考,要点,可以传递多个参数,上面的例子,可以得到多个返回值,利用return最多能得到一个返回值,传递一个指针能实现返回一个基类型数据,示例利用数组返回一个数二次方、三次方、10次方,/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,示例,二分法检索,查找过程每次将待查记录所在区间缩小一半 适用条件采用顺序存储结构的有序表 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low1,highn,midlowhigh/2 让k与mid指向的记录比较 若krmid.key,查找成功 若krmid.key,则lowmid1 重复上述操作,直至lowhigh时,查找失败,/11/5,算法描述Ch7_2.c,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。