C程序设计第6章 利用数组处理批量数据_第1页
C程序设计第6章 利用数组处理批量数据_第2页
C程序设计第6章 利用数组处理批量数据_第3页
C程序设计第6章 利用数组处理批量数据_第4页
C程序设计第6章 利用数组处理批量数据_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第6章利用数组处理批量数据 6 1怎样定义和引用一维数组6 2怎样定义和引用二维数组6 3字符数组 6 1怎样定义和引用一维数组 6 1 1怎样定义一维数组6 1 2怎样引用一维数组元素6 1 3一维数组的初始化6 1 4一维数组程序举例 6 1 1怎样定义一维数组 定义一维数组的一般形式为 类型符数组名 常量表达式 数组名遵循标识符的命名规则如inta 10 数组名 数组长度 每个元素的数据类型 10个元素 a 0 a 1 a 2 a 9 6 1 1怎样定义一维数组 一维数组在内存中的顺序存放 每个数据元素占用的字节数 就是其类型的字节数 例如 floata 100 字节数为 100 4 6 1 1怎样定义一维数组 常量表达式中可以包括常量和符号常量 但不能包含变量 也就是说 C语言不允许对数组的大小作动态定义 即数组的大小不依赖于程序运行过程中变量的值 例如 intn scanf d 不能用变量说明数组大小 6 1 2怎样引用一维数组元素 引用数组元素的表示形式为 数组名 下标 下标可以是整型表达式 例如 a 0 a 5 a 7 a 2 3 注意 定义数组时用到的 数组名 常量表达式 和引用数组元素时用到的 数组名 下标 是有区别的 例如 inta 10 数组有10个元素t a 6 数组中序号为6的元素 6 1 2怎样引用一维数组元素 例6 1对10个数组元素依次赋值为0 1 2 3 4 5 6 7 8 9 要求按逆序输出 解题思路 定义一个长度为10的数组 数组定义为整型要赋的值是从0到9 可以用循环来赋值用循环按下标从大到小输出这10个元素 includeintmain inti a 10 for i 0 i 0 i printf d a i printf n return0 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 6 1 3一维数组的初始化 在定义数组的同时 可以对数组元素初始化 1 定义数组时对全部数组元素赋初值 inta 10 0 1 2 3 4 5 6 7 8 9 2 定义数组时对部分元素赋值 inta 10 0 1 2 3 4 花括弧内提供了前5个元素的初值 后5个元素的初值为0 3 如果数组元素全部赋初值为0 可以写成 inta 10 0 0 0 0 0 0 0 0 0 0 或 inta 10 0 4 如果定义时对全部数组元素赋初值 可以不指定数组长度 inta 5 1 2 3 4 5 可以表示为 inta 1 2 3 4 5 6 1 4一维数组程序举例 例6 2用数组处理求Fibonacci数列问题解题思路 例5 8中用简单变量处理的 缺点不能在内存中保存这些数 假如想直接输出数列中第25个数 是很困难的 如果用数组处理 每一个数组元素代表数列中的一个数 依次求出各数并存放在相应的数组元素中 includeintmain inti intf 20 1 1 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 printf n return0 例6 3有10个地区的面积 要求对它们按由小到大的顺序排列 解题思路 排序的规律有两种 一种是 升序 从小到大 另一种是 降序 从大到小把题目抽象为 对n个数按升序排序 采用起泡法排序 985420 895420 859420 854920 854290 854209 大数沉底 a 0 a 1 a 2 a 3 a 4 a 5 for i 0 ia i 1 t a i a i a i 1 a i 1 t 854209 584209 548209 542809 542089 a 0 a 1 a 2 a 3 a 4 a 5 for i 0 ia i 1 t a i a i a i 1 a i 1 t 542089 452089 425089 420589 a 0 a 1 a 2 a 3 a 4 a 5 for i 0 ia i 1 t a i a i a i 1 a i 1 t 420589 240589 204589 a 0 a 1 a 2 a 3 a 4 a 5 for i 0 ia i 1 t a i a i a i 1 a i 1 t 204589 024589 a 0 a 1 a 2 a 3 a 4 a 5 for i 0 ia i 1 t a i a i a i 1 a i 1 t for i 0 ia i 1 for i 0 ia i 1 for i 0 ia i 1 for i 0 ia i 1 for j 0 j 5 j includeintmain inta 10 inti j t printf input10numbers n for i 0 ia 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 return0 6 2怎样定义和引用二维数组 1分队 2分队 3分队 队员1 队员2 队员3 队员4 队员5 队员6 floatpay 3 6 6 2 1怎样定义二维数组6 2 2怎样引用二维数组的元素6 2 3二维数组的初始化6 2 4二维数组程序举例 6 2怎样定义和引用二维数组 二维数组定义的一般形式为类型符数组名 常量表达式 常量表达式 如 floata 3 4 b 5 10 二维数组可被看作是一种特殊的一维数组 它的元素又是一个一维数组 例如 把a看作是一个一维数组 它有3个元素 a 0 a 1 a 2 每个元素又是一个包含4个元素的一维数组 6 2 1怎样定义二维数组 a 0 a 1 a 2 二维数组中的元素在内存中的排列顺序是 按行存放 即先顺序存放第一行的元素 再存放第二行的元素 地址值数组元素 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 二维数组元素的表示形式为 数组名 下标 下标 下标可以是整型表达式 数组元素可以出现在表达式中 也可以被赋值 b 1 2 a 2 3 2合法for i 0 i m i printf d d n a i 0 a 0 i 合法 6 2 2怎样引用二维数组的元素 6 2 3二维数组的初始化 可以用下面4种方法对二维数组初始化 分行给二维数组赋初值 例如 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 6 2 3二维数组的初始化 可以对部分元素赋初值 例如 inta 3 4 1 5 9 inta 3 4 1 0 6 0 0 11 inta 3 4 1 5 6 100050009000 1000060000011 100056000000 6 2 3二维数组的初始化 4 如果对全部元素都赋初值 则定义数组时对第一维的长度可以不指定 但第二维的长度不能省 例如 inta 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 4 0 0 3 0 10 0030000001000 例6 4将一个二维数组行和列的元素互换 存到另一个二维数组中 6 2 4二维数组程序举例 解题思路 可以定义两个数组 数组a为2行3列 存放指定的6个数数组b为3行2列 开始时未赋值将a数组中的元素a i j 存放到b数组中的b j i 元素中用嵌套的for循环完成 includeintmain inta 2 3 1 2 3 4 5 6 b 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 return0 例6 5有一个3 4的矩阵 要求编程序求出其中值最大的那个元素的值 以及其所在的行号和列号 includeintmain inti j row 0 colum 0 max inta 3 4 1 2 3 4 9 8 7 6 10 10 5 2 max a 0 0 for i 0 imax max a i j row i colum j printf max d nrow d ncolum d n max row colum return0 6 3 1怎样定义字符数组6 3 2字符数组的初始化6 3 3怎样引用字符数组中的元素6 3 4字符串和字符串结束标志6 3 5字符数组的输入输出6 3 6善于使用字符串处理函数6 3 7字符数组应用举例 6 3字符数组 用来存放字符数据的数组是字符数组 字符数组中的一个元素存放一个字符 定义字符数组的方法与定义数值型数组的方法相同 例如 charc 10 c 0 I c 1 c 2 a c 3 m c 4 c 5 h c 6 a c 7 p c 8 p c 9 y 6 3 1怎样定义字符数组 c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 c 8 c 9 6 3 2字符数组的初始化 字符数组的初始化方法方与数值型数组基本相同 例如 charc 10 I a m h a p p y charc I a m h a p p y 例6 6输出一个已知的字符数组 解题思路 定义一个字符数组 并用 初始化列表 对其赋以初值用循环逐个输出此字符数组中的字符 6 3 3怎样引用字符数组中的元素 includeintmain charc 15 I a m a s t u d e n t inti for i 0 i 15 i printf c c i printf n return0 6 3 3怎样引用字符数组中的元素 在C语言中 是将字符串作为字符数组来处理的 为了测定字符串的实际长度 C语言规定了字符串结束标志 0 注意 字符数组并不要求它的最后一个字符为 0 可以用字符串初始化字符数组 例如 定义字符数组 charc Pascalprogram charc Pascalprogram charc 11 I a m h a p p y 0 6 3 4字符串和字符串结束标志 charc 10 China 可写成charc 10 China 从c 5 开始 元素值均为 0printf s c 只显示 China 6 3 4字符串和字符串结束标志 字符数组名 字符数组的输入输出方法 逐个字符输入输出 c 字符串的输入输出方法 整个字符串一次输入输出 s 输出的字符中不包括结束符 0 例如charc China printf s c 6 3 5字符数组的输入输出 6 3 5字符数组的输入输出 说明 1 用 s 格式符输出字符串时 printf函数中的输出项是字符数组名 而不是数组元素名 2 如果数组长度大于字符串实际长度 输出到 0 结束 3 输出字符不包括结束符 0 4 如果一个字符数组中包含一个以上 0 则遇第一个 0 时输出就结束 5 可以用scanf函数输入一个字符串 例如 charc 6 scanf s c China 系统自动在China后面加一个 0 charstr1 5 str2 5 str3 5 scanf s s s str1 str2 str3 Howareyou 6 3 5字符数组的输入输出 str1 str2 str3 在C函数库中提供了一些用来专门处理字符串的函数 使用方便 使用字符串函数时 程序开头使用 include 6 3 6善于使用字符串处理函数 1 puts函数 输出字符串的函数其一般形式为 puts 字符数组 作用是将一个字符串输出到终端charstr 20 China puts str 输出China 字符数组名 2 gets函数 输入字符串的函数其一般形式为 gets 字符数组 作用是输入一个字符串到字符数组charstr 20 gets str Computer 6 3 6善于使用字符串处理函数 字符数组名 3 strcat函数 字符串连接函数其一般形式为 strcat 字符数组1 字符数组2 其作用是把两个字符串连接起来 把字符串2接到字符串1的后面 结果放在字符数组1中 函数调用后返回字符数组1的地址 charstr1 30 People sRepublicof charstr2 China printf s strcat str1 str2 输出 People sRepublicofChina 6 3 6善于使用字符串处理函数 字符数组str1必须定义得足够大 4 strcpy和strncpy函数 字符串复制strcpy一般形式为 strcpy 字符数组1 字符串2 作用是将字符串2复制到字符数组1中去charstr1 10 str2 China strcpy str1 str2 6 3 6善于使用字符串处理函数 str1 关于strcpy函数的几点说明 1 字符数组1必须定义得足够大 以便容纳被复制的字符串 字符数组1的长度不应小于字符串2的长度 2 字符数组1 必须写成数组名形式 如str1 字符串2 可以是字符数组名 也可以是一个字符串常量 如strcpy str1 China 3 复制时连同字符串后面的 0 一起复制到字符数组1中 4 可以用strncpy函数将字符串2中前面若干个字符复制到字符数组1中去 例如 strncpy str1 str2 2 作用是将str2中前面2个字符复制到str1中去 然后再加一个 0 复制的字符个数n不应多于str1中原有的字符 关于strcpy函数的几点说明 5 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组 如 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 5 strcmp函数 字符串比较函数其一般形式为strcmp 字符串1 字符串2 作用是比较字符串1和字符串2strcmp str1 str2 strcmp China Korea strcmp str1 Beijing 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数字符串比较的规则是 将两个字符串自左至右逐个字符相比 直到出现不同的字符或遇到 0 为止 如全部字符相同 认为两个字符串相等 若出现不相同的字符 则以第一对不相同的字符的比较结果为准 比较的结果由函数值带回 如果字符串1 字符串2 则函数值为0如果字符串1 字符串2 则函数值为一个正整数如果字符串1 字符串2 则函数值为一个负整数 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数 A A computer compare these that 1A 20 CHINA CANADA DOG TSINGHUA 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数if str1 str2 printf yes 错误if strcmp str1 str2 0 printf yes 正确 6 3 6善于使用字符串处理函数 6 strlen函数 测字符串长度的函数其一般形式为 strlen 字符数组 它是测试字符串长度的函数 函数的值为字符串中的实际长度 例如 charstr

温馨提示

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

最新文档

评论

0/150

提交评论