C语言课件第6章数组.ppt

上传人:max****ui 文档编号:6335219 上传时间:2020-02-23 格式:PPT 页数:42 大小:367KB
返回 下载 相关 举报
C语言课件第6章数组.ppt_第1页
第1页 / 共42页
C语言课件第6章数组.ppt_第2页
第2页 / 共42页
C语言课件第6章数组.ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
第6章数组 许建龙xujianlong126 C程序设计 内容提要 数组类型 向函数传递一维数组和二维数组 常用算法 排序 查找 求最大最小值等 用字符数组存取字符串 使用字符串处理函数处理字符串 数组的用处 保存大量同类型的相关数据如矩阵运算 表格数据等 数组 Array inta 10 定义一个有10个元素的数组 每个元素的类型均为int使用a 0 a 1 a 2 a 9 这样的形式访问每个元素 它们与普通变量没有任何区别系统会在内存分配连续的10个int空间给此数组数组下标可以是整型表达式直接对a的访问 就是访问此数组的首地址 a a 9 a 8 a 7 a 1 a 0 数组的定义与初始化 数组定义后的初值仍然是随机数 一般需要我们来初始化inta 5 12 34 56 78 9 inta 5 0 inta 11 22 33 44 55 数组大小最好用宏来定义 以适应未来可能的变化 defineSIZE10inta SIZE 数组大小定义好后 将永远不变 数组的使用 数组的下标都是从0开始对数组每个元素的使用与普通变量无异可以用任意表达式作为下标 动态决定访问哪个元素for i 0 i SIZE i a i 2 i 下标越界是大忌 使用大于最大下标的下标 将访问数组以外的空间 那里的数据是未知的 可能带来严重后果sizeof可以用来获得数组大小 数组的特点 快速地随机访问一旦定义 不能改变大小 只能逐个对数组元素进行操作 字符数组例外 输入方法 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 一维数组的输入和输出 例6 1 兔子生崽问题Fibonacci数列1 2 3 5 8 13 21 34 55 89 144 233 例6 1 include defineYEAR MONTH12main intf YEAR MONTH 1 0 1 2 intmonth for month 3 month YEAR MONTH month f month f month 1 f month 2 for month 1 month YEAR MONTH month printf d t f month printf nsum d n f YEAR MONTH 例6 2 打印出最高分及其学生序号 从键盘输入学生人数n 从键盘输入所有学生的学号和成绩分别存入数组num和score假设其中的一个学生成绩为最高 同时记录其学号 即令maxScore score 0 maxNum num 0 对所有学生成绩进行比较 即for i 0 imaxScore 则修改maxScore值为score i 并记录其学号maxNum num i 打印最高分maxScore及其学号maxNum include defineARR SIZE40main floatscore ARR SIZE maxScore intn i longmaxNum num ARR SIZE printf Pleaseentertotalnumber scanf d include defineARR SIZE40floatFindMax floatarr intn main floatscore ARR SIZE maxScore intn i printf Pleaseentertotalnumber scanf d floatFindMax floatarr intn floatmax inti max arr 0 for i 1 imax max arr i returnmax 数组名作函数参数 用数组名作参数 就是将数组的首地址传递给函数实参数组与形参数组占用同一段内存在函数中可对形参数组元素修改 结果会影响主调函数中的实参数组 简单变量作函数参数 数组作函数参数 现场演示排序算法 交换法排序选择法排序 交换法排序 交换法排序for i 0 iscore i 交换成绩score j 和score i 交换学号num j 和num i 交换法排序 选择法排序 选择法排序for i 0 iscore k 记录此轮比较中最高分的元素下标k j 若k中记录的最大数不在位置i 则 交换成绩score j 和score i 交换学号num j 和num i 选择法排序 现场演示查找算法 顺序查找特例 求最大值 求最小值折半查找 顺序查找 intSearch longa intn longx inti for i 0 i n i if a i x return i return 1 折半查找 折半查找 intBinSearch longa intn longx intlow high mid low 0 high n 1 while lowa mid low mid 1 elseif x a mid high mid 1 else return mid return 1 字符串 String 与字符数组 字符串一串以 0 结尾的字符在C语言中被看作字符串用双引号括起的一串字符是字符串常量 C语言自动为其添加 0 终结符C语言并没有为字符串提供任何专门的表示法 使用字符数组和字符指针来处理字符数组每个元素都是字符类型的数组charstring 80 字符数组的初始化 用字符型数据对数组进行初始化charstr 6 C h i n a 0 用字符串常量直接对数组初始化charstr 6 China charstr 6 China 逐个输入输出 for i 0 s i 0 i putchar s i putchar n 一次性输入输出 scanf s s printf s s chars 10 字符数组的输入输出 gets s puts s scanf inti scanf d 不能读入带空格的字符串 gets 可以这种用法很不安全 当用户的输入多于10个 含10个 str数组将越界scanf被公认为最易遭到黑客攻击的函数之一 gets 字符串输入函数gets 也没有提供限制输入字符串长度的方法 容易引起缓冲区溢出 给黑客攻击以可乘之机对输入字符串长度有限制的函数调用fgets buf sizeof buf stdin 字符串处理函数 在中定义了若干专门的字符串处理函数strcpy stringcopychar strcpy char dest constchar src strlen stringlengthsize tstrlen constchar s 返回字符串的实际长度 不包括 0 strcat stringcombinationchar strcat char dest constchar src strcmp stringcomparisonintstrcmp constchar s1 constchar s2 当出现第一对不相等的字符时 就由这两个字符决定所在字符串的大小 字符串不能直接整体复制 str1 str2 错误 0 作为字符串结束符的天生缺陷 假若交给这些字符串处理函数的字符串没有 0 会如何 0 很关键 如果没有 那么这些处理函数会一直进行处理直到遇到一个 0 为止 此时可能已经把内存弄得乱七八糟ANSIC定义了一些 n族 字符处理函数 包括strncpy strncat strncmp等 通过增加一个参数来限制处理的最大长度char strcpy char dest constchar src unsignedintcount 例6 9 从键盘任意输入5个学生的姓名 编程找出并输出按字典顺序排在最前面的学生姓名等价于求最小字符串 include include defineARRA SIZE80main intn num charstr ARRA SIZE min ARRA SIZE printf Pleaseenterfivenames n gets str strcpy min str for n 1 n 5 n gets str if strcmp str min 0 strcpy min str printf Theminis puts min 二维数组的定义 格式 数据类型数组名 常量表达式 常量表达式 intb 2 3 b为2 3 2行3列 的数组 注意下标范围 b 0 b 1 b b 0 0 b 0 1 b 0 2 b 1 0 b 1 1 b 1 2 二维数组的存储结构 intb 2 3 b 1 0 b 1 1 b 1 2 b 0 0 b 0 1 b 0 2 存放顺序 按行存放 先顺序存放第一行的元素 再存放第二行的元素 二维数组的输入和输出 数组的输入和输出只能逐个对数组元素进行操作 字符数组例外 intb 2 3 i j 向函数传递二维数组 实际传送的是指向数组第一个元素的地址在声明二维数组形参时 不能省略数组第二维的长度 例6 8计算总分和平均分p222 voidTotal intscore COURSE intsum floataver intn 求每门课的总分和平均分 inti j for j 0 j COURSE j sum j 0 for i 0 i n i sum j sum j score i j aver j float sum j n 这一章我们学习了 了解了在什么情况下使用数组这种数据类型向函数传递一维数组和二维数组的方法用数组名作为函数参数和用简单变量作为函数参数的不同之处 上机作业 补充题 从键盘输入n行字符串 n从键盘输入 n 0 要求按字典顺序 即从小到大 排序后输出 P2406 76 12 2
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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