




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
为什么使用数组 我们已经学过了单项数据的变量 现在 你将会看到包含多项数据的变量 在C语言中 这种变量被称作数组 数组很方便地把一系列相同类型的数据保存在一起 数组还被用来构造许多其它的数据结构 树 表等等 现在 让我们来看一个显示数组的例子 问题 如果你已经输入了10个数 那么本例将输出它们 第五章数组 构造数据类型之一数组 有序数据的集合 用数组名标识元素 属同一数据类型 用数组名和下标确定5 1一维数组一维数组的定义定义方式 数据类型数组名 常量表达式 合法标识符 表示元素个数下标从0开始 数组运算符单目运算符优先级 1 左结合不能用 例inta 6 类型 6 24sizeof a int 编译时分配连续内存 数组名表示内存首地址 是地址常量 一维数组的引用数组必须先定义 后使用只能逐个引用数组元素 不能一次引用整个数组数组元素表示形式 数组名 下标 其中 下标可以是常量或整型表达式 例inti 15 intdata i 不能用变量定义数组维数 例inta 10 printf d a 必须for j 0 j 10 j printf d t a j 例intdata 5 data 5 10 C语言对数组不作越界检查 使用时要注意 一维数组的初始化初始化方式 在定义数组时 为数组元素赋初值 在编译阶段使之得到初值 inta 5 1 2 3 4 5 等价于 a 0 1 a 1 2 a 2 3 a 3 4 a 4 5 说明 数组不初始化 其元素值为随机数对static数组元素不赋初值 系统会自动赋以0值 当全部数组元素赋初值时 可不指定数组长度 如inta 5 6 2 3 等价于 a 0 6 a 1 2 a 2 3 a 3 0 a 4 0 如inta 3 6 2 3 5 1 staticinta 5 等价于 a 0 0 a 1 0 a 2 0 a 3 0 a 4 0 只给部分数组元素赋初值 inta 1 2 3 4 5 6 编译系统根据初值个数确定数组维数 程序举例 例读10个整数存入数组 找出其中最大值和最小值 步骤 1 输入 for循环输入10个整数2 处理 a 先令max min x 0 b 依次用x i 和max min比较 循环 若maxx i 令min x i 3 输出 max和min include defineSIZE10可以选用常量main intx 10 i max min x SIZE printf 请输入10个数 n for i 0 ix i min x i printf 最大的数是 d n max printf 最小的数是 d n min 例用数组求Fibonacci数列前20个数 includemain 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 例用冒泡法对10个数排序 排序过程 1 比较第一个数与第二个数 若为逆序a 0 a 1 则交换 然后比较第二个数与第三个数 依次类推 直至第n 1个数和第n个数比较为止 第一趟冒泡排序 结果最大的数被安置在最后一个元素位置上 2 对前n 1个数进行第二趟冒泡排序 结果使次大的数被安置在第n 1个元素位置 3 重复上述过程 共经过n 1趟冒泡排序后 排序结束 例 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 includemain inta 11 i j t printf Input10numbers n for i 1 ia i 1 t a i a i a i 1 a i 1 t printf Thesortednumbers n for i 1 i 11 i printf d a i 对输入的10个数排序 例用简单选择法对10个数排序 排序过程 1 首先通过n 1次比较 从n个数中找出最小的 将它与第一个数交换 第一趟选择排序 结果最小的数被安置在第一个元素位置上 2 再通过n 2次比较 从剩余的n 1个数中找出关键字次小的记录 将它与第二个数交换 第二趟选择排序 3 重复上述过程 共经过n 1趟排序后 排序结束 例 初始 49386597761327 i 1 13 49 一趟 13 386597764927 i 2 27 38 六趟 132738496576 97 Ch5 201 c includemain inta 11 i j k x printf Input10numbers n for i 1 i 11 i scanf d 5 2二维数组及多维数组二维数组的定义定义方式 数据类型数组名 常量表达式 常量表达式 数组元素的存放顺序原因 内存是一维的二维数组 按行序优先多维数组 最右下标变化最快 例inta 3 4 floatb 2 5 intc 2 3 4 inta 3 4 行数 列数 元素个数 行数 列数 二维数组理解 每个元素a i 由包含4个元素的一维数组组成 二维数组a是由3个元素组成 二维数组元素的引用形式 数组名 下标 下标 二维数组元素的初始化分行初始化 按元素排列顺序初始化 includemain inti j inta 4 1 3 4 5 定义二维数组 并且赋值for i 0 i 3 i 循环打印数组 for j 0 j 4 j printf d a i j printf n 程序举例 例将二维数组行列元素互换 存到另一个数组中 5 3字符数组和字符串字符数组定义 字符数组的初始化逐个字符赋值用字符串常量字符数组的引用 例charc 10 ch 3 4 例输出一个字符串 includemain charc 10 I a m a b o y inti for i 0 i 10 i printf c c i printf n 字符串字符串及其结束标志无字符串变量 用字符数组处理字符串字符串结束标志 0 字符串的输入输出逐个字符I O c整个字符串I O s 例用 cmain charstr 5 inti for i 0 i 5 i scanf c 例用 smain charstr 5 scanf s str printf s str 用字符数组名 不要加 输入串长度 数组维数遇空格或回车结束自动加 0 用字符数组名 遇 0 结束 例main chara 5 H e l l o printf s a 例main chara Hello printf s a 结果 Hello 结果 Hello 用 s 输出时 遇 0 结束 main chara h e l 0 l o 0 printf s a 例 输出 hel 数组中有多个 0 时 遇第一个结束 main inti chara 5 scanf s a for i 0 i 5 i printf d a i 运行情况 1 若输入hel 正常 2 若输入hell 正常 3 若输入hello 0 用 s输出时 会出现问题 输入字符串长度 数组维数 例字符串输入举例 includemain chara 15 b 5 c 5 scanf s s s a b c printf a s nb s nc s n a b c scanf s a printf a s n a 运行情况 输入 Howareyou 输出 a Howb arec you 输入 Howareyou 输出 a How scanf中 s输入时 遇空格或回车结束 运行情况 输入 Howareyou 例若准备将字符串 Thisisastring 记录下来 错误的输入语句为 A scanf 20s s B for k 0 k 17 k s k getchar C while c getchar n s k c 常用的字符串处理函数包含在头文件string h 字符串输出函数puts格式 puts 字符数组 功能 向显示器输出字符串 输出完 换行 说明 字符数组必须以 0 结束 字符串输入函数gets格式 gets 字符数组 功能 从键盘输入一以回车结束的字符串放入字符数组中 并自动加 0 说明 输入串长度应小于字符数组维数 例 includemain charstring 80 printf Inputastring gets string puts string 输入 Howareyou 输出 Howareyou 字符串连接函数strcat格式 strcat 字符数组1 字符数组2 功能 把字符数组2连到字符数组1后面返值 返回字符数组1的首地址说明 字符数组1必须足够大 连接前 两串均以 0 结束 连接后 串1的 0 取消 新串最后加 0 字符串拷贝函数strcpy格式 strcpy 字符数组1 字符串2 功能 将字符串2 拷贝到字符数组1中去返值 返回字符数组1的首地址说明 字符数组1必须足够大 拷贝时 0 一同拷贝 不能使用赋值语句为一个字符数组赋值 例charstr1 20 str2 20 str1 Hello str2 str1 例strcpy与strcat举例 include includevoidmain chardestination 25 charblank c C turbo Turbo strcpy destination turbo strcat destination blank strcat destination c printf s n destination TurboC 字符串比较函数strcmp格式 strcmp 字符串1 字符串2 功能 比较两个字符串比较规则 对两串从左向右逐个字符比较 ASCII码 直到遇到不同字符或 0 为止返值 返回int型整数 a 若字符串1字符串2 返回正整数c 若字符串1 字符串2 返回零说明 字符串比较不能用 必须用strcmp 字符串长度函数strlen格式 strlen 字符数组 功能 计算字符串长度返值 返回字符串实际长度 不包括 0 在内 例对于以下字符串 strlen s 的值为 1 chars 10 A 0 B C 0 D 2 chars t v 0will n 3 chars x69 082 n 答案 131 Howareyou Hello Len1 6 Len2 12 Len3 18 Ch6 23 c 应用举例 例输入一行字符 统计其中有多少个单词 includemain charstring 81 inti num 0 word 0 charc gets string for i 0 c string i 0 i if c word 0 elseif word 0 word 1 num printf Thereare dwords intheline n num 例有三个字符串 找出其中最大者 include includemain charstring 20 str 3 20 inti for i 0 i0 strcpy string str 0 elsestrcpy string str 1 if strcmp str 2 string 0 strcpy string str 2 printf nThela
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年北京市外来人口租赁合同管理与服务办法
- 2025年《合同法》讲座
- 2025财产委托管理合同书新范文
- 2025年动产质押借款合同
- 石化过程强化学习优化-洞察及研究
- 出入境人员安全培训课件
- 2025担保抵押合同范本
- 2025合同违约责任规定协议范本
- 2025咨询合同协议方案技术支持合同
- 冲压作业安全培训心得
- 希沃白板实操校本培训课件
- 《数控机床概述 》课件
- 培训课件 -华为铁三角工作法完全解密
- 风险管理与保险规划理解保险的作用
- 电网络分析课件
- 《十大销售技巧》课件
- 汽车机械制图中职全套教学课件
- 三对三篮球赛记录表
- 学生模拟政协提案范文
- 新苏教版一年级上册科学学生活动手册答案
- 英语字母衡水体书写(附字帖)
评论
0/150
提交评论