




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组 本章主要介绍数组的定义及应用 包括一维数组 多维数组和字符数组以及字符串处理函数等 VisualC 程序设计基础 23 04 2020 2 数组 C 除提供基本数据类型外 还提供了构造数据类型 如数组 结构体 共同体和类 具有相同类型的若干个元素组成的有序集合称为数组 如 intscore 30 数组拥有一个公共的名字 称之为数组名 一个数组由若干个元素组成 数组内的每个元素的类型必须相同 它们在内存中占据的地址空间也是连续的 VisualC 程序设计基础 23 04 2020 3 一维数组的定义 一维数组定义的一般形式为 存储类别 数据类型数组名 常量表达式 如 autointa 10 或staticinta 10 则定义了一个包含十个元素的数组 分别为a 0 a 1 a 2 a 9 C 语言中数组的下标从0开始 为下标运算符 常量表达式 中不能包含变量 数组名的命名必须符合标识符的命名规则 VisualC 程序设计基础 23 04 2020 4 一维数组的定义 对于数组定义应注意以下几点 相同作用域内 数组名不能与其它变量名相同 例如 voidmain inta floata 10 是错误的 方括号中的常量表达式必须有确定的正整数值 不能为变量或实数 可以是符号常量 例如 defineFD5voidmain inta 3 2 b 7 FD 是合法的 但是下述说明方式是错误的 voidmain intn 5 inta n b 5 5 是错误的 允许在同一个类型说明中 说明多个数组和多个变量 例如 inta b c d k1 10 k2 20 VisualC 程序设计基础 23 04 2020 5 一维数组的初始化 1 一维数组的初始化 指在定义数组的同时 给数组元素赋值 如 inta 5 1 2 3 4 5 2 如果对全部数组元素赋初值 可以不指定数组长度 例如 inta 1 2 3 4 5 和inta 5 1 2 3 4 5 相同3 可以只给部分数组元素赋初值 例如 inta 10 0 1 2 3 4 表示只给a 0 a 4 5个元素赋值 而后5个元素自动赋0值 4 当将数组定义为全局数组或静态数组时 如不给数组赋初值 则元素的值全部为0 5 只能给元素逐个赋值 不能给数组整体赋值 例如 给数组元素全部赋1 只能写为 inta 5 1 1 1 1 1 而不能写为 inta 5 1 VisualC 程序设计基础 23 04 2020 6 一维数组的使用 只能逐个使用数组元素 而不能一次使用整个数组 例如 输出有10个元素的数组必须使用循环语句for i 0 i 10 i cout a i 而不能用一个语句输出整个数组 下面的写法是错误的 cout a 下面的程序也是错误的 inta 5 b 5 1 2 3 4 5 a b 同样 数组元素的赋值也只能逐个赋值 inta 3 a 0 1 a 1 2 a 2 3 或for inti 0 i 3 i a i i 1 VisualC 程序设计基础 23 04 2020 7 一维数组应用实例 选择法排序 VisualC 程序设计基础 例 把一组无序的数据 如15 8 4 13 6 1 放在数组a 0 a 5 中 要求将其按升序排序 结果应为1 4 6 8 13 15 a 0 a 1 a 2 a 3 a 4 a 5 初始状态 第1次 第2次 a 0 a 1 交换 a 0 a 2 交换 第3次 a 0 a 3 不交换 第4次 a 0 a 4 不交换 第5次 a 0 a 5 交换 23 04 2020 8 一维数组应用实例 选择法排序 VisualC 程序设计基础 经过第1轮循环后 找到了最小的数1 并将其放到了a 0 中 下面将找次小的数 并将其放到a 1 中 a 0 a 1 a 2 a 3 a 4 a 5 第1轮后 第1次 第2次 a 1 a 2 交换 a 1 a 3 不交换 第3次 a 1 a 4 交换 第4次 a 1 a 5 交换 第1轮比较结束后的状态 第2轮开始 23 04 2020 9 一维数组应用实例 选择法排序 VisualC 程序设计基础 经过第2轮循环后 找到了次小的数4 并将其放到了a 1 中 依此类推 经过5轮后即可完成排序工作 a 0 a 1 a 2 a 3 a 4 a 5 第5轮后最终结果为 for i 0 ia j temp a i a i a j a j temp 完成该选择法排序的程序段为 23 04 2020 10 一维数组应用实例 选择法排序 VisualC 程序设计基础 另一种快速的选择法排序算法为 a 0 a 1 a 2 a 3 a 4 a 5 初始状态 第1轮循环 第2轮循环 第3轮循环 第4轮循环 第5轮循环 将a 0 和最小的数a 5 交换 将a 1 和次小的数a 2 交换 下一步a 2 和a 4 交换 下一步a 3 和a 4 交换 23 04 2020 11 一维数组应用实例 选择法排序 在a 0 至a n 1 中找出一个最小值 假定是a t 把a t 与a 0 交换 使得a 0 最小 再在a 1 至a n 1 中找出一个最小值a t 把a t 与a 1 交换 使得a 1 最小依次类推 直到从a n 2 和a n 1 中找出最小值 VisualC 程序设计基础 一般情况下 对于N个数据的排序问题 该算法可描述为 for i 0 ia j t j if t i temp a i a i a t a t temp 23 04 2020 12 例 把一列无序数据 如15841361 放在数组a 0 a 5 中 要求按升序排列 一维数组应用实例 冒泡法排序 VisualC 程序设计基础 初始状态 第1次 a 0 a 1 交换a 0 和a 1 第2次 a 1 a 2 交换a 1 和a 2 第3次 a 2 a 3 交换a 2 和a 3 第4次 a 3 a 4 交换a 3 和a 4 第5次 a 4 a 5 交换a 4 和a 5 这是第1轮排序后的结果 最大的数沉到了最下面 小数则向上移动 23 04 2020 13 经过第1轮5次比较 找出了最大的数15并将其保存到a 5 中 其它数上浮 在第2轮比较中 将a 0 a 4 按前述方法进行4次交换后 可得到第2个比较大的数13 存放于a 4 中 依此类推 可得到排序结果 一维数组应用实例 冒泡法排序 VisualC 程序设计基础 第1轮 第2轮 第3轮 第4轮 第5轮 23 04 2020 14 一般的 对于N个数据的冒泡法排序 该算法可描述为 一维数组应用实例 冒泡法排序 VisualC 程序设计基础 a 0 与a 1 比较 若a 0 a 1 两数交换 然后a 1 与a 2 比较 重复上述步骤 结果大数沉底 小数上升 a n 1 中为最大的数 a 0 到a n 2 两两比较 依次类推 直到从a 0 和a 1 中找出最大值沉底 for i 0 ia j 1 t a j a j a j 1 a j 1 t 23 04 2020 15 二维数组的定义 格式 类型说明数组名 常量表达式1 常量表达式1 例如 inta 2 3 说明 定义了一个2行3列的二维数组 数组元素个数为 常量表达式1 常量表达式2 的值 即共有6个整型数据 在内存开辟了连续24个字节存储单元 数组每一维的下标都从0开始 对于二维数组 逻辑上可以把它看成是一个表格结构 第一个下标代表 行号 第二个下标代表列号 VisualC 程序设计基础 23 04 2020 16 二维数组的定义 在C 中 二维数组元素在内存中的存放方式为按行存放 称为行主顺序 C 语言把二维数组看成是一种特殊的一维数组 即由a 0 a 1 两个元素组成 而a 0 a 1 又是由一维数组组成 例如上例中数据在内存中的存放顺序为 a a 0 a 1 必须强调的是 a 0 a 1 不能当作下标变量使用 它们是数组名 不是一个单纯的下标变量 VisualC 程序设计基础 23 04 2020 17 多维数组的定义 对于三维数组来说 可以依据二维数组的定义方法来定义 如inta 2 3 4 其中第一个下标称为 页下标 第二个下标称为 行下标 第三个下标称为 列下标 这个三维数组在内存中同样要占据连续的内存空间 上面定义的三维数组在内存中将先放第0页中的数组元素 然后放第一页中的数组元素 每页中的元素还是按 行主顺序 存放 VisualC 程序设计基础 23 04 2020 18 二维 多维 数组的引用 对二维数组的引用可通过双重循环来实现 例如要引用a 3 4 数组中的元素 for i 0 i a i j 从键盘输入数据给数组元素 VisualC 程序设计基础 23 04 2020 19 二维 多维 数组的初始化 对二维数组进行初始化的方式有 1 分行赋初值例如 inta 2 3 1 3 5 2 4 6 2 按数组在内存中的排列顺序赋初值例如 inta 2 3 1 2 5 2 4 6 在对二维数组赋初值时 全部数据 可以省略对第一维长度的说明 这时第一维的长度由所赋初值的行数所决定 但第二维不能省略 例如 inta 2 3 1 3 5 2 4 6 可以表示为 inta 3 1 3 5 2 4 6 和inta 3 1 3 5 2 4 6 3 可以对部分元素赋初值例如 inta 2 3 1 2 或inta 2 3 1 0 4 则未赋初值的其余元素值自动为0 VisualC 程序设计基础 23 04 2020 20 二维 多维 数组实例 例 要求输出如下的杨辉三角 要求输出10行 11112113311464115101051161520156117213535217118285670562881193684126126843691 VisualC 程序设计基础 23 04 2020 21 数组和函数 数组可以作为函数的参数进行数据传送 数组用作函数参数有两种形式 一种是数组元素作函数参数 另一种是数组名作函数参数 数组元素作函数实参数组元素作为函数实参使用与普通变量作函数参数是完全相同的 在发生函数调用时 把作为实参的数组元素的值传送给形参 实现单向的值传送 VisualC 程序设计基础 23 04 2020 22 数组和函数 数组名作为函数参数1 数组名作函数参数时 要求形参和实参都必须是类型相同的数组 当形参和实参不一致时 即会发生错误 2 数组名作函数参数时 不是进行值的传送 而是地址的传送 也就是说把实参数组的首地址赋予形参数组名 形参数组名取得该首地址之后 也就等于有了实在的数组 实际上是形参数组和实参数组为同一数组 共同拥有一段内存空间 3 当用数组名作函数参数时 由于形参和实参为同一数组 因此当形参数组发生变化时 实参数组也随之变化 4 在函数形参表中 允许不给出形参数组最高维大小 VisualC 程序设计基础 23 04 2020 23 VisualC 程序设计基础 程序中的函数p 用于计算 主函数利用函数完成计算 intp inta intx intb inty intn inti s for i n i s returns intd 2 3 5 4 9 10 8 intv 7 6 3 2 5 1 8 9 3 4 intw 1 2 3 4 5 6 7 8 9 10 voidmain void cout ns1 cout ns2 a x i b y i i 0 s 0 p 1 d 2 v 8 p 3 v 4 w 10 23 04 2020 24 字符数组 字符数组 用于存放字符型数据的数组称为字符数组 它的定义形式和元素的引用方法与一般的数组相同 例如 charch 10 字符数组初始化 1 将字符逐个赋给数组中的各元素 如 charc 5 c h i n a 或 charc c h i n a 2 直接用字符串常量给数组赋值 如 charc 6 china 或者charc china 此时数组长度为6 系统自动在china的末尾加字符串结束标志 0 字符串结束标志 0 它占内存 但不计入串的长度 例如 cout pleaseinput10number 在执行cout函数时 每输出一个字符 则检测下一个字符是否为 0 若是则停止输出 VisualC 程序设计基础 23 04 2020 25 字符数组 字符数组的引用 1 可以引用字符数组里的单个元素 2 引用整个字符串例如 charc 5 cin c cout c 注意 用cin输入时 是以空格或回车作为字符串的结束的对二维 多维 数组的初始化charc 2 15 H o w a r e y o u I a m a s 或charc 15 Howareyou I amas 或charc 15 Howareyou I amas VisualC 程序设计基础 23 04 2020 26 字符数组的输入输出 VisualC 程序设计基础 逐个字符的输入输出 这种输入输出的方法 通常是使用循环语句来实现的 如 charstr 10 cout str i A A行将输入的十个字符依次送给数组str中的各个元素 定义 赋值 23 04 2020 27 字符数组的输入输出 VisualC 程序设计基础 把字符数组作为字符串输入输出 对于一维字符数组的输入 在cin中仅给出数组名 输出时 在cout中也只给出数组名 voidmain void chars1 50 s2 60 cout s1 cin s2 cout ns1 s1 cout ns2 s2 n 输入 abcdstring cin只能输入一个单词 不能输入一行单词 数组名 数组名 输出到 0 为止 23 04 2020 28 字符数组的输入输出 VisualC 程序设计基础 当要把输入的一行作为一个字符串送到字符数组中时 则要使用函数cin getline 这个函数的第一个参数为字符数组名 第二个参数为允许输入的最大字符个数 cin getline 数组名 数组空间数 chars1 80 cin getline s1 80 首先开辟空间 23 04 2020 29 字符数组的输入输出 VisualC 程序设计基础 voidmain void chars3 81 cout 输入一行字符串 cin getline s3 80 cout s3 s3 n 当输入行中的字符个数小于80时 将实际输入的字符串 不包括换行符 全部送给s3 当输入行中的字符个数大于80时 只取前面的80个字符送给字符串 定义 从键盘接收一行字符 输出到 0 为止 23 04 2020 30 字符串处理函数 C 语言的函数库中提供了一批用于处理字符串的函数 程序中可以通用这些函数来处理字符串 使用时应包含头文件 string h 1 字符串拷贝函数strcpy格式 strcpy 字符数组名1 字符数组名2或字符串 功能 把字符数组2或字符串复制到字符数组1要求 字符数组1原来的内容被覆盖掉了 因此字符数组1必须足够大到存放字符数组2或字符串 例如 charstr 10 strcpy str Hello 说明 该函数实质上是给字符串赋值的另一种形式 像str1 china 或str1 str2这样的表达式都是不合法的 VisualC 程序设计基础 23 04 2020 31 字符串处理函数 2 字符串连接函数strcat 注 catenate 连接 格式 strcat 字符数组名1 字符数组名2或字符串 功能 将两个字符串合并成一个字符串 合并后的字符串放在字符数组1中例 str1 20 string str2 function strcat str1 str2 结果 str1字符串为 stringfunction作用 该函数把str2所指字符串的内容连接到str1字符串的后面 自动删去str1字符串后的 0 为了进行这项操作 要求str1字符串后面有足够的空间来容纳str2字符串的内容 VisualC 程序设计基础 23 04 2020 32 程序中对两个字符串相等的判断不能使用下列语句 if str1 str2 字符串处理函数 3 字符串比较函数strcmp格式 strcmp 字符串1 字符串2 作用 对两个字符串自左向右按照各字符的ASCII进行比较 直到出现不同字符或者遇到 0 时退出比较 退出时 函数返回值为0 表示两个字符串相同 函数值为一正整数 表示字符串1 字符串2 这个值为两个字符串不相同字符的ASCII码值的差函数值为一负整数 表示字符串1 字符串2 VisualC 程序设计基础 而应为 if strcmp str1 str2 0 如果str1 str2是两个字符数组名 而且都赋了值 则下面的语句都是合法的 strcmp str1 str2 strcmp Japan China strcmp str1 China 23 04 2020 33 字符串处理函数 4 字符串比较函数strncmp格式 strncmp 字符数组名1或字符串1 字符数组名2或字符串2 n 功能 比较前n个字符的大小 若字符串长度小于n 则与strcmp函数相同 charc BASIC cc 10 BASICCPP strncmp cc c 5 结果为05 求字符串长度函数strlen格式 strlen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林油田第十二中学2025-2026学年度第一学期期初质量检测 九年级道德与法治试卷(含答案)
- 教师招聘之《幼儿教师招聘》考试黑钻押题带答案详解(培优a卷)
- 2025内蒙古呼伦贝尔农垦谢尔塔拉、特泥河、哈达图、浩特陶海农牧场有限公司招聘笔试题库及完整答案详解1套
- 2025年教师招聘之《幼儿教师招聘》题库综合试卷及答案详解【真题汇编】
- 2025年国际关系研究试题及答案
- 教师招聘之《小学教师招聘》模拟题库讲解附完整答案详解(夺冠系列)
- 演出经纪人之《演出经纪实务》自测题库及完整答案详解(全优)
- 2025年教师招聘之《幼儿教师招聘》综合提升测试卷附答案详解【典型题】
- 2025年教师招聘之《小学教师招聘》通关试卷提供答案解析(原创题)附答案详解
- 教师招聘之《幼儿教师招聘》综合提升试卷附参考答案详解(达标题)
- 计算机应用基础(Windows10+Office2016)(第3版) 课件 项目3、4 Windows10操作系统、管理计算机中的资源
- 油漆油墨配料岗位安全生产操作规程范文
- 公对公打款合同
- 商丘市金马药业有限公司年产60万件中成药品生产项目环境影响报告
- 员工上下班交通安全培训
- PTN原理、PTN设备和工程维护
- 钢结构分包单位考察文件(项目考察表及生产厂考察内容提示要点)
- 船舶管理-船舶的发展与种类课件
- “条块结合”、创新学校管理的实践与思考
- 纯电动汽车整车控制器(VCU)策略
- 商会入会申请书
评论
0/150
提交评论