C语言 数组 讲解

上传人:资****亨 文档编号:129863382 上传时间:2020-04-23 格式:PPT 页数:87 大小:936KB
返回 下载 相关 举报
C语言 数组 讲解_第1页
第1页 / 共87页
C语言 数组 讲解_第2页
第2页 / 共87页
C语言 数组 讲解_第3页
第3页 / 共87页
C语言 数组 讲解_第4页
第4页 / 共87页
C语言 数组 讲解_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《C语言 数组 讲解》由会员分享,可在线阅读,更多相关《C语言 数组 讲解(87页珍藏版)》请在金锄头文库上搜索。

1、 17 例求一个班100个学生的平均成绩 然后统计高于平均分的人数 使用简单变量和循环结构相结合的方法求平均成绩 aver 0 for i 1 i 100 i scanf f 17 若要统计高于平均分的人数 则无法实现 mark是一个简单变量 存放的是最后一个学生的成绩 用已有知识解决方法 1 再重复输入成绩 带来两个问题 1 输入数据的工作量成倍增加 2 若本次输入的成绩与上次不同 则统计的结果不正确 2 使用100个变量mark1 mark2 mark99 mark100 17 分析 1 此100个变量均为学生成绩 表示同一类对象 2 数据类型相同 3 可以用序号区分不同的变量 解决此问题

2、的根本方法 引入数组 始终保持输入的数据 一次输入 多次使用 除了int float char等基本数据类型外 C语言还提供了构造数据类型 来满足不同应用的需要 构造数据类型是由基本数据类型按一定规则组成的 也称作 导出类型 构造数据类型包括数组 结构体 共用体 数组 array 能将具有相同类型的数据组合在一起 通常是用于处理批量数据 Anarrayisadatatypethatusessubscriptedvariablesandmakespossibletherepresentationofalargenumberofhomogeneousvalues 第4章数组和指针 数组的维数 数组

3、中能唯一确定数组元素的下标的个数称为数组的维数一维数组 只用一个下标就能区分数组中的不同元素的二维数组 要用两个下标才能区分数组中的不同元素 1 6一维数组3 4二维数组2 3 4三维数组inta 6 intb 3 4 intc 2 3 4 17 4 1一维数组4 1 1一维数组的定义与初始化 1 一维数组定义类型定义符数组名 整型常量表达式 例如 inta 6 数组名表示内存首地址 是地址常量 编译时系统分配连续内存内存字节数 数组维数 sizeof 元素数据类型 数组a在内存占24字节 6 4字节 Aone dimensionalarraydeclarationisatypefollowe

4、dbyanidentifierwithabracketedconstantintegralexpression Thevalueoftheexpression whichmustbepositive isthesizeofthearray Itspecifiesthenumberofelementsinthearray Thearraysubscriptscanrangefrom0tosize 1 Thelowerboundofthearraysubscriptsis0andtheupperboundissize 1 17 4 1 1一维数组的定义与初始化 例如 floatscore 50 c

5、harname 20 注意 不能用变量定义数组的长度 floatscore n 当定义数组语句中不同时给变量赋值时 方括号内不得为空 inta 数组一旦定义 数组的大小就不能再改变 常用的办法是用符号常量来指定元素个数 definesize50floatscore size 17 4 1 1一维数组的定义与初始化 2 一维数组初始化类型定义符数组名 常量 值1 值2 值n 例如 inta 6 1 2 3 4 5 6 inta 1 2 3 4 5 6 两者等价于 a 0 1 a 1 2 a 2 3 a 3 4 a 4 5 a 5 6 例如 inta 6 1 2 等价于 a 0 1 a 1 2 a

6、 2 0 a 3 0 a 4 0 a 5 6 intc 10 0 将0赋给c 0 c 9 inta 1 2 等价于 a 0 1 a 1 2 17 4 1 2一维数组元素的引用与操作 1 数组元素的引用数组名 下标 注意 1 数组元素的下标从0开始 2 引用数组元素时 只能单个引用 不能一次引用整个数组inta 6 a 3 4 5 6 7 a 6 3 4 5 6 7 3 下标不要超出数组的范围 否则导致错误的程序结果 2 数组的赋值可以在定义数组时对数组中的全部变量或部分变量赋值 即数组的初始化 可以在语句中为变量赋值 利用循环依次为每个数组元素赋值或输入值 4 1 2一维数组元素的引用与操作

7、main inti a 5 for i 0 i 5 i a i i 用循环结构直接对数组赋初值for i 0 i 5 i printf d a i printf n 运行结果为 0 1 2 3 4 用交互的循环结构对数组赋初值 main inti a 5 for i 0 i 5 i printf a d i scanf d 例 定义长度为10的整型类型一维数组并完成以下功能 从键盘输入10个整数 分别存放在10个数组元素中 输出数组中的各元素值 按逆序输出数组中的各元素值 main inti a 10 for i 0 i 0 i printf 4d a i printf n 应用举例 下标越界

8、 差一错误off by oneerror 在C语言中 有N个元素的数组其元素下标的允许取值范围为0到N 1 不存在下标为N的元素 例如这段代码本意是要设置数组a中的10个元素均为0 但通常编译器按内存递减方式分配内存 使得内存中a 9 之后的4个字节分配给i 本来计数器i的值为10 循环体内将并不存在的a 10 设为0 实际是将i值设为0 就陷入死循环 main inti a 10 for i 1 i 10 i a i 0 printf d a i 4 1 3数组应用1 比较法排序 由键盘输入10个数 按由小到大排序输出解题方法 将10个数存入数组a将a 0 与a 1 a 2 a 9 依次比较

