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

上传人:max****ui 文档编号:8614791 上传时间:2020-03-30 格式:PPT 页数:34 大小:1.73MB
返回 下载 相关 举报
C语言第5章指针和一维数组.ppt_第1页
第1页 / 共34页
C语言第5章指针和一维数组.ppt_第2页
第2页 / 共34页
C语言第5章指针和一维数组.ppt_第3页
第3页 / 共34页
点击查看更多>>
资源描述
2020 3 30 第5章指针与一维数组 软件学院计算机科学与技术教研室冯海文fhw19770704 2020 3 30 5 1指针的概念与运算 C语言继承了高级语言的内存管理机制 但也还给了编程者一定程度的自主权 汇编语言程序里使用的数据存放在内存的什么位置等需要编程者自己决定 权限大 复杂和危险 高级语言不允许编程者直接操作内存 由系统决定内存单元的大小以及在内存区中的位置 安全 权限小 钥匙 指针 2020 3 30 5 2指针做函数的参数 第4章的函数参数可以是整数 浮点数和字符 可以是指针么 答案是可以 要点 参数对应 形参和实参都是指针 基类型一致 例5 3 函数的指针参数 voidf int p Printf P p voidmain intx floaty f 2020 3 30 5 2指针做函数的参数 指针做函数的参数的作用 传递地址 要点 利用指针做函数的参数能实现形参影响实参的作用 用TurboC举例 利用函数传递指针实现交换两个变量的值 2020 3 30 5 2指针做函数的参数 要点 利用指针做函数的参数能实现返回多个返回值的功能 用TurboC举例 编写一个函数返回一个数的平方和立方 通过return最多能返回一个值 2020 3 30 5 3一维数组 定义变量解决了个别数据的存储问题 当有大量的数据需要存储时应如何处理呢 答案是定义数组 数组是存储同一种类型数据的有序集合 定义一个数组可以替代定义大量的变量 从而降低程序设计的复杂性 在后续的C Java等语言中 还有其它的解决大量数据的存储工具 如vector 向量 list 列表 和queue 队列 等 2020 3 30 一维数组的定义 5 3一维数组 类型符数组名 元素个数 chara 10 要点 数组名一个合法的标识符 类型符说明元素的类型 元素个数常量表达式 存储属性可以用auto static extern修饰 一维数组的定义 语法 2020 3 30 5 3一维数组 一维数组的引用 一维数组的引用 doublea 8 元素为a 0 a 7 数组名 下标 a 8 1 元素表示 2 数组元素是普通变量 便于循环操作 数组元素总是占用连续的内存区 a 3 a 5 都是double变量 a 2 为变量的地址 语法 2020 3 30 5 3一维数组 一维数组的引用 includevoidmain inta 10 k for k 0 k 10 k scanf d 2020 3 30 5 3一维数组 一维数组的引用 C语言不做数组边界检查 是常见的严重错误之一 intb 10 b 10 3 超界的数组 xb 9 b 8 b 7 b 10 b 10 x X很生气 后果很严重 X 我的家被b 10 占了 3 数组边界 2020 3 30 定义时的初始化 5 3一维数组 定义时的初始化 类型数组名 长度 值1 值2 值n 语法 形式 按顺序对元素赋以初值 inta 8 2 5 6 9 4 2 3 9 charb 5 H e l l o 不完全初始化 inta 8 2 5 6 9 由系统自测数组长度 inta 5 1 0 1 3 4 inta 1 0 l 3 4 a 6 inta 5 0 2020 3 30 5 3一维数组 定义时的初始化 问题 在未初始化时 每个元素的值是多少 inta 5 includevoidmain inta 3 1 2 i j for i 0 i 3 i for j 0 j 3 j a i a j 1 printf n d a 1 2020 3 30 5 3一维数组 一维数组应用示例 一维数组应用示例 通常 数组不能作为整体使用 只能逐个访问其元素 数组元素的下标表示为利用循环语句来访问数组带来了便利 常识 2020 3 30 5 3一维数组 一维数组应用示例 从键盘接收10个浮点数 计算并输出它们的最大值和最小值 例5 9 伪程序描述 includevoidmain 定义一个长度为10的一维数组 定义临时最大 最小值变量max和min 循环输入10个数 保存到数组 for k 0 k 10 k 比较并更新临时最大最小元素 输出结果 2020 3 30 5 3一维数组 一维数组应用示例 梗概 用选择排序法将10个数按由小到大的次序排序 例5 10 对n个元素做n 1次扫描处理 第1次扫描 通过n 1次比较 从n个数据中找出最小元素 将它与第1个元素交换 第2次扫描 通过n 2次比较 从后n 1个数据中找出最小 n个元素中的次小元素 元素 将它与第2个元素交换 第n 1次扫描 在最后2个元素中找出最小元素并交换到首位置 排序结束 显然 需要2层循环来实现 2020 3 30 5 3一维数组 一维数组应用示例 过程演示 初始 493865977613 结果 133849657697 13 38 49 65 76 2020 3 30 5 3一维数组 一维数组应用示例 伪程序描述 includevoidmain 定义数组a和相关变量 循环输入数组元素值 for k 0 k n 1 k 找a k a n 1 中的最小元素下标min 若需要 交换a k 与a min 输出数组元素 排序结果 2020 3 30 5 4数组与指针的关系 用指针操纵一维数组 要点 数组元素在内存中连续存放 知道第一个元素的地址就可以顺次得到其它元素地址 实现对所有数组元素的间接访问 示例 doublea 10 第一个元素 变量 a 0 第一个元素地址 a 0 第k个元素 变量 a 0 k第k个元素间接引用 a 0 k a k a k 2020 3 30 5 4一维数组与指针的关系 用指针操纵一维数组 输入示例 for k 0 k 10 k scanf lf 用指针变量 double p 2020 3 30 5 4一维数组与指针的关系 用指针操纵一维数组 输出示例 for k 0 k 10 k printf lf a k for k 0 k 10 k printf lf double p 2020 3 30 数组名代表指针常量 5 4一维数组与指针的关系 数组名代表指针常量 要点 C语言对一维数组名有如下约定 数组名代表一个指针 指针指向 数组的第一个元素 基类型 数组元素类型 思考 doublea 10 定义数组 a是指向a 0 的指针 基类型为double 因此 a与 a 0 含义 用法完全相同 但书写简单 2020 3 30 5 4一维数组与指针的关系 数组名代表指针常量 示例 doublea 4 2 3 9 for k 0 k 4 k scanf lf double p a for k 0 k 4 k printf lf a k 问题 为什么不使用 a 2020 3 30 5 4一维数组与指针的关系 数组名代表指针常量 不能采用 a 的原因是a是常量而非变量 这是容易被忽略的问题 典型错误 a a a a 重点问题 问题 a 5与a 5有何不同 2020 3 30 5 4一维数组与指针的关系 数组名代表指针常量 小节 一个量的多种表示法 doublea 10 p a 指向数组中第k个元素的指针 a k a 0 k a k p k 数组中第k个元素 a k a 0 k a k p k a k 0 2020 3 30 指针与数组的一致性 5 4一维数组与指针的关系 指针与数组的一致性 相同写法 指针和数组都可以采用下标引用方法和间接引用方法 inta 3 int p a a 1 2 a 1 2 p 1 2 p 1 2 强调 在p指向数组a时 a与p可以使用同样的形式表示地址和元素 p是变量 值可变 但a是常量 值不可变 2020 3 30 5 4一维数组与指针的关系 指针与数组的一致性 在一个数组a中查找一个指定的值x是否存在 若存在则删除数组中第一次出现的对应元素 若不出现则什么也不做 例5 11 查到后 p指向中间某处 图利用指针查找时的位置关系 2020 3 30 5 4一维数组与指针的关系 指针与数组的一致性 伪程序描述 voidmain 定义数组a和相关变量x等 输入数组元素和x的值 for k 0 k n k if a k x 删除元素a k 输出数组元素 问题 字符串时如何删除 2020 3 30 5 4一维数组与指针的关系 指针与数组的一致性 小节 何时使用指针操纵数组 在连续处理一个数组的元素时 可以定义一个指针变量p并赋以数组的首地址 利用 p 形式访问数组元素 比直接使用数组下标更快 向函数传递数组时使用指针 2020 3 30 5 5在函数间传递一维数组 5 5在函数间传递一维数组 传递一维数组的首地址和长度 要点 传递的是数组的首地址 数组是连续存放 通过首地址能够访问数组中每一个元素 2020 3 30 5 5在函数间传递一维数组 5 5在函数间传递一维数组 形参与实参的一致性 形参 1 直接按照数组定义方式floatx 10 2 系统不做边界检查 省略长度floatx 3 传递的是指针 指针和数组通用float x 实参 数组首地址floata 10 1 数组名是首地址a2 首地址 a 0 形参和实参可以同名 2020 3 30 5 5在函数间传递一维数组 5 5在函数间传递一维数组 示例 include stdio h intfun intx intn inti rt l for i 0 i n i rt x i returnrt voidmain inta 2 3 4 5 6 7 8 9 printf n d fun a 3 形参的三种写法 数组下标法 2020 3 30 5 5在函数间传递一维数组 5 5在函数间传递一维数组 一维数组做函数参数的思考 要点 可以传递多个参数 上面的例子 可以得到多个返回值 利用return最多能得到一个返回值 传递一个指针能实现返回一个基类型数据 示例 利用数组返回一个数二次方 三次方 10次方 2020 3 30 5 5在函数间传递一维数组 5 5在函数间传递一维数组 示例 二分法检索 查找过程 每次将待查记录所在区间缩小一半适用条件 采用顺序存储结构的有序表算法实现设表长为n low high和mid分别指向待查元素所在区间的上界 下界和中点 k为给定值初始时 令low 1 high n mid low high 2 让k与mid指向的记录比较若k r mid key 查找成功若kr mid key 则low mid 1重复上述操作 直至low high时 查找失败 2020 3 30 算法描述 Ch7 2 c
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!