




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数组 什么是数组 就是一组具有固定数目的 有序的 类型相同的数据的集合 根据数组下标的多少 数组可以分为一维数组和多维数组 例如 一个班级有30个学生 可以用g1 g2 g30代表学生的成绩 其中g是数组名 下标代表学生的序号 由于在C语言中无法表示下标 所以就引入了 表示下标 g 1 第1个学生的成绩g i 第i个学生的成绩等等 为标识数组中的每个元素 C语言对其进行编号 这个编号称之为数组元素下标 C语言规定下标从0开始 指定该数组的数据个数 用于访问的 具有相同的数据类型 在程序设计中相当于变量名的用法 一个数组就是一组连续的内存空间 用来保存数据 数组中的每一项称为一个元素 一 一维数组 1 定义及使用 类型说明符数组名 常量表达式 inta 10 任一种基本数据类型或构造数据类型 用户自定义的数组名字 其定名规则与变量名定名规则一样 都需遵循标识符定名规则 表示元素的个数 即数组长度 下标运算符单目运算符优先级 1 左结合不能用 注意 1 数组名不能与其它变量名相同 voidmain inta floata 10 一 一维数组 1 定义及使用 2 不能在方括号中用变量来表示元素的个数 但可以是符号常数或常量表达式 intn scanf d defineFD5voidmain inta 3 2 b 7 FD 一 一维数组 1 定义及使用 3 方括号中常量表达式表示数组元素的个数 如inta 5 数组a有5个元素 其下标从0开始 分别为a 0 a 1 a 2 a 3 a 4 4 允许在同一个类型说明中说明多个数组和多个变量 例如 inta b c d k1 10 k2 20 如果出现数组越界 编译系统没有提示的 一 一维数组 1 定义及使用 数组必须先定义 然后使用 数组元素的表示形式为 数组名 下标 C语言规定只能逐个引用数组元素而不能一次引用整个数组 可以是整型常量或整型表达式 一 一维数组 2 引用 全部初始化部分初始化使用输入函数scanf初始化使用表达式赋值 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 inta 10 0 1 2 3 a 0 0 a 1 1 a 2 2 a 3 3 a 4 0 a 5 0 a 6 0 a 7 0 a 8 0 a 9 0 inta 10 for inti 0 i 10 i scanf d inta 10 0 1 2 3 a 4 a 3 2 对全部数组元素赋初值时 数组长度可以省略 一 一维数组 3 初始化 一维数组元素的存储方式 inta 5 1 2 3 4 5 一维数组元素的存储方式 includevoidmain inta 5 0 1 2 3 4 for inti 0 i 5 i printf a d d 其地址是 d n i a i 数组名表示数组的起始地址 是一个地址常量 程序举例1 用选择排序法进行排序 选择排序法是编程中经常用的一种排序算法 具体如下 先将5个数中最小的数与a 0 对换 再将a 1 到a 4 中最小的数与a 1 对换 这样每比较一轮 找出一个未经排序的数中最小的一个 共比较4轮 inta 5 3 6 1 9 4 1 4一维数组程序举例 a 0 a 1 a 2 a 3 a 4 36194未排序的情况16394将5个数中最小的数1与a 0 对换13694将余下的4个数中最小的数3与a 1 对换13496将余下的3个数中最小的数4与a 2 对换13469将余下的2个数中最小的数6与a 3 对换 main inti j k t inta 5 3 6 1 9 4 for i 0 i sizeof a sizeof int 1 i k i for j i 1 j sizeof a j if a j a k k j if k i t a i a i a k a k t 容易出错的地方 数组的起始下标 最后一个元素的下标定义数组时不指定长度 动态数组 对数值型数组进行整体操作用scanf语句时 数组元素前应加 小结 一维数组的定义 初始化 引用 输入 输出概念 操作必须掌握数组中的所有元素 数据类型都一致数组名字代表数组的首地址 是一个常量数组元素具有和相同单个变量一样的属性 凡允许使用单个变量的地方均可以使用数组元素 二 二维数组 定义及使用 这儿只讨论二维数组 多维数组可由二维数组推导得出 二维数组定义的一般形式为 类型说明符数组名 常量表达式 常量表达式 第一常量表达式为行数 第二个为列数 inta 3 4 floata 3 4 b 5 10 错误 二维数组中的元素在内存中的排列顺序是 按行存放 即先顺序存放第一行的元素 再存放第二行的元素 二维数组在内存中的存放 下图表示对a 3 4 数组存放的顺序 inta 2 3 1 2 3 4 5 6 二 二维数组 存储方式 includevoidmain inta 2 3 1 2 3 4 5 6 i j for i 0 i 2 i for j 0 j 3 j printf 第a d d 元素 d 其地址为 d n i j a i j 二 二维数组 引用 二维数组的表示形式 数组名 下标 下标 注意 下标可以是整型表达式 如a 2 1 2 2 1 数组元素可以出现在表达式中 也可以被赋值b 1 2 a 2 3 2 在使用数组元素时 应该注意下标值应在已定义的数组大小范围内inta 3 4 a 3 4 5 严格区分在定义数组时用的a 3 4 和引用元素时的a 3 4 全部初始化部分初始化使用输入函数scanf初始化 inta 2 3 0 1 2 3 4 5 inta 2 3 0 1 2 3 4 5 a 0 0 0 a 0 1 1 a 0 2 2 a 1 0 3 a 1 1 4 a 1 2 5 inta 2 3 0 1 2 inta 2 3 0 1 a 0 0 0 a 0 1 1 a 0 2 2 a 1 0 0 a 1 1 0 a 1 2 0 inta 2 3 for inti 0 i 2 i for intj 0 j 3 j scanf d 对全部数组元素赋初值时 第一维的长度可以省略 二 二维数组 初始化 二 二维数组 程序举例 例3 一个学习小组有5个人 每个人有三门课的考试成绩 求全组分科的平均成绩和各科总平均成绩 二 二维数组 程序举例 例3 一个学习小组有5个人 每个人有三门课的考试成绩 求全组分科的平均成绩和各科总平均成绩 include defineN3 defineM5voidmain floatscore N M avg1 0 avg N sum N 0 inti j for i 0 i N i for j 0 j M j printf 第 d门课 第 d个学生的成绩 i j scanf f 小结 二维数组在内存中是按行存放数组元素的下标每一维都是从0开始的数值型数组不能够整体引用可以把二维数组看成是一个特殊的一维数组 即其元素是一个一维数组二维数组初始化有两种方法 按行赋值或者一行赋值 三 字符数组 定义 字符数组 用来存放字符数据的数组就是字符数组 定义方式 char数组名 长度 一维数组 chara 10 二维数组 chara 4 5 三 字符数组 初始化 对字符数组初始化 最容易理解的方式是逐个字符赋给数组中各元素 如 Charc 10 I a m h a p p y 如果在定义字符数组时不进行初始化 则数组中各元素的值是不可预料的 如果花括弧中提供的初值个数 即字符个数 大于数组长度 则按语法错误处理 注意 charc I a m h a p p y 数组c的长度自动定为10 includevoidmain charc 10 I a m a b o y inti for i 0 i 10 i printf c c i printf n 三 字符数组 引用 可以引用字符数组中的一个元素 得到一个字符 在实际编程中 最常用的是字符串 在 中是用字符数组存放字符串 字符串以 0 作为串结束符 因此当把字符串存入数组时 也把 0 存入数组 并以此作为该字符串是否结束的标志 程序中通过循环扫描字符数组元素 读到 0 时候便认为字符串结束 三 字符数组 字符串和字符串结束标志 用字符串方式赋值比用字符逐个赋值要多占一个字节 用于存放字符串结束标志 0 例如 数组charc cprogram 在内存中的实际存放情况为 三 字符数组 字符串和字符串结束标志 0 是由C编译系统自动加上的 由于采用了 0 标志 所以在用字符串赋初值时一般无须指定数组的长度 而由系统自行处理 在内存中数组c的状态 三 字符数组 字符数组的输入输出 字符数组的输入输出可以有两种方式 逐个字符输入输出 用 c 输入或输出一个字符将整个字符串一次输出 用 s 格式符 charc China printf s c China 三 字符数组 字符数组的输入输出 注意 输出字符不包括结束符 0 用 s 格式符输出字符串时 printf函数中的输出项时字符数组名 而不是数组元素名 printf s c 如果数组长度大于字符串实际长度 也只输出遇 0 结束如果一个字符数组中包含一个以上 0 则遇到第一个 0 时结束 includevoidmain charst 15 printf inputstring n scanf s st printf s n st 三 字符数组 字符数组的输入输出 本例中由于定义数组长度为15 因此输入的字符串长度必须小于15 以留出一个字节用于存放字符串结束标志 0 对于字符数组 如果不作初始化赋值 则须说明数组长度 应该特别注意的是 当用scanf函数输入字符串时 字符串中不能含有空格 否则将以空格作为串的结束符 例如运行上例 当输入的字符串中含有空格时 运行情况为 三 字符数组 字符数组的输入输出 includevoidmain charst1 6 st2 6 st3 6 st4 6 printf inputstring n scanf s s s s st1 st2 st3 st4 printf s s s s n st1 st2 st3 st4 从输出结果可以看出空格以后的字符都未能输出 为了避免这种情况 可多设几个字符数组分段存放含空格的串 程序可改写如下 三 字符数组 字符数组的输入输出 重要一点 在前面介绍过scanf的各输入项必须以地址方式出现 如 a b等 但在上例中却是以数组名方式出现的 这是为什么呢 这是由于在 语言中规定 数组名就代表了该数组的首地址 三 字符数组 字符串处理函数 语言提供了丰富的字符串处理函数 大致可分为字符串的输入 输出 合并 修改 转换 复制 搜索几类 用于输入输出的字符串函数 在使用前应包含头文件 stdio h 使用其它字符串函数则应包含头文件 string h 下面介绍几个最常用的字符串函数 三 字符数组 字符串处理函数 格式 puts 字符数组名 功能 把字符数组中的字符串输出到显示器 即在屏幕上显示该字符串 includevoidmain staticcharc BASIC ndBASE puts c 从程序中可以看出puts函数中可以使用转义字符 因此输出结果成为两行 puts函数完全可以由printf函数取代 当需要按一定格式输出时 通常使用printf函数 字符串输出函数puts 三 字符数组 字符串处理函数 格式 gets 字符数组名 功能 从标准输入设备键盘上输入一个字符串 本函数得到一个函数值 即为该字符数组的首地址 include stdio h voidmain charst 15 printf inputstring n gets st puts st 可以看出当输入的字符串中含有空格时 输出仍为全部字符串 说明gets函数并不以空格作为字符串输入结束的标志 而只以回车作为输入结束 这是与scanf函数不同的 字符串输入函数gets 3 strcat函数其一般形式为 strcat 字符数组1 字符数组2 strcat的作用是连接两个字符数组中的字符串 把字符串2接到字符串1的后面 结果放在字符数组1中 函数调用后得到一个函数值 字符数组1的地址 三 字符数组 字符串处理函数 例如 charstr1 30 People sRepublicof charstr2 China print s strcat str1 str2 输出 People sRepublicofChina 4 strcpy函数其一般形式为 strcpy 字符数组1 字符串2 strcpy是 字符串复制函数 作用是将字符串2复制到字符数组1中去 例如 charstr1 10 str2 China strcpy str1 str2 1 字符数组1必须定义得足够大 以便容纳被复制的字符串 字符数组1的长度不应小于字符串2的长度 2 字符数组1 必须写成数组名形式 如str1 字符串2 可以是字符数组名 也可以是一个字符串常量 如strcpy str1 China 3 复制时连同字符串后面的 0 一起复制到字符数组1中 4 可以用strcpy函数将字符串2中前面若干个字符复制到字符数组1中去 例如 strcpy str1 str2 2 作用是将str2中前面2个字符复制到str1中去 然后再加一个 0 5 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组 如下面两行都是不合法的 charstr1 10 str2 10 str1 China str1 str2 而只能用strcpy函数将一个字符串复制到另一个字符数组中去 用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素 如下面是合法的 chara 5 c1 c2 c1 A c2 B a 0 C a 1 h a 2 i a 3 n a 4 a 三 字符数组 字符串处理函数 测字符串长度函数strlen 格式 strlen 字符数组名 功能 测字符串的实际长度 不含字符串结束标志 0 并作为函数返回值 include string h include stdio h voidmain intk charst Clanguage k strlen st printf Thelenthofthestringis d n k Strlen 与sizeof 的区别 容易出错的地方 将字符数组定义为一个字符混淆 c 和 c 的意义字符数组整体输入时用取地址符号是不对的在实际应用中 字符数组 在使用前先格式化 调用函数memset chara 100 memset a 0 sizeof a 小结 字符数组可以通过数组名进行整体引用C语言没
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识付费全网课件9.9
- 钻戒销售基础知识培训课件
- 2025年安全员证报考指南及模拟试题答案
- 知识产权师培训心得课件
- 2025年教师资格证考试(高中化学)教育案例分析模拟试题
- 2025年教师招聘考试教育知识与能力专项训练试题集
- 2025新安全生产法知识考试题库及参考答案
- 2025年生态修复植被重建技术成果社会效益鉴定报告
- 2025年智能建筑系统集成节能降耗在数据中心空调系统中的应用报告
- 钢铁基础知识培训教材课件
- 全国交通运输行政执法综合管理信息系统考试题库-中(多选题练习)
- 2024年T电梯修理证解析及电梯修理-T证模拟考试题库
- 2024春期国开电大本科《商法》在线形考(形成性考核作业一至四)试题及答案
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- 2024年四川攀枝花市川投能源攀水电公司招聘笔试参考题库含答案解析
- 全科规培:门诊SOAP病历考核模拟文档
- 三年级上册口算题(可打印)
- 新教师培训讲座课件
- 插花艺术与花艺课件
- Excel模板:血压记录监测表(自动图表分析)
- Stevens-Johnson-综合征及中毒性表皮坏死松解症
评论
0/150
提交评论