




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chap7数组 7 1排序问题7 2找出矩阵中最大值所在的位置7 3进制转换 本章要点 什么是数组 为什么要使用数组 如何定义数组 如何引用数组元素 二维数组的元素在内存中按什么方式存放 什么是字符串 字符串结束符的作用是什么 如何实现字符串的存储和操作 包括字符串的输入和输出 怎样理解C语言将字符串作为一个特殊的一维字符数组 输入一个正整数n 1 n 10 再输入n个整数 用选择法将它们从小到大排序后输出 7 1 1程序解析7 1 2一维数组的定义和引用7 1 3一维数组的初始化7 1 4使用一维数组编程 7 1排序问题 7 1 1程序解析 排序 includeintmain void inti index k n temp inta 10 定义1个数组a 它有10个整型元素 printf Entern scanf d Entern 10Enter10integers 3528122890 17Aftersorted 101235782289 for i 0 i n i printf d a i 数组 相同类型数据的有序集合 在内存中连续存放 由数组名和下标惟一地确定每个数组元素每个元素都属于同一类型一批相同类型的变量使用同一个数组变量名 用下标来相互区分 优点 表述简洁 可读性高 便于使用循环结构 数组 7 1 2一维数组的定义和引用 1 定义类型名数组名 数组长度 类型名 数组元素的类型数组名 数组 变量 的名称 标识符数组长度 常量表达式 给定数组的大小inta 10 定义一个含有10个整型元素的数组acharc 200 定义一个含有200个字符元素的数组cfloatf 5 定义一个含有5个浮点型元素的数组f 2 引用 先定义 后使用只能引用单个的数组元素 不能一次引用整个数组数组名 下标 下标 整型表达式取值范围 0 数组长度 1 inta 10 10个元素 a 0 a 1 a 9 数组元素的使用方法与同类型的变量相同scanf d 下标不要越界不能使用a 10 定义数组类型名数组名 数组长度 引用数组元素数组名 下标 inta 10 a 0 a 9 0 a k temp 区分数组的定义和数组元素的引用 下标不要越界 数组长度为常量 7 1 3一维数组的初始化 定义数组时 对数组元素赋初值类型名数组名 数组长度 初值表 inta 10 1 2 3 4 5 6 7 8 9 10 a 0 1 a 1 2 a 9 10静态数组 动态数组的初始化staticintb 5 1 2 3 4 5 静态存储的数组如果没有初始化 所有元素自动赋0staticintb 5 动态存储的数组如果没有初始化 所有元素为随机值autointc 5 staticintb 5 1 2 3 b 0 1 b 1 2 b 2 3 b 3 0 b 4 0autointfib 20 0 1 fib 0 0 fib 1 1 其余元素不确定如果对全部元素都赋初值 可以省略数组长度inta 10 0 1 2 3 4 5 6 7 8 9 针对部分元素的初始化 建议不要省略数组长度 7 1 4使用一维数组编程 数组和循环for i 0 i n i printf d a i 数组下标作为循环变量 通过循环 逐个处理数组元素 一维数组示例 例7 2用数组计算fibonacci数列的前20个数 并按每行打印5个数的格式输出 1 1 2 3 5 例7 3输入5个整数 将它们存入数组a中 再输入1个数x 然后在数组中查找x 如果找到 输出相应的下标 否则 输出 NotFound 例7 4输入n n 10 再输入n个数 1 求最小值 2 求最小值和它所对应的下标 3 将最小值与第一个数交换 输出交换后的n个数例7 1输入n n 10 再输入n个数 用选择法将它们从小到大排序后输出 用数组计算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 例7 2计算fibonacci数列 includeintmain void 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 5个数换行 printf n return0 例7 2源程序 11235813213455891442333776109871597258441816765 输入5个整数 将它们存入数组a中 再输入1个数x 然后在数组中查找x 如果找到 输出相应的下标 否则 输出 NotFound 输入 298969输出 1输入 298967输出 NotFound 例7 3在数组中查找一个给定的数 includeintmain void inti flag x inta 5 printf Enter5integers for i 0 i 5 i scanf d 例7 3源程序 Enter5integers 29819Enterx 9Indexis1 Enter5integers 29819Enterx 7NotFound includeintmain void inti flag x inta 5 printf Enter5integers for i 0 i 5 i scanf d 例7 3思考 1 Enter5integers 29819Enterx 9Indexis1Indexis4 includeintmain void inti sub x inta 5 printf Enter5integers for i 0 i 5 i scanf d 例7 3思考 2 Enter5integers 29819Enterx 9Indexis4 includeintmain void inti min n inta 10 printf Entern scanf d 例7 4 1 求最小值 Entern 6Enter6integers 29 1816minis 1 输入n n 10 再输入n个数 输出最小值和它所对应的下标 用index记录最小值对应的下标a index 就是最小值 例7 4 2 求最小值及其下标 includeintmain void inti index n inta 10 printf Entern scanf d 求最小值及下标 Entern 6Enter6integers 29 1816minis 1subis2 输入n na 0 例7 4 3 交换最小值 例7 1选择法排序 输入n n 10 再输入n个数 用选择法将它们从小到大排序后输出 设n 535281 1 15283 2 2583 3 385 4 58 35281 n 5 5个数 a 0 a 4 中找最小数 与a 0 交换 1 15283a 4 a 0 4个数 a 1 a 4 中找最小数 与a 1 交换 2 12583a 2 a 1 3个数 a 2 a 4 中找最小数 与a 2 交换 3 12385a 4 a 2 2个数 a 3 a 4 中找最小数 与a 3 交换 4 12358a 4 a 3 选择法 1 1 n个数 a 0 a n 1 中找最小数 与a 0 交换 2 n 1个数 a 1 a n 1 中找最小数 与a 1 交换 n 1 2个数 a n 2 a n 1 中找最小数 与a n 2 交换 1 5个数 a 0 a 4 中找最小数 与a 0 交换 2 4个数 a 1 a 4 中找最小数 与a 1 交换 3 3个数 a 2 a 4 中找最小数 与a 2 交换 4 2个数 a 3 a 4 中找最小数 与a 3 交换 选择法 2 流程图 选择法排序 程序段 for k 0 k n 1 k index k for i k 1 i n i if a i a index index i temp a index a index a k a k temp Entern 5Enter10integers 35281Aftersorted 12358 将1个3 2的矩阵存入1个3 2的二维数组中 找出最大值以及它的行下标和列下标 并输出该矩阵 7 2 1程序解析7 2 2二维数组的定义和引用7 2 3二维数组的初始化7 2 4使用二维数组编程 7 2找出矩阵中最大值所在的位置 7 2 1程序解析 求矩阵的最大值 例7 5将1个3 2的矩阵存入1个3 2的二维数组中 找出最大值以及它的行下标和列下标 并输出该矩阵 row记录最大值的行下标Col最大值的列下标a row col 就是最大值 例7 5源程序 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 二维数组 多维数组的空间想象 二维数组 一个表格或一个平面矩阵 一维数组 一列长表或一个向量 多维数组 多维空间的一个数据列阵 三维数组 三维空间的一个方阵 7 2 2二维数组的定义和引用 1 定义类型名数组名 行长度 列长度 inta 3 2 定义1个二维数组a 3行2列 6个元素intb 5 10 定义1个二维数组a 5行10列 50个元素 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 下标不要越界 二维数组在内存中的存放方式 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 7 2 3二维数组的初始化 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 省略行长度对全部元素都赋了初值 inta 3 1 2 3 4 5 6 7 8 9 或分行赋初值时 在初值表中列出了全部行staticintb 3 1 2 3 4 5 建议不要省略 数组a123456789 数组b123000450000 7 2 4使用二维数组编程 行下标和列下标分别做为循环变量 通过二重循环 遍历二维数组通常将行下标做为外循环的循环变量列下标内循环 定义1个3 2的二维数组a 数组元素的值由下式给出 按矩阵的形式输出a a i j i j 0 i 2 0 j 1 例7 6生成一个矩阵并输出 inta 3 2 a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 011223 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 a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 i 0j 0i 0j 1i 1j 0i 1j 1i 2j 0i 2j 1 例7 6源程序 011223 二维数组的输入 例7 5中 inta 3 2 for i 0 i 3 i for j 0 j 2 j scanf d a 0 0 a 0 1 a 1 0 a 1 1 a 2 0 a 2 1 for j 0 j 2 j for i 0 i 3 i scanf d Enter6integers 3210 96 13210 96 1max a 1 0 10 Enter6integers 210 96 13 92610 1max a 2 0 10 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 输入一个正整数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 7方阵转置 includeintmain void inti j n temp inta 6 6 printf Entern scanf d 例7 7源程序 行列互换 for i 0 i n i for j 0 j n j if i j temp a i j a i j a j i a j i temp i 0147256389 i 1147258369 例7 7说明 for j i j n j 行列互换 for i 0 i n i for j 0 j n j temp a i j a i j a j i a j i temp 123456789 例7 7思考 i 0147256389 i 1127458369 i 2123456789 例7 8日期计算 自定义1个函数day of year year month day 计算并返回年year 月month和日day对应的是该年的第几天 day of year 2000 3 1 返回61day of year 1981 3 1 返回60分析 月0123 1112非闰年03128313031闰年03129313031 inttab 2 13 0 31 28 31 30 31 30 31 31 30 31 30 31 0 31 29 31 30 31 30 31 31 30 31 30 31 例7 8源程序 intday of year intyear intmonth intday intk leap inttab 2 13 0 31 28 31 30 31 30 31 31 30 31 30 31 0 31 29 31 30 31 30 31 31 30 31 30 31 leap year 4 0 例7 9输入一个以回车结束的字符串 少于10个字符 它由数字字符组成 将该字符串转换成整数后输出 7 3 1程序解析7 3 2一维字符数组7 3 3字符串 7 3进制转换 7 3 1程序解析 进制转换 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 7 3 2一维字符数组 字符串的存储和运算可以用一维字符数组实现一维字符数组的定义 引用 初始化与其他类型的一维数组一样 charstr 80 定义一个含有80个字符型元素的数组strchart 5 H a p p y 初始化数组t 输出数组t的所有元素for i 0 i 5 i putchar t i 一维字符数组 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 7 3 3字符串 字符串常量用一对双引号括起来的字符序列一个字符串结束符 0 Happy 6个字符 H a p p y 0 有效字符 字符串结束符 字符串的有效长度 有效字符的个数 字符串与一维字符数组 字符串 一个特殊的一维字符数组把字符串放入一维字符数组 存储 对字符串的操作 对字符数组的操作 1 字符串的存储 数组初始化 字符串可以存放在一维字符数组中staticchars 6 H a p p y 0 字符数组初始化 用字符串常量staticchars 6 Happy staticchars 6 Happy 数组长度 字符串的有效长度 1chart 5 Happy 能存入t吗 字符串的存储 autochars 80 Happy 字符串遇 0 结束第一个 0 前面的所有字符和 0 一起构成了字符串 Happy 0 之后的其他数组元素与该字符串无关 字符串由有效字符和字符串结束符 0 组成 2 对字符串的操作 把字符串放入一维字符数组 存储 对字符串的操作 对字符数组的操作普通字符数组 数组元素的个数是确定的 一般用下标控制循环字符串 没有显式地给出有效字符的个数 只规定在字符串结束符 0 之前的字符都是字符串的有效字符 一般用结束符 0 来控制循环循环条件 s i 0 计算字符串的有效长度 并输出该字符串 字符串的有效长度 有效字符的个数数组中第一个 0 前面的字符个数 例6 10计算字符串的有效长度 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 例7 10源程序 循环条件 len 5Happy for i 0 s i 0 i putchar s i for i 0 i 80 i putchar s i for i 0 i len i putchar s i 输出字符串 3 字符串的存储 赋值和输入 把字符串放入一维字符数组 存储 对字符串的操作 对字符数组的操作存储数组初始化staticchars 6 Hello 赋值s 0 a s 1 0 或者staticchars 6 a a 2个字符 a 和 0 a 1个字符常量 区分 a 和 a 字符串的输入 字符串的存储字符数组初始化 staticchars 6 Happy 赋值 s 0 a s 1 0 输入 0 代表空操作 无法输入输入时 设定一个输入结束符将输入结束符转换为字符串结束符 0 输入一个以回车结束的字符串 少于80个字符 统计其中数字字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国传媒大学《国际市场营销A》2023-2024学年第二学期期末试卷
- 《商品DEF操作指南》课件
- 武夷山职业学院《影视非线性编辑》2023-2024学年第二学期期末试卷
- 江西信息应用职业技术学院《GPS测量原理及应用实验》2023-2024学年第二学期期末试卷
- 鱼塘堤坝规划方案范本
- 荆门职业学院《中国古代文学作品选(二)》2023-2024学年第一学期期末试卷
- 城市钻孔桩施工方案
- 2025合同样本个人借款合同范本管理资料
- 电梯门板保养方案范本
- 2025至2031年中国全自动门行业投资前景及策略咨询研究报告
- 二手房公积金贷款合同书范本(2024版)
- 典型任务-人力制动机制动工作课件讲解
- 2024-2029全球及中国柚子果实提取物行业市场发展分析及前景趋势与投资发展研究报告
- 江苏省常州市溧阳市2023-2024学年八年级下学期期中数学试题【含答案解析】
- 河南省鹤壁市校联考2023-2024学年八年级下学期期中语文试题
- 公共部位装修合同
- 行政复议法-形考作业1-国开(ZJ)-参考资料
- 山西省朔州市怀仁县2024届小升初语文检测卷含答案
- JTJ-T-257-1996塑料排水板质量检验标准-PDF解密
- 四年级四年级下册阅读理解20篇(附带答案解析)经典
- 4.2实验探究加速度与力质量的关系(课件)高中物理
评论
0/150
提交评论