9、 哪个元素的值比a 0 小 就将它与a 0 的值交换 这样就将最小的数送到了a 0 中 再将a 1 与a 2 a 3 a 9 依次比较 哪个元素的值比a 1 小 就将它与a 1 的值交换 这样就将最小的数送到了a 1 中 重复以上步骤 对于n个数 比较排序法的总运行次数为 n 1 n 2 3 2 1 n n 1 2 17 1 比较法排序 1 比较法排序 includemain inti j a 10 srand time 0 for i 0 ia j a i a j a i a j for i 0 i 10 i printf 4d a i 17 2 冒泡法排序 是一种交换类排序方法 它是通过相

10、邻数据元素的交换逐步将线性表变成有序 首先将a 0 与a 1 a 1 与a 2 a 2 与a 3 a n 2 与a n 1 相邻两个数进行比较 若为逆序 比如a 0 a 1 则两者交换 这样就将将最大的数放在a n 1 中 再将a 0 a 1 a n 2 这n 1个数进行同样的相邻两数比较 若为逆序则两者交换 这样就将这n 1个数中最大的数被放在a n 2 中 重复以上步骤 经过n 1趟比较交换完成冒泡法排序 17 用冒泡法排序将10个整数按从小到大的次序排列出来 2 冒泡法排序 17 include defineN10 数据的个数main inta N 5 12 29 47 9 18 13

11、50 38 2 inti j k t for i 0 ia j 1 t a j a j a j 1 a j 1 t printf n最后的排序结果 n for i 0 i N i printf 5d a i 2 冒泡法排序 数组应用II 插入 向一个有序数组中插入一个数字 插入后不改变原有顺序 插入数字前 插入数字后 17 方法1 找到插入点后再移位 从前向后循环 从第1个元素开始依次将数组元素与要插入的数x比较 当x i j a j 1 a j a i x 插入数据后退出整个循环break 数组应用II 插入 17 方法2 边找插入点边移位 从后向前循环 直接从最后1个元素开始 将其与要插入

12、的数x比较 如果xx 因此x要赋值给a i 1 从最后1个元素开始 依次将要插入的数与每个元素比较for i 8 i 0 i 如果要插入的数比元素值小 则该元素直接向后移位if x a i a i 1 a i elsebreak 表示找到插入点 退出循环 a i 1 x 插入数据 数组应用II 插入 数组应用III 不改变顺序 删除指定的数字 main inti j del 0 inta 10 1 2 3 4 5 6 7 8 9 10 x 5 for i 0 i 10 i printf 4d a i putch n for i 0 i 10 del i 删除后数组的容量减小一if x a i

13、for j i j 10 j a j a j 1 i 还原到删除位置 以处理连续删除del for i 0 i 10 del i printf 4d a i 删除前 12345578910删除后 123478910 二分法检索 在序列x 中检索y的位置 前提 有序数列 以递增序为例 原理 等分区间 若y小于中间数 则取左半边 否则取右半边 再等分 再比较 例 对于区间 a b 等分为若y x k 则位置为k若yx k 则取新区间 k 1 b 即a k 1 数组应用IV 二分查找 检索 二分法查找递增序列 main intx 10 34 56 78 87 88 90 101 112 520 88

14、8 inty i k a 0 b 9 for i 0 ib printf ERROR elseprintf nx d d n k x k getch 17 4 2二维数组4 2 1二维数组的定义和初始化 1 定义需要两个下标才能标识数组中某个元素的位置 也称为矩阵 Useatwo dimensionalarrayiftwootheridentifiersareneededtodeterminethevalueofinterest 定义格式为 类型定义符数组名 常量表达式1 常量表达式2 列数 行数 inta 2 3 逻辑结构 存储结构 17 4 2 1二维数组的定义和初始化 2 二维数组的初始

15、化和引用两种初始化方式 按行初始化 每一对花括号对应一行的元素 按存放顺序初始化 按内存中的存放顺序将初始值分别赋值给对应的元素 inta 2 3 1 2 3 4 5 6 inta 2 3 1 2 3 4 5 6 inta 3 1 2 3 4 5 6 17 4 2 1二维数组的定义和初始化 intd 3 4 1 2 3 4 5 6 intd 4 1 2 3 4 5 6 intd 3 4 1 0 0 0 2 3 0 0 4 5 6 intd 4 1 0 0 0 2 3 0 0 4 5 6 inte 3 4 0 0 0 1 0 0 2 3 0 4 5 6 inte 4 0 0 0 1 0 0 2

16、3 0 4 5 6 inte 3 4 0 0 0 1 0 0 2 3 0 4 5 6 17 4 2 1二维数组的定义和初始化 3 二维数组在内存中的存放M行N列的二维数组a a i j 的位置公式为 i N j 1数组元素a i j 存储映射关系为 a i j a 0 N i j Realcomputermemoryhasonlyonedimension i e eachlocationisidentifiedwithonlyonecomponentofaddress 因此 二维数组元素可用它相对数组首元素 0 0 位置的偏移量来表示 称为存储映射关系storagemapping 对二维数组元素的操作除了用二重循环外 还可以用一重循环实现 InC oranyotherlanguagesupportingarrayswithdimensionsizesgreaterthanone two dimensionalarrayssimulatetheeffectofusingtwocomponentsofaddress Todothis thearrayismappedintoconsecut

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

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

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