自考计算机基础与程序设计.ppt_第1页
自考计算机基础与程序设计.ppt_第2页
自考计算机基础与程序设计.ppt_第3页
自考计算机基础与程序设计.ppt_第4页
自考计算机基础与程序设计.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

数组 共26页第2页 第六章数组 第一节数组的概念第二节一维数组第三节二维数组第四节字符数组 共26页第3页 6 1数组的概念 C语言里 计算机如何存放一个数据 一个班学生某一科目的成绩 80 58 72 一个3 3的矩阵 235101457 1 具有相同类型2 固定的数量3 存在相互关联 利用变量存放数据 不同数据存放在不同变量中 相互没有关联 如何存放多个相互间存在关联的数据 数组 具有相同数据类型 数量固定的数据的有序集合数组是一个集合 构成数组的每个数据称为数组元素 把这些具有相同类型 数量固定 相互关联的数据 用一个数组来统一存放 数据特点 inta scanf d 线性关系 行列关系 例如 存储一个班学生成绩用一维数组floatmark 46 存储一个3 3的矩阵用二维数组inta 3 3 其中 mark a是数组名 内是数组的下标 下标的大小限定数组的长度 表示最多能存放多少数据不同的数组元素 用共同的名字 数组名 和各自的下标来唯一地标识例如 mark 0 mark 1 mark 45 float int是数组的数据类型 它限制了数组元素的类型例如 mark 0 80 0mark 0 a 错误 6 1数组的概念 数组按维度分类 一维数组和二维数组一维数组 可存储一行或一列数据二维数组 可存储多行和多列数据 6 1数组的分类 例如 inta 3 3 例如 floatmark 46 共26页第6页 第六章数组 1 一维数组数组的定义数组元素的引用数组的初始化 数组定义的格式回顾一下变量定义的格式 数组的定义 6 2一维数组 数组的定义 声明存在一个数组 说明其名称 长度和类型 类型说明符变量名 类型说明符数组名 常量表达式 数组的长度 整数 数组元素的类型例如 int float 例如 inta 10 例如 inta 数组a可以用于存放10个整数 标识符 1 定义一个数组 可以存放10个整数inta 10 2 定义一个数组 可以存放5个实数floatb 5 数组的定义 2 可以同时定义多个数据类型相同的数组 以逗号分隔例如 inta 10 b 5 举例 类型说明符数组名 常量表达式 注意 1 常量表达式不能是变量例如 inta 10 intb a 错误可以是符号常量例如 defineN10main intb N 等价inta 10 intb 5 数组元素的引用 2 数组元素的引用 数组元素的引用 用共同数组名和各自的下标来唯一地标识引用格式 数组名 下标 例如 inta 10 可引用的数组元素 a 0 a 1 a 9 注意 下标范围是0 长度 1 a 0 表示第一个数组元素 a 9 表示最后一个数组元素 常见错误 a 10 3 引用是重点 即如何从数组中提取数据 和存放数据到数组中 提取数据 printf d a 0 或intb a 0 存放数据 scanf d 数组存取数据 输入输出语句和赋值操作 举例 输入任意10个整数 要求按序存放在数组中 并且依次输出 数组元素的引用 main inta 10 inti for i 0 i 9 i scanf d 如何对整个数组的数据进行存取 数据结构 inta 10 算法 1 输入10个数 依次存放在数组中2 依次输出数组中存放的10个数 循环1 inti 0to9输入第i个数 存放到a i 中i 循环2 inti 0to9输出数组中数据元素a i i 常用循环对数组中的数组元素逐个输入 输出 或进行处理 数组的输入和输出 数组 只能是逐个存取数组的单个数组元素 不能进行整体操作1 输入 输出数组 inta 10 数组的引用 错误 直接对整个数组进行输入输出scanf d d d d d d d d d d a scanf d a printf d a printf d d d d d d d d d d a 正确 用循环对逐个的数组元素进行输入输出 for k 0 k 10 k scanf d 数组的引用 2 修改和提取数组 不能对整个数组进行赋值操作 只能对具体的某个数组元素进行赋值操作和取值操作例如 赋值 inta 10 a 2 错误a 0 2 正确取值 intb b a 错误b a 0 正确 因为 数组名不是变量 而每个数组元素是变量 可仅对部分元素赋予初值 例 inta 5 1 2 结果是a 0 1 a 1 2 其他 0chara 5 a b 结果是a 0 a 其他是 0 对所有元素赋予初值时 数组长度可省 例 inta 1 2 等价inta 2 1 2 数组的初始化 3 数组初始化 格式 数据类型数组名 常量表达式 初始化数据 举例 inta 5 1 2 3 4 5 结果 a 0 1 a 1 2 a 2 3 a 3 4 a 4 5 在定义数组时 给数组赋予一个初始值 数组的初始化 3 数组初始化 inta 5 1 2 3 4 5 数组不能作为一个整体被赋值 inta 5 a 5 1 2 3 4 5 不等价 举例 inta 5 1 2 3 4 5 a 1 a 4 7 常见错误 数组一旦定义 按照数组元素的先后顺序和数据类型 会在内存分配一片连续的存储空间存放数组元素 数组的存储 例如 inta 5 例如 floata 5 a 0 a 1 a 2 a 3 a 4 2个字节 存储每个数据元素占多少字节由数组元素的类型决定 int 占2个字节 float 占4个字节 低地址 高地址 2 一共占 字节 inta 5 1 2 3 4 5 数组的概念 数组的初始与数组存储 a 0 a 1 a 2 a 3 a 4 intb a 0 取a 0 3 写 数组元素的引用与数组存储 a 0 a 1 a 2 a 3 a 4 举例 例如 输入10个整数 反向输出这10个数 数组的应用 用数组 main inta 10 i for i 0 i 0 i printf d a i 不用数组只能正向输出 main intx sum 0 for i 0 i 9 i scanf f n 不用数组只能输入后 立即将数据处理或输出数组的优点是能先保存数据 再进行处理 最后输出处理结果 作业 例如 输入10个整数 求最大值 最小值和平均值 并找出最大值与最小值在这组数中的位置 数组的应用 数据结构 算法 1 输入数组的数据2 求最大值及位置 最小值及位置 和总值3 输出结果 inta 10 max min maxid minid 循环 循环 排序算法 将无序的数 排成有序数的算法例如 984520 024589冒泡排序 两两比较 较大数放在后 较小的数往上冒 数组的应用 一共6个数 第一轮需要比较5次 一轮过后 最大的数沉底 按照这种方法可依次得到第二轮 第三轮 的冒泡结果第二轮过后 将第二大的数放在倒数第二位置 数组的应用 第1轮结果 第2轮结果 第3轮结果 第4轮结果 第5轮结果 一共N 6 个数 需要比较m N 1 5 轮每轮比较 N m 次 第1轮比较5次 第2轮比较4次 第5轮比较1次 数据结构采用一维数组 在不断的两两比较过程中 调整各元素的位置即可 程序设计双重循环用外层循环控制冒泡的轮数m为N 1 6 1 次用内层循环来控制在第m轮冒泡过程中需要进行的大小比较次数为N m 6 m 次 程序实现要点 6 2数组应用举例 排序问题 输出6个数 从键盘任意输入6个数 main inta 6 inti m t n printf inputnumbers N 6 n for n 0 na i 1 t a i a i a i 1 a i 1 t printf thesortednumbers n for n 0 n 10 n printf d a n 6 2数组应用举例 排序问题 轮 共26页第23页 第六章数组 1 一维数组的定义inta 5 2 一维数组元素的引用a 0 a 4 提取数组元素 printf d a 0 b a 0 存放数据元素 scanf d 小结 一维数组 用于存放一组存在关联的固定数量的数据 共26页第24页 第六章数组 2 二维数组数组的定义数组元素的引用数组的初始化 二维数组 用于存储多行和多列数据 6 3二维数组 例如 inta 3 3 2 4个学生 5门课的成绩 1 矩阵 例如 inta 4 5 总行数 总列数 二维数组定义的格式 6 3二维数组 数组的定义 声明存在一个数组 说明其名称 长度和类型 类型说明符数组名 常量表达式1 常量表达式2 第一维的长度 数组总行数 数组a可以用于存放4行5列的数据 第二维的长度 数组总列数 例如 inta 4 5 6774807670707385707465707680877780908690 inta 4 5 inta 5 4 不等价 数据元素的总个数 常量表达式1 常量表达式2 只需要给出一维的前后次序就能确定一个数组元素 6 3二维数组 例如 inta 3 3 要确定行和列两个方向的次序才能确定一个数组元素 例如 mark 0 例如 a 0 0 二维数组 行号 列号 一维数组 二维数组在概念上是二维的 两个下标可分别在两个方向上变化 第一个下标控制行 第二个下标控制列 2 二维数组元素的引用 引用格式 数组名 下标1 下标2 例如 inta 3 4 总共3行4列数据 可引用的数组元素 提取数据 printf d a 0 0 或intb a 0 0 存放数据 scanf d 数据所在行0 总行数 1 数据所在列0 总列数 1 a 1 2 表示第2行第3列数据 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 6 3二维数组 注意 下标从0开始 a 3 1 a 1 4 错误 和一维数组一样 只能逐个对数组元素进行存取 举例 输入任意12个整数 存放在一个3行4列的二维数组 并且依次输出 二维数组元素的引用 main inta 3 4 intI j for i 0 i 2 i for j 0 j 3 j scanf d 如何对整个二维数组的数据进行存取 数据结构 inta 3 4 算法 1 输入12个数 依次存放在数组中2 输出数组 外循环 inti 0to2控制行i 内循环 intj 0to3控制列输入数据 存于数据元素a i j j 常用两重循环对数组中的数组元素逐个输入 输出 或进行处理 输入 2 二维数组元素的初始化 6 3二维数组 1 将所有数据写在一个 内 按顺序赋值例 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 2 按行给数组元素赋初值例 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 3 按行对部分元素赋初值例 staticinta 3 4 1 0 6 0 0 11 4 给所有元素赋初值时 可以省略第一维的长度 但不能省第二维例 staticinta 4 1 2 3 4 5 6 7 8 9 10 11 12 在定义数组时 给数组赋予一个初始值 6 3二维数组 二维数组的存储 例如 inta 3 4 二维数组的存储按行存放 a 1 1 a 1 0 a 1 2 a 1 3 a 2 0 a 2 3 从第一行开始 从左到右存放 到行末 转向下一行第一个元素 又从左到右依次存放 直到最后一个元素 6 3二维数组 注意 1 二维数组可以看成是由若干一维数组组成的数组 a 0 a 1 a 2 a 0 代表一个一维数组 对应二维数组里的一行 a 0 可把二维看做一维 举例 已知矩阵A 编程实现矩阵的转置 二维数组元素的引用 main inta 3 4 2 3 5 8 1 0 1 2 4 5 7 6 inti j for i 0 i 2 i for j 0 j 3 j b j i a i j inta 3 4 初始化intb 4 3 算法 1 转置 将数据逐行逐列的复制过去2 输出结果 A和B 外循环 inti 0to2控制行i 内循环 intj 0to3控制列b j i a i j j a 0 1 b 数据结构 main inta 3 4 2 3 5 8 1 0 1 2 4 5 7 6 inti j for i 0 i 2 i for j 0 j 3 j b j i a i j printf A n for i 0 i 2 i for j 0 j 3 j printf 4d a i j printf n printf B n for i 0 i 2 i for j 0 j 3 j printf 4d b i j printf n 三个并列的两重循环 转置 输出A 输出B 作业 输入4行4列的二维数组 求 计算主对角线各元素之和 计算辅对角线各元素之和 二维数组元素的引用 2358101245761023 主对角线元素 a 0 0 a 1 1 a 2 2 a 3 3 辅对角线元素 a 0 3 a 1 2 a 2 1 a 3 0 i j i j 3 i 0to3j 0to3if i j sum sum a i j 共26页第36页 第六章数组 1 二维数组的定义inta 5 4 2 二维数组元素的引用a 0 0 a 4 3 提取数组元素 printf d a i j b a i j 存放数据元素 scanf d 数组的输入和输出只能逐一对每个数组元素 所以经常用两重循环 外循环控制行 内循环控制列3 二维数组的初始 小结 二维数组 用于存放多行多列的数据 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 共26页第37页 第六章数组 3 字符数组字符数组与字符串字符数组的初始化字符数组的输入和输出字符串处理函数 6 4字符数组 字符数组 字符数组定义 chara 8 字符数组初始化 chara 8 s t u d e n t 0 字符数组引用 a 0 a 7 每个数组元素存放一个字符存取字符 charb a 0 a 0 b 字符类型 char 的数组 因可用于存放字符串 所以单独讨论 字符数组与字符串 字符串用字符数组存放chara 8 student 仅一个字符 字符用字符变量存放charch a 6 4字符数组 字符数组 一维字符数组存放一个字符串 字符串用字符数组存放chara 8 student 二维字符数组存放若干个字符串 chara 3 8 student worker teacher a 0 就是 student 6 4字符数组 字符数组的初始化 1 将所有字符逐一写在 内 按顺序初始例 charstr 8 s t u d e n t 2 用字符串来初始例 charstr 8 student 或者charstr 8 student 第一种初始结果和第二种初始结果等价吗 不一样 因为对于字符串 系统会在最后自动加 0 charstr 8 s t u d e n t 0 等价 这样 数组str中存放的就是 student 初始化一个字符数组存放一个字符串 末尾加 0 6 4字符数组 字符数组的输入 字符串的输入 1 用循环将单个字符逐个输入格式说明用 c charstr 15 inti for i 0 i 14 i scanf c 输入 Iamastudent 回车 2 用 s将整个字符串输入 输入项直接写数组名 charstr 15 scanf s 特殊 其他类型的数组不能这样输入 这与其他类型的数组输入方式相同 输入 student 回车 输入 Iamastudent 回车 s遇到空格和回车终止 所以只能输入不含空格字符串 结果 str是 I 结果 str是 student 6 4字符数组 字符数组的输入 字符串的输入 3 用函数gets 输入 不用循环就可以输入整个串 charstr 15 gets str 输入 Iamastudent 回车 特有方式 允许字符中包含空格 以回车结束输入 结果 str是 Iamastudent 6 4字符数组 字符数组的输出 字符串的输出 1 用循环将单个字符逐个输出格式说明用 c charstr 15 Iamastudent inti for i 0 i 14 i printf c str i 输出 Iamastudent 2 用 s将整个字符串输出 输出项直接写数组名 charstr 15 Iamastudent scanf s str 特殊 其他类型的数组不能这样输出 这与其他类型的数组输出方式相同 输出没有空格的问题 6 4字符数组 字符数组的输出 字符串的输出 3 用函数puts 输出整个串 charstr 15 Iamastudent puts str 输出 Iamastudent 特有方式 举例 将字符串str2连接到字符串str1之后 str1是 thisisac str2是 programe 二维数组元素的引用 main charstr1 25 thisisac charstr2 9 programe inti 0 j 0 while str1 i 0 i while str2 j 0 str1 i str2 j i j puts str1 i 0 while str1 i 0 i 数据结构 charstr1 25 str2 9 charstr1 25 thisisac charstr2 9 programe 算法 1 找到str1的末尾2 逐一将str2的字符拷贝到str1后面3 输出str1 thisisac programe j 0 while str2 j 0 str1 i str2 j j i 举例 用二维字符数组输入输出三个字符串 字符串长度不超过10 二维数组元素的引用 main charstr 3 10 inti j for i 0 i 2 i gets str i for i 0 i 2 i j 0 while str i j 0 printf c str i j j printf n for i 0 i 2 i gets str1 i 数据结构 charstr 3 10 算法 1 逐个输入每个字符串 并存放到数组用 可用gets 可用双重循环2 逐一将数组中字符串输出可用puts 可用双重循环 for i 0 i 2 i j 0 while str1 i j 0 printf c str1 i j j printf n for i 0 i 2 i puts str1 i for i 0 i 2 i printf s str1 i 6 4字符数组 字符串处理函数 1 字符串复制 strcpy 字符数组1 字符数组2 将字符数组2中的字符串复制到字符数组1中 str1 str2 str1 Iamastudent 可以用strcpy str1 str2 来实现把字符串2赋给字符串1 charstr1 15 charstr2 15 Iamastudent strcpy str1 str2 strcpy str1 Iamastudent 错误 字符串间不能直接赋值 系统提供的实现特定功能的字符串处理函数 strcpy strcat strcmp strlen 6 4字符数组 2 字符串连接 strcat 字符数组1 字符数组2 将字符数组2中的字符串连接到字符数组1后面 charstr1 25 Iama charstr2 8 student strcat str1 str2 结果 str1是Iamastudent 举例 将字符串str2连接到字符串str1之后 str1是 thisisac str2是 programe 二维数组元素的引用 main charstr1 25 thisisac charstr2 9 programe strcat str1 str2 puts str1 数据结构 charstr1 25 str2 9 charstr1 25 thisisac charstr2 9 programe thisisac programe 6 4字符数组 3 字符串长度 strlen 字符数组 求字符数组中实际存放的字符个数 不包括字符串结束标志 0 注意 不一定等于数组的长度 charstr 20 Iamastudent inti strlen str 结果 i是14 6 4字符数组 4 字符串比较 strcmp 字符串1 字符串2 比较两个字符串的大小 例如 ctrcmp str1 str2 字符串的比较规则 两个字符串 从左到右逐个字符比较它们的ASCLL码1 字符串1比字符串2大 结果大于0 2 字符串1比字符串2小 结果小于03 字符串1与字符串2相等 结果是0 例 strcmp ACD ABC ACD ABC 例 strcmp ABC Abc 例 strcmp ABC ABC 字符数量 对应字符完全相等 6 4字符数组 2 字符串比较 strcmp 字符串1 字符串2 比较两个字符串的大小 例如 ctrcmp str1 str2 C语言中不允许对字符串用关系运算符作如下方式的直接比较 str1 str2 str1 str2或者str1 str2 错误 共26页第53页 第六章数组 第一节数组的概念第二节一维数组第三节二维数组第四节字符数组 6 4字符数组 补充 charstr 1 2 3 0 4 5 0 printf s str 输出结果是 printf c str 错误 printf c str 0 123 1 6 4字符数组 从键盘输入一个四位整数 把该整数颠倒过来输出 1234 4321 重点 将每一位都拆分出来 算法 数据结构 用一个整型变量存放这个四位的整数intn 定义4个变量分别存放每一位的数字 int

温馨提示

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

评论

0/150

提交评论