已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲教师贾月乐联系电话第六章数组 2 第六章数组 一维数组 6 1 二维数组 6 2 6 3 C语言程序设计 第一章C语言概述SCS SWPU 字符数组与字符串 3 为什么要使用数组 唉 有这么多不同主题的书 在哪里才能找到有关中国音乐的书呢 4 为什么要使用数组 文学类 计算机类 西方音乐类 中国音乐类 5 为什么要使用数组 数组的元素 容器中保存的物品 日常生活中的容器 程序中的数组 C语言程序设计 算法的描述SCS SWPU 6 6 1一维数组 C语言程序设计 算法的描述SCS SWPU 7 6 1 1一维数组的定义 C语言为这些数据 提供了一种构造数据类型 数组 所谓数组就是一组具有相同数据类型的数据的有序集合 存放一个学生的学习成绩存放一个班100个学生的成绩呢 这些数据的特点是 具有相同的数据类型 floats C语言程序设计 算法的描述SCS SWPU 8 1 数组名的定义遵循用户自定义标识符的要求 2 常量表达式中可以包括常量和符号常量 不能包含变量 defineSIZE10inta SIZE 1 定义格式 数据类型数组名 整型常量表达式 例如 intsocre 50 chara 20 定义格式说明 6 1 1一维数组的定义 C语言程序设计 算法的描述SCS SWPU 9 数组说明中其他常见的错误 floata 0 数组大小为0没有意义 intb 2 不能使用圆括号 defines10inta s floatf 5 ints 10 inta s floatb 3 4 intn scanf d 以下数组定义是否正确 6 1 1一维数组的定义 C语言程序设计 算法的描述SCS SWPU 10 2 一维数组在内存中的存放 每个数据元素占用的字节数 就是基本类型的字节数一个元素占4个字节 一维数组 floatmark 100 6 1 1一维数组的定义 数组名就是存放数组的首地址 C语言程序设计 算法的描述SCS SWPU 11 6 1 2一维数组元素的引用 定义 inta 3 则有3个整型变量 a 0 a 1 a 2 数组的下标都是从0开始 引用数组元素时下标可为任意表达式 动态决定访问哪个元素for i 0 i SIZE i a i 2 i 下标越界是大忌 定义 inta 10 那么数组元素为a 0 a 9 使用大于最大下标的下标 将访问数组以外的空间 那里的数据是未知的 系统不做下标越界检查 但可能带来严重后果sizeof可以用来获得数组大小 2 数组元素的引用 定义数组时用到的 数组名 常量表达式 引用数组元素时用到的 数组名 下标 是有区别的 例如 inta 10 t a 9 C语言程序设计 算法的描述SCS SWPU 12 6 1 3一维数组元素的初始化 3 一维数组的初始化 即 给数组元素赋初值1 定义数组的同时赋初值inta 5 12 34 56 78 9 2 给一部分元素赋初值inta 10 12 34 56 78 9 3 对全部数组元素赋初值 可以不指定数组长度inta 11 22 33 44 55 等价于 inta 5 11 22 33 44 55 后5个元素的值为0 a 0 12a 1 34a 2 56a 3 78a 4 9 C语言程序设计 算法的描述SCS SWPU 13 4 使一个数组中全部元素值为0inta 10 0 0 0 0 0 0 0 0 0 0 或inta 10 0 不能写成 inta 10 0 10 或inta 10 5 建议 数组大小使用宏常量 以适应未来可能的变化 defineSIZE10inta SIZE 6 1 3一维数组元素的初始化 C语言程序设计 算法的描述SCS SWPU 14 6 1 4一维数组的输入输出 只能逐个对数组元素进行操作 字符串数组例外 输入方法 设有定义 inta 10 i 输入第i个数组元素 scanf d 输入整个数组元素 for i 0 i 10 i scanf d 输出方法 输出第i个数组元素 printf d a i 输出整个数组元素 for i 0 i 10 i printf d a i 4 一维数组的输入和输出 C语言程序设计 算法的描述SCS SWPU 15 1 intn scanf d 3 floata 0 4 intb 2 5 intb 4 0 6 intb 0 0 0 9 inta 1 2 3 4 a 2 a 1 2 2 10 inta 1 2 3 4 a 2 a 2 2 2 以下数组操作格式是否正确 2 definen5inta n 7 inta 4 a 4 1 2 3 4 8 inta 4 a 3 2 6 1 4一维数组的输入输出 16 真题1 若有定义语句 intm 5 4 3 2 1 i 4 则下面对m数组元素的引用中错误的是 2008 9 A m i B m 2 2 C m m 0 D m m i 真题2 若要求定义具有10个int型元素的一维数组a 则下列定义语句中错误的是 2006 9 A def1neN10B definen5inta N inta 2 n C inta 5 5 D intn 10 a n 历年真题 17 真题3 下列程序的功能是 求出数组x中各相邻两个元素的和依次存放到a数组中 然后输出 请填空 2007 4 main intx 10 a 9 i for i 0 i 10 i scanf d x i 1 i 1 历年真题 例1 从键盘输入10个学生的成绩存放到数组score中 统计最高分数学生人数 并输出对应的下标分析 1 定义floatscore 10 最高分max 0 最高分人数count 0 2 循环 输入第i位学生的成绩score i 并与max比较 如果大于max 则max score i 3 循环 把每个学生成绩score i 与max比较 若相等则count 并输出下标i C语言程序设计 算法的描述SCS SWPU 18 6 1 5一维数组的应用举例 C语言程序设计 算法的描述SCS SWPU 19 includemain floatscore 10 max 0 intcount 0 i for i 0 i 10 i scanf f 统计成绩最高分 6 1 5一维数组的应用举例 例3 用冒泡排序法对6个整数进行从小到大排序如有数 9 8 5 4 2 0 C语言程序设计 算法的描述SCS SWPU 20 经过第一趟 共5次比较与交换 后 最大的数9已 沉底 然后进行对余下的前面5个数第二趟比较 6 1 5一维数组的应用举例 冒泡排序 C语言程序设计 算法的描述SCS SWPU 21 如果有n个数 则要进行n 1趟比较 在第1趟比较中要进行n 1次两两比较 在第j趟比较中要进行n j次两两比较 6 1 5一维数组的应用举例 冒泡排序 C语言程序设计 算法的描述SCS SWPU 22 程序流程图如下 6 1 5一维数组的应用举例 冒泡排序 0 C语言程序设计 算法的描述SCS SWPU 23 include defineN6voidmain inta N temp i j for i 0 ia i 1 temp a i a i a i 1 a i 1 temp for i 0 i N i printf 4d a i printf n 冒泡程序 6 1 5一维数组的应用举例 冒泡排序 C语言程序设计 算法的描述SCS SWPU 24 defineN6voidmain inta N 1 temp i j flag flag表示一遍扫描中是否进行交换for i 1 ia i 1 temp a i a i a i 1 a i 1 temp flag 1 if flag 0 break for i 1 i N i printf 4d a i printf n 改进冒泡程序 6 1 5一维数组的应用举例 冒泡排序 例4 输入一个整数m 查找一个数组中是否有该整数m方法一 顺序查找 C语言程序设计 算法的描述SCS SWPU 25 1 设查找数字m 26 若存在 输出所在数组的下标 否则给出提示 56 14 66 37 26 95 18 49 57 012345678 下标 56 14 66 37 26 95 18 49 57 012345678 下标 2 设查找数字m 56 6 1 5一维数组的应用举例 顺序查找 C语言程序设计 算法的描述SCS SWPU 26 开始 数组a N 下标i num i N num a i Y i N numisa i Y 结束 numisnotina N 6 1 5一维数组的应用举例 顺序查找 C语言程序设计 算法的描述SCS SWPU 27 include defineN10voidmain inta N 56 4 66 37 26 95 18 49 57 11 i num printf inputthenumyoufind n scanf d 6 1 5一维数组的应用举例 顺序查找 C语言程序设计 算法的描述SCS SWPU 28 折半查找的条件 必须是有序数列 即数组中的各元素已按数值大小按递增或递减次序排列 例4 输入一个整数m 查找一个数组中是否有该整数m方法二 折半查找 6 1 5一维数组的应用举例 折半查找 C语言程序设计 算法的描述SCS SWPU 29 08 14 23 37 46 55 68 79 91 08 14 23 37 46 55 68 79 91 08 14 23 37 46 55 68 79 91 08 14 23 37 46 55 68 79 91 012345678 下标 6 1 5一维数组的应用举例 折半查找 C语言程序设计 算法的描述SCS SWPU 30 08 14 23 37 46 55 68 79 91 08 14 23 37 46 55 68 79 91 08 14 23 37 46 55 68 79 91 012345678 85 下标 6 1 5一维数组的应用举例 折半查找 C语言程序设计 算法的描述SCS SWPU 31 开始 数组a N 下标low 0 上标high N 1 mid num low high mid low high 2 num a mid Y num a mid low mid 1 Y high mid 1 N N numisa mid Y 结束 numisnotina 6 1 5一维数组的应用举例 折半查找 C语言程序设计 算法的描述SCS SWPU 32 defineN10voidmain inta N 1 4 7 9 10 13 15 21 23 26 intup N 1 low 0 mid found i printf inputthemyoufind n scanf d 折半查找程序 C语言程序设计 算法的描述SCS SWPU 33 例2求Fibonacci 斐波纳契 数列 1 1 2 3 5 8 的前40个数 f 1 1f 2 1Fn Fn 1 Fn 2 n 3 include defineN40main intf N 1 1 i for i 2 i N i f i f i 1 f i 2 for i 0 i N i if i 5 0 printf n printf 12d f i printf n 6 1 5一维数组的应用举例 34 第六章数组 一维数组 6 1 二维数组 6 2 6 3 C语言程序设计 第一章C语言概述SCS SWPU 字符数组与字符串 C语言程序设计 算法的描述SCS SWPU 35 6 2二维数组 C语言程序设计 算法的描述SCS SWPU 36 6 2 1二维数组的定义 数 235678若 235678933468二维数组的定义 数据类型数组名 常量表达式1 常量表达式2 例如 inta 3 4 定义三行四列 共有12个元素 不能写成inta 3 4 b 5 10 用怎样的数组存储 用inta 6 可以存储 C语言程序设计 算法的描述SCS SWPU 37 在逻辑上可以把二维数组看成是一个具有行和列的表格或一个矩阵 如inta 4 5 二维数组a 4 5 的逻辑结构见表7 1 6 2 1二维数组的定义 C语言程序设计 算法的描述SCS SWPU 38 按行存放 即先顺序存放第一行的元素 再存放第二行的元素 二维数组在内存中的存放 下图表示对a 3 4 数组存放的顺序 6 2 1二维数组的定义 C语言程序设计 算法的描述SCS SWPU 39 6 2 2二维数组元素的引用 二维数组元素的表示形式为 数组名 下标 下标 例如 a 2 3 下标可以是整型表达式 如a 2 1 2 2 1 二维数组的元素照常按照普通变量使用即可例如 b 1 2 a 2 3 2 常出现的错误有 inta 3 4 定义a为3 4的数组 a 3 4 3 C语言程序设计 算法的描述SCS SWPU 40 6 2 3二维数组的初始化 二维数组的初始化有以下四种形式 分行进行初始化 不分行的初始化 省略第一维的定义 不省略第二维的定义 部分数组元素初始化 intb 3 1 2 3 4 5 6 intb 2 3 1 2 3 4 5 6 intb 2 3 1 2 3 4 5 6 C语言程序设计 算法的描述SCS SWPU 41 对部分元素赋初值 例如 inta 3 4 1 5 9 100050009000 也可以对各行中的某一元素赋初值 如inta 3 4 1 0 6 0 0 0 11 1000060000011 100056000000 也可以只对某几行元素赋初值 如 inta 3 4 1 5 6 6 2 3二维数组的初始化 C语言程序设计 算法的描述SCS SWPU 42 6 2 4二维数组的输入输出 用双重循环动态给二维数组赋初值或输出值例如 inta 3 4 for i 0 i 3 i for j 0 j 4 j scanf d 从键盘动态给二维数组元素赋初值 C语言程序设计 算法的描述SCS SWPU 43 地址值数组元素 b 0 0 b 0 1 b 0 2 b 1 0 b 1 1 b 1 2 b 2 0 b 2 1 b 2 2 3000H3002H3004H3006H3008H300AH300CH300EH3010H 例如 整型数组b 3 3 1 2 3 4 5 6 7 8 9 123 456 789 二维数组的定义 初始化 引用小结 C语言程序设计 算法的描述SCS SWPU 44 6 2 5二维数组的应用举例 例 将一个二维数组行和列元素互换 存到另一个二维数组中 1 定义变量 inta 2 3 1 2 3 4 5 6 b 3 2 i j 2 执行 b数组的内容转置赋值给array 即b j i a i j 3 输出b 分析 C语言程序设计 算法的描述SCS SWPU 45 main 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 printf arrayb n for i 0 i 2 i for j 0 j 1 j printf 5d b i j printf n 6 2 5二维数组的应用举例 如何实现矩阵加法计算 C语言程序设计 算法的描述SCS SWPU 46 例 编写程序计算两个3 4矩阵相加 并打印结果分析 从屏幕上分别输入3 4矩阵a和b的值定义矩阵c 利用双重循环 c i j a i j b i j 输出c i j 6 2 5二维数组的应用举例 47 历年真题 真题1 下列数组定义中错误的是 2006 4 A intx 2 3 0 B intx 2 3 1 2 3 4 5 6 C intx 3 1 2 3 4 5 6 D intx 2 3 1 2 3 4 5 6 真题2 有下列程序 2006 4 main inti t 3 9 8 7 6 5 4 3 2 1 for i 0 i 3 i printf d t 2 i i 程序执行后输出结果是 A 753B 357C 369D 751 48 真题3 若有定义语句 inta 3 6 按在内存的存放顺序 a数组的第10个元素是 2007 9 A a 0 4 B a 1 3 C a 0 3 D a 1 4 真题4 以下错误的定义语句是 2008 4 A intx 3 0 1 1 2 3 B intx 4 3 1 2 3 1 2 3 1 2 3 1 2 3 C intx 4 1 2 3 1 2 3 1 2 3 1 2 3 D intx 3 1 2 3 4 历年真题 49 真题5 有下列程序 2006 9 main intx 3 2 0 i for i 0 i 则输出结果为 A 200B 204C 240D 246 历年真题 50 第六章数组 一维数组 6 1 二维数组 6 2 6 3 C语言程序设计 第一章C语言概述SCS SWPU 字符数组与字符串 C语言程序设计 算法的描述SCS SWPU 51 6 3字符数组与字符串 C语言程序设计 算法的描述SCS SWPU 52 6 3 1字符数组 字符数组是每个元素存放一个字符型数据的数组 字符数组的定义和元素的引用方法与一般数组相同 1 字符数组的定义例如 chara 5 charb 3 5 2 字符数组的引用及初始化 例如 chara c chara 5 c h i n a charb 3 5 I m a b o y C语言程序设计 算法的描述SCS SWPU 53 6 3 1字符数组 初始化列表中的字符个数 数组长度 编译出错 初始化列表中的字符个数 数组长度 自动补空字符 0 如 chara 5 t h e chara 5 c h i n a charb 3 5 I m a b o y I m 00 a 00 b o y 00 C语言程序设计 算法的描述SCS SWPU 54 例输出一个字符串 程序如下 includevoidmain charc 10 I a m a b o y inti for i 0 i 10 i printf c c i printf n 运行结果 Iamaboy 6 3 1字符数组 C语言程序设计 算法的描述SCS SWPU 55 6 3 2字符串数组 1 字符串的定义由一对双引号括起的字符序列称为字符串例如 china 中国 HelloWorld 包含转义字符的字符串 例如 VisualC 一 字符串概念 C语言程序设计 算法的描述SCS SWPU 56 3 字符串常量是用双引号包围的字符序列 如 china 作为字符串的结束标志的 0 可以不显式写出 2 C语言中约定用 0 作为字符串的结束标志 它占内存空间 但不计入串的实际长度 1 C语言中没有专门的字符串变量 因此利用字符型数组来处理字符串 说明 6 3 2字符串数组 C语言程序设计 算法的描述SCS SWPU 57 2 字符串的存储利用一维字符型数组存储 数组大小至少为待存储字符串长度加1 例如存储字符串 china 每个字符是以其ASCII码存储 6 3 2字符串数组 C语言程序设计 算法的描述SCS SWPU 58 3 利用字符串初始化字符数组一个字符串能够在定义字符数组时作为初始化数据被存入到数组中 但不能通过赋值表达式直接赋值 例如 charword 20 Dictionary charname Tommy charc 10 s t r i n g 0 最后一个字符 0 必须有 为字符串结束标志 6 3 2字符串数组 但是 charmark 10 mark Cprogram 赋值不合法 区分字符数组和字符串数组 C语言程序设计 算法的描述SCS SWPU 59 rat中存放的是单个字符 不是字符串 因为是以单个字符形式为数组各元素赋初值 产生的数组没有结束符 0 charrat 5 H E L L O charrat 6 H E L L O 0 rat中存放的是字符串 等价于charrat hello 6 3 2字符串数组 二维字符数组 C语言程序设计 算法的描述SCS SWPU 60 对于一个二维数组 C编译程序将其视为一个一维数组 这个一维数组中每个元素又是一个一维数组 这一概念对字符型数组仍适用 charch 3 4 aa bbb c charch 3 4 a a b b b c 6 3 2字符串数组 1 字符数组 用 c格式单独输入输出 C语言程序设计 算法的描述SCS SWPU 61 6 3 3字符数组的输入与输出 例 main inti charstr 10 for i 0 i 10 i scanf c 2 字符串 用 s将字符串整体输入输出 C语言程序设计 算法的描述SCS SWPU 62 注意 输入的字符串中不能有空格 回车或跳格符 Tab 因为系统遇到这些分隔符时 会认为输入结束 若输入 helloworld 则实际存入str的只有 hello 例 main inti charstr 10 scanf s str printf s str 6 3 3字符数组的输入与输出 3 字符串 调用函数puts 和gets C语言程序设计 算法的描述SCS SWPU 63 gets 函数 专门用于输入字符串一般形式是 gets 字符数组名 chara 10 gets a chara 10 gets hello puts 函数 专门用于输出字符串 一般形式是 puts 字符串 只能使用数组名 字符常量或变量名 chara 10 hello puts a puts hello 与printf 的不同 puts 函数打印字符串的全部内容 直至遇到 0 为止 然后自动多打印一个 n 起到换行的作用 而printf函数无此功能 6 3 3字符数组的输入与输出 C语言程序设计 算法的描述SCS SWPU 64 include 必须加上 defineLATH80main charname LATH printf 你好 请输入姓名 n gets name printf s真是个好名字 n name 例 6 3 3字符数组的输入与输出 小结 C语言程序设计 算法的描述SCS SWPU 65 6 3 3字符数组的输入与输出 1 与一般数组操作方法相同 例如 charstr 20 for inti 0 i 20 i scanf c 3 使用库函数gets 和puts 可以输入全部字符 以回车结束 且默认换行 注意 任意键盘输入做为字符输入 C语言程序设计 算法的描述SCS SWPU 66 6 3 3字符数组的输入与输出 chara 10 scanf s a printf s a 若输入 hello 输出 hello 若输入 helloword 输出 hello chara 10 helloword printf s a 输出 chara 20 helloword printf s a 输出 helloword chara 10 hello b 10 word printf s s a b 输出 helloword chara 10 hello b 10 word puts a puts b 输出 helloword C语言程序设计 算法的描述SCS SWPU 67 6 3 4字符串处理函数 gets 函数 专门用于输入字符串puts 函数 专门用于输出字符串strlen 函数 测试字符串的长度strcat 函数 字符串连结strcmp 函数 字符串比较strcpy 函数 字符串的拷贝strlwr 函数 将字符串中的大写字母转换成小写字母strupr 函数 将字符串中的小写字母转换成大写字母 这些函数的原型存放在string h文件中 1 puts和gets函数 从键盘输出或输入一个字符串 C语言程序设计 算法的描述SCS SWPU 68 例如 charstr China nBeijing puts str 输出结果 ChinaBeijing 注意 用puts和gets函数只能输入或输出一个字符串 不能写成 puts str1 str2 或gets str1 str2 6 3 4字符串处理函数 C语言程序设计 算法的描述SCS SWPU 69 2strcat 函数功能 用于连结两个字符串 一般形式 strcat 字符串1 字符串2 将字符串2连结到字符串1的后面 注意 1 strcat函数不检查字符串1的空白位置是否装得下字符串2 连结前应用strlen函数进行检验 确保不发生溢出 2 长度加 为新字符串的结束符 0 留一个位置 其中 参数1必须是字符数组名 而参数2可以是字符串常量或数组名 6 3 4字符串处理函数 C语言程序设计 算法的描述SCS SWPU 70 例如 include includevoidmain chara 20 hello b 10 word strcat a b puts a 结果 helloword 6 3 4字符串处理函数 C语言程序设计 算法的描述SCS SWPU 71 3strcpy 函数功能 用于实现两个字符串的拷贝 一般形式 strcpy 字符串1 字符串2 将字符串2拷贝到字符串1中其中 字符串1必须是字符数组名 不能是字符串常量 注意 1 由于字符串是数组类型 所以两个字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025工业机器人市场发展前景及产业链布局与融资机会分析报告
- 2025工业互联网平台竞争分析及解决方案与资本介入机会研究报告
- 2025土壤修复技术路线分析及污染场地再开发与PPP模式创新评估报告
- 2025半导体芯片行业市场发展分析及技术趋势与投融资策略研究报告
- 物业强制停电合同范本
- 2025年新能源汽车充电设施数据治理与充电桩市场分析
- 浙江省金华市第四中学2024-2025学年九年级上学期英语期中试卷(含答案)
- 广东省广州市白云区永平片2024-2025学年九年级上学期期中练习英语试卷(含答案)
- 2025年公文写作重点题库及答案
- 2025年高压电工实操考试题库(试题含答案)
- 家庭用电安全教育课件
- 职业生涯的评估与修正
- 2025河北秦皇岛市抚宁区为乡镇街道和区直单位选调全额事业人员68人笔试考试备考试题及答案解析
- 中小学英语衔接教学策略
- 015《煤矿安全规程》修改条款学习辅导:第十五讲 电气
- 水电站消防安全培训课件
- 学堂在线 人工智能原理 章节测试答案
- 危机管理及风险评估基础知识课件
- 田汉的《关汉卿》课件
- (完整)中国的丹霞地貌ppt
- 出租厂房建筑和设施安全检查表
评论
0/150
提交评论