C语言集合数据处理.ppt

上传人:max****ui 文档编号:6335319 上传时间:2020-02-23 格式:PPT 页数:55 大小:485KB
返回 下载 相关 举报
C语言集合数据处理.ppt_第1页
第1页 / 共55页
C语言集合数据处理.ppt_第2页
第2页 / 共55页
C语言集合数据处理.ppt_第3页
第3页 / 共55页
点击查看更多>>
资源描述
0 第8章集合数据处理 2020年2月23日 本章学习要点 什么是数组 为什么要使用数组 如何定义数组 如何引用数组元素 二维数组的元素在内存中按什么方式存放 数据的搜索与排序 2020年2月23日 问题 输入一个正整数n 1 n 10 再输入n个整数 用选择法将它们从小到大排序后输出 课题引入 2020年2月23日 8 1一维数组 1 一维数组的定义和引用 1 定义类型名数组名 数组长度 类型名 数组元素的类型数组名 数组 变量 的名称 标识符数组长度 常量表达式 给定数组的大小inta 10 charc 200 floatf 5 2020年2月23日 数组 相同类型数据的有序集合 在内存中连续存放 由数组名和下标惟一地确定每个数组元素每个元素都属于同一类型一批相同类型的变量使用同一个数组变量名 用下标来相互区分 优点 表述简洁 可读性高 便于使用循环结构 2020年2月23日 2 引用 先定义 后使用只能引用单个的数组元素 不能一次引用整个数组数组名 下标 取值范围 0 数组长度 1 inta 10 10个元素 a 0 a 1 a 9 数组元素的使用方法与同类型的变量相同a 0 1 a 1 2 printf d a 0 下标不要越界不能使用a 10 2020年2月23日 定义数组类型名数组名 数组长度 引用数组元素数组名 下标 inta 10 a 0 a 9 0 a k temp 区分数组的定义和数组元素的引用 下标不要越界 数组长度为常量 2020年2月23日 2一维数组的初始化 定义数组时 对数组元素赋初值类型名数组名 数组长度 初值表 inta 10 1 2 3 4 5 6 7 8 9 10 intb 5 1 2 3 4 5 2020年2月23日 intb 5 1 2 3 b 0 1 b 1 2 b 2 3 b 3 0 b 4 0intf 5 0 0 0 0 0 等价于intf 5 0 如果对全部元素都赋初值 可以省略数组长度inta 10 0 1 2 3 4 5 6 7 8 9 针对部分元素的初始化 建议不要省略数组长度 2020年2月23日 3 一维数组的应用 数组和循环for i 0 i n i printf d a i 数组下标作为循环变量 通过循环 逐个处理数组元素 2020年2月23日 例1用数组进行统计计算 从键盘输入10个人的数学考试成绩 并存入到一维数组中 然后求出成绩总和和平均分 include defineN10voidmain doublea N 0 doublesum 0 average inti for i 0 i i scanf lf 2020年2月23日 用数组计算fibonacci数列的前20个数 并按每行打印5个数的格式输出 1 1 2 3 5 8 13 分析 用数组计算并存放fibonacci数列的前20个数f 0 f 1 1f n f n 1 f n 2 2 n 19 例2计算fibonacci数列 includeintmain inti intfib 20 1 1 for i 2 i 20 i fib i fib i 1 fib i 2 for i 0 i 20 i printf 6d fib i if i 1 5 0 printf n return0 11235813213455891442333776109871597258441816765 2020年2月23日 思考与练习 问题 如果想将数组a的值全体赋给数组b 用怎样的方法 intifor i 0 i 8 i i 1 b i a i 2020年2月23日 4 一维数组与指向数组元素的指针 inta 6 p 数组名代表一个地址 它的值是数组首元素的地址 基地址 a i是距数组a的基地址的第i个偏移 sum 0 for i 0 i 100 i sum sum a i a i 任何由数组下标来实现的操作都能用指针来完成inta 100 p p a 或p a i a i a i a i p i p i p i p i p a sum 0 for i 0 i 100 i sum sum p i 等价 includeintmain inti a 10 p longsum 0 printf Enter10integers for i 0 i 10 i scanf d 例3使用指针计算数组元素之和 Enter10integers 10987654321sum 55 p p p p 2020年2月23日 输入5个整数 将它们存入数组a中 再输入1个数x 然后在数组中查找x 如果找到 输出相应的下标 否则 输出 NotFound 输入 298969输出 1输入 298967输出 NotFound 例3在数组中查找一个给定的数 2020年2月23日 includeintmain void inti flag x inta 5 printf Enter5integers for i 0 i 5 i scanf d Enter5integers 29819Enterx 9Indexis1 Enter5integers 29819Enterx 7NotFound 2020年2月23日 例4输入n n 10 再输入n个数 1 求最小值 2 求最小值和它所对应的下标 3 将最小值与第一个数交换 输出交换后的n个数 2020年2月23日 includeintmain void inti index n inta 10 printf Entern scanf d Entern 6Enter6integers 29 1816minis 1subis2 2020年2月23日 例1选择法排序 输入n n 10 再输入n个数 用选择法将它们从小到大排序后输出 设n 535281 1 15283 2 2583 3 385 4 58 2020年2月23日 includeintmain void inti index k n temp inta 10 定义1个数组a 它有10个整型元素 printf Entern scanf d Entern 10Enter10integers 3528122890 17Aftersorted 101235782289 2020年2月23日 例5将1个3 2的矩阵存入1个3 2的二维数组中 找出最大值以及它的行下标和列下标 并输出该矩阵 7 2找出矩阵中最大值所在的位置 2020年2月23日 二维数组 多维数组的空间想象 二维数组 一个表格或一个平面矩阵 一维数组 一列长表或一个向量 多维数组 多维空间的一个数据列阵 三维数组 三维空间的一个方阵 2020年2月23日 1二维数组的定义和引用 1 定义类型名数组名 行长度 列长度 inta 3 2 定义1个二维数组a 3行2列 6个元素intb 5 10 定义1个二维数组a 5行10列 50个元素 2020年2月23日 2 引用 先定义 后使用数组元素的引用 数组名 行下标 列下标 行下标和列下标 整型表达式行下标的取值范围是 0 行长度 1 列下标的取值范围是 0 列长度 1 inta 3 2 3行2列 6个元素a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 下标不要越界 2020年2月23日 二维数组在内存中的存放方式 inta 3 2 3行2列 6个元素表示1个3行2列的矩阵a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 二维数组的元素在内存中按行 列方式存放a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 2020年2月23日 2二维数组的初始化 1 分行赋初值inta 3 3 1 2 3 4 5 6 7 8 9 staticintb 4 3 1 2 3 4 5 数组a123456789 数组b123000450000 2 顺序赋初值inta 3 3 1 2 3 4 5 6 7 8 9 staticintb 4 3 1 2 3 0 0 0 4 5 2020年2月23日 3 省略行长度对全部元素都赋了初值 inta 3 1 2 3 4 5 6 7 8 9 或分行赋初值时 在初值表中列出了全部行staticintb 3 1 2 3 4 5 建议不要省略 数组a123456789 数组b123000450000 2020年2月23日 3使用二维数组编程 例6生成一个矩阵并输出定义1个3 2的二维数组a 数组元素的值由下式给出 按矩阵的形式输出a a i j i j 0 i 2 0 j 1 inta 3 2 a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 011223 2020年2月23日 includeintmain void inti j inta 3 2 for i 0 i 3 i for j 0 j 2 j a i j i j for i 0 i 3 i for j 0 j 2 j printf 4d a i j printf n return0 2020年2月23日 inta N N N是正整数a i j i j的取值范围 0 N 1 用二维数组a表示N N方阵时 对应关系 a 0 0 a 0 1 a 0 2 主对角线a 1 0 a 1 1 a 1 2 上三角a 2 0 a 2 1 a 2 2 下三角副对角线 矩阵与二维数组 i ji ji j N 1 2020年2月23日 输入一个正整数n 1 n 6 根据下式生成1个n n的方阵 然后将该方阵转置 行列互换 后输出 a i j i n j 1 0 i n 1 0 j n 1 分析 inta 6 6 n 3时 例7方阵转置 2020年2月23日 includeintmain void inti j n temp inta 6 6 printf Entern scanf d 2020年2月23日 例5将1个3 2的矩阵存入1个3 2的二维数组中 找出最大值以及它的行下标和列下标 并输出该矩阵 2020年2月23日 intmain void intcol i j row inta 3 2 printf Enter6integers n for i 0 ia row col row i col j printf max a d d d n row col a row col return0 Enter6integers 3210 96 13210 96 1max a 1 0 10 2020年2月23日 例9输入一个以回车结束的字符串 少于10个字符 它由数字字符组成 将该字符串转换成整数后输出 7 3进制转换 2020年2月23日 includeintmain void inti n chars 10 printf Enterastring 输入字符串 i 0 while s i getchar n i s i 0 n 0 将字符串转换为整数 for i 0 s i 0 i if s i 0 n n 10 s i 0 elsebreak printf digit d n n return0 Enterastring 123digit 123 2020年2月23日 1一维字符数组 字符串的存储和运算可以用一维字符数组实现一维字符数组的定义 引用 初始化与其他类型的一维数组一样 charstr 80 定义一个含有80个字符型元素的数组strchart 5 H a p p y 初始化数组t 输出数组t的所有元素for i 0 i 5 i putchar t i 2020年2月23日 chart 5 H a p p y staticchars 6 H a p p y staticchars 6 H a p p y 0 0代表字符 0 也就是ASCII码为0的字符staticchars 6 H a p p y 0 2020年2月23日 2字符串 字符串常量用一对双引号括起来的字符序列一个字符串结束符 0 Happy 6个字符 H a p p y 0 有效字符 字符串结束符 字符串的有效长度 有效字符的个数 2020年2月23日 字符串与一维字符数组 字符串 一个特殊的一维字符数组把字符串放入一维字符数组 存储 对字符串的操作 对字符数组的操作 2020年2月23日 1 字符串的存储 数组初始化 字符串可以存放在一维字符数组中staticchars 6 H a p p y 0 字符数组初始化 用字符串常量staticchars 6 Happy staticchars 6 Happy 数组长度 字符串的有效长度 1chart 5 Happy 能存入t吗 2020年2月23日 autochars 80 Happy 字符串遇 0 结束第一个 0 前面的所有字符和 0 一起构成了字符串 Happy 0 之后的其他数组元素与该字符串无关 字符串由有效字符和字符串结束符 0 组成 2020年2月23日 2 对字符串的操作 把字符串放入一维字符数组 存储 对字符串的操作 对字符数组的操作普通字符数组 数组元素的个数是确定的 一般用下标控制循环字符串 没有显式地给出有效字符的个数 只规定在字符串结束符 0 之前的字符都是字符串的有效字符 一般用结束符 0 来控制循环循环条件 s i 0 2020年2月23日 计算字符串的有效长度 并输出该字符串 分析 字符串的有效长度 有效字符的个数数组中第一个 0 前面的字符个数 例10计算字符串的有效长度 2020年2月23日 includeintmain void inti 0 len charstr 80 Happy 初始化 for i 0 str i 0 i len i printf len d n len for i 0 str i 0 i 输出字符串 putchar str i return0 len 5Happy 2020年2月23日 3 字符串的存储 赋值和输入 把字符串放入一维字符数组 存储 对字符串的操作 对字符数组的操作存储数组初始化staticchars 6 Hello 赋值s 0 a s 1 0 或者staticchars 6 a 输入 0 代表空操作 无法输入输入时 设定一个输入结束符将输入结束符转换为字符串结束符 0 a 2个字符 a 和 0 a 1个字符常量 区分 a 和 a 2020年2月23日 输入一个以回车结束的字符串 少于80个字符 统计其中数字字符的个数 分析 数组长度取上限80以 n 做为输入结束符 例11统计字符 2020年2月23日 includeintmain void intcount i charstr 80 printf Enterastring i 0 while str i getchar n i str i 0 输入结束符 字符串结束符 count 0 for i 0 str i 0 i if str i 0 count printf count d n count return0 Enterastring It s512 count 3 如何改变输入结束符 能省略str i 0 吗 2020年2月23日 例9输入一个以回车结束的字符串 少于10个字符 它由数字字符组成 将该字符串转换成整数后输出 2020年2月23日 includeintmain void inti n chars 10 printf Enterastring 输入字符串 i 0 while s i getchar n i s i 0 n 0 将字符串转换为整数 for i 0 s i 0 i if s i 0 n n 10 s i 0 elsebreak printf digit d n n return0 Enterastring 123digit 123 2020年2月23日 习题71 2 7 8题
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!