C语言_第8章.ppt

上传人:少林足球 文档编号:4160747 上传时间:2019-10-24 格式:PPT 页数:33 大小:2.73MB
返回 下载 相关 举报
C语言_第8章.ppt_第1页
第1页 / 共33页
C语言_第8章.ppt_第2页
第2页 / 共33页
C语言_第8章.ppt_第3页
第3页 / 共33页
C语言_第8章.ppt_第4页
第4页 / 共33页
C语言_第8章.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《C语言_第8章.ppt》由会员分享,可在线阅读,更多相关《C语言_第8章.ppt(33页珍藏版)》请在三一文库上搜索。

1、第八章 数组,第八章 数组,8.1 一维数组 8.2 二维数组 8.3 多维数组 8.4 字符数组 8.5 经典排序算法 8.6 字符串处理函数 8.7 数组应用 8.8 实战练习,本章学习内容,8.1.1 一维数组的定义和引用,1. 一维数组的定义 一般形式: 类型说明符 数组名整型常量表达式; 例如: int a10; 定义整型数组,数组名a,它包含10个整型元素,8.1.1 一维数组的定义和引用,存储结构:,说明: (1)数组中所以的元素类型都是同一类型,即类型说明符所表示的类型 (2)数组名属于标识符,必须满足C语言标识符的命名规则 (3)“一维”可以理解数组名后中括号数量 (4)整型

2、常量表达式必须是一个常量,表示数组元素的个数,8.1.1 一维数组的定义和引用,引用形式: 数组名数组元素下标表达式; 例如: int a10; 数组元素的引用:a0、a1、a4+1等,说明 (1)数组元素下标是指元素在数组中的顺序号,可以是整型变量、整型常量、字符数据或整型表达式 (2)数组下标的取值范围为:0常量表达式的值-1 例如:int a10; 那么数组a下标范围为:09 (3)数组中各个元素的存储空间是连续的 (4)数组不能整体引用,只能逐个引用数组元素 (5)使用数组时要注意数组下标的引用是否越界,8.1.2 一维数组的初始化,1. 在定义数组时直接对数组元素赋初值 int a6

3、 = 1, 2, 3, 4, 5, 6; 2. 只给一部分元素赋值,未赋值的部分元素值为0 int a6 = 1, 2, 3; 3. 在对全部数组元素赋初值时可以不指定数组长度 int a = 1, 2, 3, 4; /*数组a的长度是4*/,8.2.1 二维数组的定义和引用,一般形式: 类型说明符 数组名常量表达式1常量表达式2; 常量表达式1称为数组的行下标,常量表达式2称为数组列下标,下标都是从0开始计算 例如: int a23; 有6个元素:a00, a01, a02, a10, a11, a12,8.2.1 二维数组的定义和引用,存储结构:,8.2.1 二维数组的定义和引用,说明 1

4、、二维数组定义时使用两个中括号,如果有二维数组anm,那么二维数组a的行下标范围0n-1,列下标范围0m-1,最后一个元素an-1m-1 2、可以把二维数组看作一维数组,每个数组元素又是包含有若干个元素的一维数组,8.2.1 二维数组的定义和引用,引用格式: 数组名行下标表达式列下标表达式; int a23, i = 0, j = 0; a12、aij、ai+1j+1都是合法的引用 a1.12、a13、a0, 1是错误的引用,8.2.2 二维数组的初始化,初始化格式: 类型说明符 数组名常量表达式1常量表达式2 = 值, 值, ., .; 1.将所有数据写在一个大括号内 int a23 = 1

5、, 2, 3, 4, 5, 6; int a23 = 1, 2, 3, 4;,2.分行给数组元素赋值 int a23 = 1, 2, 3, 4, 5, 6;,int a23 = 1, 2, 4;,8.2.2 二维数组的初始化,说明 一维数组,在数组定义时省略方括号中的常量表达式,通过所赋初值的个数来确定数组的大小 二维数组,如果定义时有初始化,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式。当省略行下标时,编译系统会将初始化值的个数与列数的商,再向上取整的结果作为二维数组的行数,然后分配存储单元。假设二维数组a的列数为N,初始化值的个数为S,那么该二维数组的行数为:

6、S/N。 int a3 = 1, 2, 3, 4, 5, 6; 由初值个数6,列数3,编译系统会认为数组a的行数是2,即数组a为2行3列的二维数组。,8.3 多维数组,一般形式: 类型说明符 数组名常量表达式1常量表达式2.常量表达式n; int a345;,8.4.1 字符数组的定义和引用,一般形式: char 数组名常量表达式; 例如:char a5; 字符数组的引用使用下标形式: a0、a1、a2、a3、a4,8.4.2 字符数组初始化,1.定义时使用大括号赋初值 char a5 = H、e、l、l、o; 2.省略字符数组长度的初始化 char a = H、e、l、l、o; 3.直接使用

7、字符串初始化字符数组 char a6 = “Hello”; /*包括字符串结束符0*/,8.4.3 字符数组的结束标志符0,C语言中,系统会在字符串结尾自动添加字符串结束符0,所以在使用字符数组存储一个字符串时,不能忘记字符串结束符0,特别是在计算字符数组元素个数时,需要在原字符串字符个数的基础上加1 char a5 = “Hello”; /*错误*/,8.4.4 字符数组的输入和输出,1. 使用格式符%c进行输入和输出 printf(“%c”, ai); 2. 使用格式符%s进行输入和输出 char a = “Hello”; printf(“%s”, a); 3. 字符串输入/输出函数get

