




免费预览已结束,剩余90页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章利用数组处理批量数据 前几章使用的变量都属于基本类型 例如整型 字符型 浮点型数据 这些都是简单的数据类型 对于有些数据 只用简单的数据类型是不够的 难以反映出数据的特点 也难以有效地进行处理 如果有1000名同学 每个同学有一个成绩 需要求这1000名同学的平均成绩 用s1 s2 s3 s1000表示每个同学的成绩 能体现内在联系 C语言用方括号中的数字表示下标 如用s 15 表示 数组名 数组是一组有序数据的集合 数组中各数据的排列是有一定规律的 下标代表数据在数组中的序号用一个数组名和下标惟一确定数组中的元素数组中的每一个元素都属于同一个数据类型 6 1怎样定义和引用一维数组6 2怎样定义和引用二维数组 6 1怎样定义和引用一维数组 6 1 1怎样定义一维数组6 1 2怎样引用一维数组元素6 1 3一维数组的初始化6 1 4一维数组程序举例 6 1 1怎样定义一维数组 一维数组是数组中最简单的它的元素只需要用数组名加一个下标 就能惟一确定要使用数组 必须在程序中先定义数组 6 1 1怎样定义一维数组 定义一维数组的一般形式为 类型符数组名 常量表达式 数组名的命名规则和变量名相同如inta 10 数组名 6 1 1怎样定义一维数组 定义一维数组的一般形式为 类型符数组名 常量表达式 数组名的命名规则和变量名相同如inta 10 数组长度 6 1 1怎样定义一维数组 定义一维数组的一般形式为 类型符数组名 常量表达式 数组名的命名规则和变量名相同如inta 10 10个元素 a 0 a 1 a 2 a 9 每个元素的数据类型 6 1 1怎样定义一维数组 定义一维数组的一般形式为 类型符数组名 常量表达式 inta 4 6 合法intn scanf d 不合法 6 1 2怎样引用一维数组元素 注意 只能引用数组元素而不能一次整体调用整个数组全部元素的值 6 1 2怎样引用一维数组元素 引用数组元素的表示形式为 数组名 下标 如a 0 a 5 a 7 a 2 3 合法intn 5 a 10 a n 20 合法 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 9 的值为0 9 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 includeintmain inti a 10 for i 0 i 0 i printf d a i printf n return0 先输出a 9 最后输出a 0 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 6 1 3一维数组的初始化 在定义数组的同时 给各数组元素赋值inta 10 0 1 2 3 4 5 6 7 8 9 inta 10 0 1 2 3 4 相当于inta 10 0 1 2 3 4 0 0 0 0 0 inta 10 0 0 0 0 0 0 0 0 0 0 相当于inta 10 0 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 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 6 2怎样定义和引用二维数组 同学1 同学2 同学3 数学 英语 政治 体育 导论 程序设计 floatscore 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 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怎样引用二维数组的元素 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 等价于inta 3 4 1 0 0 0 5 0 0 0 9 0 0 0 inta 3 4 1 5 6 相当于inta 3 4 1 5 6 0 6 2 3二维数组的初始化 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 0 10 合法 6 2 3二维数组的初始化 例6 4将一个二维数组行和列的元素互换 存到另一个二维数组中 6 2 4二维数组程序举例 解题思路 可以定义两个数组 数组a为2行3列 存放指定的6个数数组b为3行2列 开始时未赋值将a数组中的元素a i j 存放到b数组中的b j i 元素中用嵌套的for循环完成 6 2 4二维数组程序举例 includeintmain 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 处理a的一行中各元素 处理a中某一列元素 输出a的各元素 a元素值赋给b相应元素 printf arrayb n for i 0 i 2 i for j 0 j 1 j printf 5d b i j printf n return0 输出b的各元素 例6 5有一个3 4的矩阵 要求编程序求出其中值最大的那个元素的值 以及其所在的行号和列号 解题思路 采用 打擂台算法 先找出任一人站在台上 第2人上去与之比武 胜者留在台上第3人与台上的人比武 胜者留台上 败者下台以后每一个人都是与当时留在台上的人比武 直到所有人都上台比为止 最后留在台上的是冠军 例6 5有一个3 4的矩阵 要求编程序求出其中值最大的那个元素的值 以及其所在的行号和列号 解题思路 采用 打擂台算法 先把a 0 0 的值赋给变量maxmax用来存放当前已知的最大值a 0 1 与max比较 如果a 0 1 max 则表示a 0 1 是已经比过的数据中值最大的 把它的值赋给max 取代了max的原值以后依此处理 最后max就是最大的值 记行号 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 记最大值 记列号 6 3 1怎样定义字符数组6 3 2字符数组的初始化6 3 3怎样引用字符数组中的元素6 3 4字符串和字符串结束标志6 3 5字符数组的输入输出6 3 6善于使用字符串处理函数6 3 7字符数组应用举例 6 3字符数组 用来存放字符数据的数组是字符数组字符数组中的一个元素存放一个字符定义字符数组的方法与定义数值型数组的方法类似 6 3 1怎样定义字符数组 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 charc 10 I a m h a p p y charc 10 c p r o g r a m 6 3 2字符数组的初始化 c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 c 8 c 9 c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 c 8 c 9 chardiamond 5 5 6 3 2字符数组的初始化 例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怎样引用字符数组中的元素 例6 7输出一个菱形图 解题思路 定义一个字符型的二维数组 用 初始化列表 进行初始化用嵌套的for循环输出字符数组中的所有元素 6 3 3怎样引用字符数组中的元素 includeintmain chardiamond 5 inti j for i 0 i 5 i for j 0 j 5 j printf c diamond i j printf n return0 在C语言中 是将字符串作为字符数组来处理的关心的是字符串的有效长度而不是字符数组的长度为了测定字符串的实际长度 C语言规定了字符串结束标志 0 6 3 4字符串和字符串结束标志 0 代表ASCII码为0的字符从ASCII码表可以查到 ASCII码为0的字符不是一个可以显示的字符 而是一个 空操作符 即它什么也不做用它作为字符串结束标志不会产生附加的操作或增加有效字符 只起一个供辨别的标志 6 3 4字符串和字符串结束标志 charc Iamhappy 可写成charc Iamhappy 相当于charc 11 Iamhappy 6 3 4字符串和字符串结束标志 charc 10 China 可写成charc 10 China 从c 5 开始 元素值均为 0只显示printf s c 6 3 4字符串和字符串结束标志 字符数组的输入输出可以有两种方法 逐个字符输入输出 c 整个字符串一次输入输出 s 输出的字符中不包括结束符 0 用 s输出字符串时 printf函数中的输出项是字符数组名 不是数组元素名 6 3 5字符数组的输入输出 如果一个字符数组中包含多个 0 则遇第一个 0 时输出就结束可以用scanf函数输入一个字符串scanf函数中的输入项是已定义的字符数组名 输入的字符串应短于已定义的字符数组的长度 6 3 5字符数组的输入输出 charc 6 scanf s c China 系统自动在China后面加一个 0 6 3 5字符数组的输入输出 charstr1 5 str2 5 str3 5 scanf s s s str1 str2 str3 Howareyou 6 3 5字符数组的输入输出 str1 str2 str3 在C函数库中提供了一些用来专门处理字符串的函数 使用方便 6 3 6善于使用字符串处理函数 1 puts函数 输出字符串的函数其一般形式为 puts 字符数组 作用是将一个字符串输出到终端charstr 20 China puts str 输出China 6 3 6善于使用字符串处理函数 2 gets函数 输入字符串的函数其一般形式为 gets 字符数组 作用是输入一个字符串到字符数组charstr 20 gets str Computer 6 3 6善于使用字符串处理函数 3 strcat函数 字符串连接函数其一般形式为 strcat 字符数组1 字符数组2 其作用是把两个字符串连接起来 把字符串2接到字符串1的后面 结果放在字符数组1中 6 3 6善于使用字符串处理函数 使用字符串函数时 在程序开头用 include 3 strcat函数 字符串连接函数charstr1 30 People charstr2 China printf s strcat str1 str2 输出 PeopleChina 6 3 6善于使用字符串处理函数 要足够大 4 strcpy和strncpy函数 字符串复制strcpy一般形式为 strcpy 字符数组1 字符串2 作用是将字符串2复制到字符数组1中去charstr1 10 str2 China strcpy str1 str2 6 3 6善于使用字符串处理函数 str1 4 strcpy和strncpy函数 字符串复制strcpy一般形式为 strcpy 字符数组1 字符串2 作用是将字符串2复制到字符数组1中去charstr1 10 str2 China strcpy str1 str2 6 3 6善于使用字符串处理函数 str1 要足够大 4 strcpy和strncpy函数 字符串复制strcpy一般形式为 strcpy 字符数组1 字符串2 作用是将字符串2复制到字符数组1中去charstr1 10 str2 China strcpy str1 str2 6 3 6善于使用字符串处理函数 数组名形式 4 strcpy和strncpy函数 字符串复制strcpy一般形式为 strcpy 字符数组1 字符串2 作用是将字符串2复制到字符数组1中去charstr1 10 str2 China strcpy str1 str2 6 3 6善于使用字符串处理函数 数组名或字符串常量 4 strcpy和strncpy函数 字符串复制strcpy一般形式为 strcpy 字符数组1 字符串2 作用是将字符串2复制到字符数组1中去charstr1 10 str2 China strcpy str1 str2 相当于strcpy str1 China 6 3 6善于使用字符串处理函数 4 strcpy和strncpy函数 字符串复制charstr1 10 str2 China str1 China 错误str1 str2 错误 6 3 6善于使用字符串处理函数 4 strcpy和strncpy函数 字符串复制可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去strncpy str1 str2 2 作用是将str2中最前面2个字符复制到str1中 取代str1中原有的最前面2个字符复制的字符个数n不应多于str1中原有的字符 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数其一般形式为strcmp 字符串1 字符串2 作用是比较字符串1和字符串2strcmp str1 str2 strcmp China Korea strcmp str1 Beijing 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数字符串比较的规则是 将两个字符串自左至右逐个字符相比 直到出现不同的字符或遇到 0 为止如全部字符相同 认为两个字符串相等若出现不相同的字符 则以第一对不相同的字符的比较结果为准 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数 A A computer compare these that 1A 20 CHINA CANADA DOG TSINGHUA 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数比较的结果由函数值带回如果字符串1 字符串2 则函数值为0如果字符串1 字符串2 则函数值为一个正整数如果字符串1 字符串2 则函数值为一个负整数 6 3 6善于使用字符串处理函数 5 strcmp函数 字符串比较函数if str1 str2 printf yes 错误if strcmp str1 str2 0 printf yes 正确 6 3 6善于使用字符串处理函数 6 strlen函数 测字符串长度的函数其一般形式为 strlen 字符数组 它是测试字符串长度的函数函数的值为字符串中的实际长度 6 3 6善于使用字符串处理函数 6 strlen函数 测字符串长度的函数charstr 10 China printf d strlen str 输出结果是5也可以直接测试字符串常量的长度strlen China 6 3 6善于使用字符串处理函数 7 strlwr函数 转换为小写的函数其一般形式为strlwr 字符串 函数的作用是将字符串中大写字母换成小写字母 6 3 6善于使用字符串处理函数 8 strupr函数 转换为大写的函数其一般形式为strupr 字符串 函数的作用是将字符串中小写字母换成大写字母 6 3 6善于使用字符串处理函数 例6 8输入一行字符 统计其中有多少个单词 单词之间用空格分隔开 解题思路 从第1个字符开始逐个字符进行检查 判断此字符是否是新单词的开头 如果是 就使变量num的值加1 最后得到的num的值就是单词总数问题的关键是 怎样确定 出现一个新单词了 6 3 7字符数组应用举例 判断是否出现新单词 可以由是否有空格出现来决定如果测出某一个字符为非空格 而它的前面的字符是空格 则表示 新的单词开始了 此时使num累加1如果当前字符为非空格而其前面的字符也是非空格 则num不应再累加1 6 3 7字符数组应用举例 用变量word作为判别当前是否开始了一个新单词的标志 若word 0表示未出现新单词 如出现了新单词 就把word置成1前面一个字符是否空格可以从word的值看出来 若word等于0 则表示前一个字符是空格 如果word等于1 意味着前一个字符为非空格 6 3 7字符数组应用举例 Y c 空格 word 0 N word 0 Y word 1num N if c word 0 elseif word 0 word 1 num charstring 81 c inti num 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家能源吴忠市2025秋招能源与动力工程类面试追问及参考回答
- 中国移动晋中市2025秋招笔试行测题库及答案网络优化与维护类
- 国家能源宜春市2025秋招笔试综合知识题专练及答案
- 大唐电力连云港市2025秋招面试专业追问及参考法学岗位
- 中国广电上饶市2025秋招笔试模拟题及答案
- 中国移动佛山市2025秋招行业解决方案岗位专业追问清单及参考回答
- 临汾市中石化2025秋招笔试模拟题含答案油气储运与管道岗
- 菏泽市中储粮2025秋招战略研究博士岗高频笔试题库含答案
- 中国移动周口市2025秋招笔试行测题库及答案供应链采购类
- 中国联通柳州市2025秋招笔试行测题库及答案技能类
- 生产主管转正工作总结
- 2025至2030中国高纯铝行业发展趋势与行业发展研究与产业战略规划分析评估报告
- 2025年期货从业资格之《期货法律法规》真题附答案详解【巩固】
- 幼儿园各项安全管理制度汇编
- 2025年“安全生产年”工作总结(2篇)
- GB/T 2481.1-2025固结磨具用磨料粒度组成的检测和标记第1部分:粗磨粒F4~F220
- 2025-2026秋学生国旗下演讲稿:第4周涵养文明习惯点亮成长底色-养成教育
- 配电电缆故障定位试卷与答案
- 四川日普精化有限公司年产3000吨脂肪酸酰胺与1000吨有机硅树脂涂剂配套设施改造项目环评报告
- 辽宁省沈阳市基层诊所医疗机构卫生院社区卫生服务中心村卫生室名单目录信息
- 锅炉空预器清洗方案
评论
0/150
提交评论