数组.ppt_第1页
数组.ppt_第2页
数组.ppt_第3页
数组.ppt_第4页
数组.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 数组类型 问题 给一组数排序 这组数该如何存放呢 这些数据如何存放才便于排序 1 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 8 8 8 8 8 8 8 8 8 本章要点 掌握一维 二维数组的定义和引用方法 存储结构和初始化方法 掌握有关一维数组的有关算法掌握数组的运算 掌握字符串及字符串处理函数 主要内容 4 1一维数组4 3二维数组和多维数组 4 1一维数组 C语言为这些数据 提供了一种构造数据类型 数组 所谓数组就是一组具有相同数据类型的数据的有序集合 一个班学生的学习成绩一行文字一个矩阵 行列式这些数据的特点是 1 具有相同的数据类型2 使用过程中需要保留原始数据 1 一维数组的定义格式为 类型说明符数组名 常量表达式 例如 inta 10 它表示定义了一个整形数组 数组名为a 此数组有10个元素 一 一维数组的定义 说明 1 数组名定名规则和变量名相同 遵循标识符定名规则 合法标识符 数组运算符单目运算符优先级 1 左结合不能用 表示元素个数下标从0开始 相当于定义了 a 0 a 1 a 9 10个int型变量 2 在定义数组时 需要指定数组中元素的个数 方括弧中的常量表达式用来表示元素的个数 即数组长度 3 常量表达式中可以包括常量和符号常量 但不能包含变量 也就是说 C语言不允许对数组的大小作动态定义 即数组的大小不依赖于程序运行过程中变量的值 例如 intn scanf d 组的大小 数组说明中其他常见的错误 floata 0 数组大小为0没有意义 intb 2 3 不能使用圆括号 intk a k 不能用变量说明数组大小 2010年3月全国计算机等级考试二级笔试试卷C语言程序设计试题 D 注意 定义数组时用到的 数组名 常量表达式 和引用数组元素时用到的 数组名 下标 是有区别的 例如 inta 10 t a 6 二 一维数组元素的引用及存储 1 数组元素的引用方式数组名 下标 下标可以是整型常量或整型表达式 例如 a 0 a 5 a 7 a 2 3 注意 数组必须先定义 后使用只能逐个引用数组元素 不能一次引用整个数组 2 一维数组元素引用的程序实例 includevoidmain inti a 10 for i 0 i 0 i printf d a i printf n 运行结果如下 9876543210程序使a 0 到a 9 的值为0 9 然后按逆序输出 2010年3月全国计算机等级考试二级笔试试卷C语言程序设计试题 C 3 一维数组在内存中的存放 每个数据元素占用的字节数 就是基类型的字节数 可用sizeof求得 一个元素占4个字节 一维数组 floatmark 100 数组名表示内存首地址 是地址常量 对数组元素初始化的实现方法 1 在定义数组时对数组元素赋以初值 例如 inta 10 0 1 2 3 4 5 6 7 8 9 将数组元素的初值依次放在一对花括弧内 经过上面的定义和初始化之后 a 0 0 a 1 1 a 2 2 a 3 3 a 4 4 a 5 5 a 6 6 a 7 7 a 8 8 a 9 9 三 一维数组的初始化 数组不初始化 其元素值为随机数 例 includemain inta 5 inti for i 0 i 5 i printf d a i printf n 要求 元素的个数 10 例 includemain inta 5 1 2 3 4 5 6 inti for i 0 i 5 i printf d a i printf n 3 如果想使一个数组中全部元素值为0 可以写成 inta 10 0 0 0 0 0 0 0 0 0 0 或inta 10 0 不能写成 inta 10 0 10 2 可以只给一部分元素赋值 例如 inta 10 0 1 2 3 4 定义a数组有10个元素 但花括弧内只提供5个初值 这表示只给前面5个元素赋初值 后5个元素值为0 它的含义是第一个元素初始化为0 而不对十个元素的初始化 4 在对全部数组元素赋初值时 由于数据的个数已经确定 因此可以不指定数组长度 例如 inta 5 1 2 3 4 5 也可以写成inta 1 2 3 4 5 inta 10 1 2 3 4 5 只初始化前5个元素 后5个元素为0 C 例 用数组来处理 求解Fibonacci数列 程序实例 includevoidmain inti intf 20 1 1 Fibonacci数列公式 已知 a1 a2 1an an 1 an 2即 1 1 2 3 5 8 13 四 一维数组应用 for i 2 i 20 i f i f i 2 f i 1 for i 0 i 20 i if i 5 0 printf n printf 12d f i For循环结束 程序结束 运行结果如下 11235813213455891442333776109871597258441816765 程序举例2 用起泡法 也你为冒泡法 对10个数排序 由小到大 经过第一趟 共5次比较与交换 后 最大的数9已 沉底 然后进行对余下的前面5个数第二趟比较 如果有n个数 则要进行n 1趟比较 在第1趟比较中要进行n 1次两两比较 在第j趟比较中要进行n j次两两比较 例 38 49 76 97 13 97 27 97 30 97 13 76 76 76 27 30 13 65 27 65 30 65 13 13 49 49 30 49 27 38 27 38 30 38 65 程序实例 includevoidmain inta 10 inti j t printf input10numbers n for i 0 i 10 i scanf d for j 0 ja i 1 t a i a i a i 1 a i 1 t printf thesortednumbers n for i 0 i 10 i printf d a i printf n 程序结束 程序运行结果如下 input10numbers 10481265 76100 45123 thesortednumbers 76 4501481265100123 例 用简单选择法对10个数排序 排序过程 1 首先通过n 1次比较 从n个数中找出最小的 将它与第一个数交换 第一趟选择排序 结果最小的数被安置在第一个元素位置上 2 再通过n 2次比较 从剩余的n 1个数中找出关键字次小的记录 将它与第二个数交换 第二趟选择排序 3 重复上述过程 共经过n 1趟排序后 排序结束 例 初始 49386597761327 i 1 13 一趟 13 386597764927 i 2 27 38 六趟 132738496576 97 49 Ch5 201 c includemain inta 11 i j k x printf Input10numbers n for i 1 i 11 i scanf d 思考 以上的算法是按升序排列 若要按降序排列程序应该怎么改 例 将数组中元素左 右 移m位 例 删除数组的一个 或n个 元素 例 计算多项式 例 数制转换程序 4 3二维数组和多维数组 一 二维数组的定义 二维数组定义的一般形式为类型说明符数组名 常量表达式 常量表达式 例如 定义a为3 4 3行4列 的数组 b为5 10 5行10列 的数组 如下 floata 3 4 b 5 10 不能写成floata 3 4 b 5 10 注意 我们可以把二维数组看作是一种特殊的一维数组 它的元素又是一个一维数组 例如 可以把a看作是一个一维数组 它有3个元素 a 0 a 1 a 2 每个元素又是一个包含4个元素的一维数组 二维数组理解 每个元素a i 由包含4个元素的一维数组组成 二维数组a是由3个元素组成 二维数组中的元素在内存中的排列顺序是 按行存放 即先顺序存放第一行的元素 再存放第二行的元素 二维数组在内存中的存放 下图表示对a 3 4 数组存放的顺序 地址值数组元素 b 0 0 b 0 1 b 0 2 b 1 0 b 1 1 b 1 2 b 2 0 b 2 1 b 2 2 3000H3002H3004H3006H3008H300AH300CH300EH3010H 例如 整型数组b 3 3 1 2 3 4 5 6 7 8 9 123 456 789 例 若有定义语句 inta 3 6 按在内存中的存放顺序 a数组的第10个元素是 2007年9月全国计算机等级考试二级笔试原题 A a 0 4 B a 1 3 C a 0 3 D a 1 4 二维数组元素的表示形式为 数组名 下标 下标 例如 a 2 3 下标可以是整型表达式 如a 2 1 2 2 1 数组元素可以出现在表达式中 也可以被赋值例如 b 1 2 a 2 3 2 二 二维数组的引用 常出现的错误有 inta 3 4 定义a为3 4的数组 a 3 4 3 在使用数组元素时 应该注意下标值应在已定义的数组大小的范围内 可以用下面4种方法对二维数组初始化 数据类型数组名 常量表达式1 常量表达式2 初始化数据 分行给二维数组赋初值 例如 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 可以将所有数据写在一个花括号内 按数组排列的顺序对各元素赋初值 例如 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 可以对部分元素赋初值 例如 inta 3 4 1 5 9 100050009000 也可以对各行中的某一元素赋初值 如inta 3 4 1 0 6 0 0 11 1000060000011 100056000000 也可以只对某几行元素赋初值 如 inta 3 4 1 5 6 如果对全部元素都赋初值 则定义数组时对第一维的长度可以不指定 但第二维的长度不能省 例如 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 它等价于 inta 4 1 2 3 4 5 6 7 8 9 10 11 12 在定义时也可以只对部分元素赋初值而省略第一维的长度 但应分行赋初值 例如 inta 4 0 0 3 0 10 0030000001000 2010年3月全国计算机等级考试二级笔试试卷C语言程序设计试题 C 三 二维数组程序举例 例 将一个二维数组行和列元素互换 存到另一个二维数组中 矩阵转置 includevoidmain inta 2 3 1 2 3 4 5 6 intb 3 2 i j printf arraya n for i 0 i 1 i for j 0 j 2 j printf 5d a i j b j i a i j printf n printf arrayb n for i 0 i 2 i for j 0 j 1 j printf 5d b i j printf n 程序结束 运行结果如下 arraya 123456arrayb 142536 例 有一个3 4的矩阵 要求编程序求出其中值最大的那个元素的值 以及其所在的行号和列号 N S流程图表示算法如下 程序 includevoidmain inti j row

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论