8、s()、puts(),8.4.4 字符数组的输入和输出,注意: (1)使用格式符”%s”输出字符数组时,该字符数组必须包含字符串结束符0 (2)使用“%s”输出字符串时,printf()函数中接收的参数是数组名 (3)即使数组长度大于字符串实际长度,也只能输出到0为止 (4)如果一个字符数组中包含多个0字符,遇到第一个0时输出结束,8.5.1 选择法排序,思想 从每次待排序数组中选择一个最小值的数组元素(若是从大到小的排序,每次需要选择最大的数组元素),将这个数组元素的值与最前面第一个还未排序的数组元素的值进行交换,直到整个数组都是已排序的数组元素为止,8.5.2 冒泡法排序,思想 每次比较数

9、组中的相邻两个数组元素的值,将较小的数排在较大的数前面(按从小到大的顺序),每一轮排序后,都有一个最小的数放在所有未排序的数前面。,8.5.3 交换法排序,思想 将每个数组元素与其后的所有元素一一比较,如果发现符合条件的数则进行交换。假设完成排序的数放在数组前半部分,未排序的放在后半部分,那么每一轮排序,都是用未排序的第一个数ai与其后的数一一进行比较,若存在比第一个数的值更小的数,则交换两个数的值,然后继续使用ai(交换后的)值与后续的进行比较,直到本轮结束,ai加入排序完成的元素阵营;直到将所有的元素都完成排序,排序结束,8.5 数组排序算法,过程,8.5.4 插入法排序,思想 将待排序的

10、数组分成两部分:前半部分是已排序集合,后半部分是未排序集合,每一轮排序都是从未排序中取出第一个数,插入到前面已排序的集合中,直到所有未排序的元素都插入到排序集合为止,8.5.5 折半法排序,思想 又称为快速排序,选择中间值middle(在程序实现时一般选择数组的中间值),然后把比中间值小的数据放在左边,比中间值大的数据放在右边(假设需要按照从小到大的顺序),然后再对两边递归使用这一过程完成排序,8.5.6 排序算法比较,1选择法排序 选择法排序在排序过程中共需要进行n(n-1)/2次比较,互相交换n-1次。选择法排序简单、容易实现,适用于数量较小的排序,但它是不稳定的排序算法,也就是说对应有相

11、同关键字的记录,排序后可能会颠倒次序。 2冒泡法排序 在例8.13中,我们使用flag作为判断终止循环的条件,可想而知,冒泡排序最好的情况就是正序,只需要比较一次;最坏的情况是逆序,需要比较n2次,冒泡排序是稳定的排序算法,当待排序列相对有序时,效果较好。 3交换法排序 交换法排序是不稳定的排序算法,当待排序列相对有序时效果较好,最坏情况是待排序列逆序。,8.5.6 排序算法比较,4插入法排序 插入法排序需要经过n-1次插入过程,如果数据恰好应该插入本身位置,可节省时间,所以同前面的算法相同,原始数据基本有序,该算法效果较好,它也是稳定的排序算法。 5折半法排序 折半法排序对于较大的n时,是速

12、度最快的排序算法;它是不稳定的排序算法,也就是说对应有相同关键字的记录,排序后可能会颠倒次序。 综上可知;选择法排序、交换法排序和折半法排序是不稳定的排序算法,冒泡法排序和插入法排序是稳定的排序算法,当n较小、待排序的序列局部或整体有序时,可以使用选择法、冒泡法、交换法、插入法排序,当n较大并对稳定性不作要求时可以选用折半法排序,8.6.1 字符串复制,语法格式:strcpy(目标字符数组名, 源字符数组名); 功能:把源字符数组中的字符串拷贝到目标字符数组中,字符串结束标志符0也一同拷贝 说明 1目标字符数组必须有足够的长度,以便装下源字符数组的字符串和其结束标志符0。 2源字符数组名可以是

13、字符数组名、字符串常量,若是字符串常量,相当于把一个字符串赋予一个字符数组。 3使用strcpy()函数需要包含头文件,8.6.2 字符串连接,语法格式:strcat(目标字符数组名, 源字符数组名); 功能:把源字符数组中的字符串连接到目标字符数组中的字符串结尾,其中目标字符数组中的字符串结束符0被源字符数组中的首字符覆盖,源字符数组中的字符串结束符0作为新串的字符串结束符 注意 1使用字符串连接strcat()函数,同样需要包含头文件string.h。 2目标字符数组必须有足够的长度,以便装下目标字符串原有字符(不包括结束标志符0)、源字符数组中的字符和结束标志符0,8.6.3 字符串比较

14、,语法格式:strcmp(字符数组名1, 字符数组名2); 功能:按照ASCII码顺序比较字符数组名1和字符数组名2中的字符串,并返回两者比较的结果,返回值如下。 1返回值为0:字符串1与字符串2相等; 2返回值为正数:字符串1大于字符串2; 3返回值为负数:字符串1小于字符串2。 说明 1使用字符串比较函数strcmp()同样需要包含头文件string.h。 2比较两个字符串时,若出现不同的字符,则以第一个不同的字符的比较结果作为整个字符串比较的结果,8.6.4 字符串大小写转换,语法格式:strupr(字符串); 功能:将字符串中的小写字母变成大写字母,其他字符不变 语法格式:strlwr(字符串); 功能:将字符串中的大写字母变成小写字母,其他字符不变,8.6.5 获取字符串长度,语法格式:strlen(字符串); 功能:计算字符串的实际长度(不包括字符串结束标志符0),函数返回值为字符串的实际长度。 注意 strlen()函数返回的长度不包括字符串结束标志符0,8.7 实战练习,1.练习实现strcpy()函数 2.例8.22中,在原字符数组的基础上,反转字符串,END,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1