C及C++程序设计 修订本 教学课件 ppt 作者 张富 C语言基础 第7章

上传人:E**** 文档编号:89345899 上传时间:2019-05-23 格式:PPT 页数:98 大小:412.50KB
返回 下载 相关 举报
C及C++程序设计 修订本  教学课件 ppt 作者  张富 C语言基础 第7章_第1页
第1页 / 共98页
C及C++程序设计 修订本  教学课件 ppt 作者  张富 C语言基础 第7章_第2页
第2页 / 共98页
C及C++程序设计 修订本  教学课件 ppt 作者  张富 C语言基础 第7章_第3页
第3页 / 共98页
C及C++程序设计 修订本  教学课件 ppt 作者  张富 C语言基础 第7章_第4页
第4页 / 共98页
C及C++程序设计 修订本  教学课件 ppt 作者  张富 C语言基础 第7章_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《C及C++程序设计 修订本 教学课件 ppt 作者 张富 C语言基础 第7章》由会员分享,可在线阅读,更多相关《C及C++程序设计 修订本 教学课件 ppt 作者 张富 C语言基础 第7章(98页珍藏版)》请在金锄头文库上搜索。

1、第7章 数组与字符串,7.1 一维数组 7.2 多维数组 7.3 字符数组与字符串 7.4 常用的字符串系统库函数 7.5 字符数组程序设计实例,当我们需要处理相关联的一批数据时,基本类型数据就不能进行有效的表示、存储和处理。为了解决这个问题,引入了构造数据类型。数组是构造数据类型中的一种。 数组是由一些相同类型的数据按一定的规则构成的数据类型。它的每个成员称为数组元素,每个数组元素都可作为简单变量来使用。,字符串,是字符的序列。它不是C语言的数据类型,但与数组密切相关。因此,字符串也是本章的一个重要内容。 数组操作中,离不开循环程序技术的配合,两种技术总是密切地联系在一起。,7.1 一 维

2、数 组,数组是一些同类型数据的有序集合,它们存储在内存的一个连续的存储区内。数组中的每个元素用下标加以区别。所以,数组元素又称为下标变量。 数组下标的个数,称为数组的维数。,7.1.1 一维数组的定义 和其他变量一样,数组也要遵循“先定义后引用”的原则。程序中使用数组时,必须先用数组定义语句对其进行说明。通过定义说明数组的名字,数据类型,维数和容量。 一维数组定义语句的一般格式为: 数据类型 数组名常量表达式;,常量表达式表示的是数组容量,也叫做数组的长度。它说明数组元素的个数。 当定义了一个数组后,系统就在内存的数据区为它开辟一个连续空间,用来存储各数组各元素的数据。 下标值是从零开始的。作

3、为变量的数组元素,它的下标,既可以是常量表达式,也可以是含变量的表达式,例如,abci,absi+j等。,7.1.2 数组元素的引用 数组元素的引用是通过数组下标变量的实现的。下标变量的形式为: 数组名下标 例7.1.1 设有整型数组a,其长度为5。编写程序,令5个数组元素的值依次为10,,20,30,40和50并输出数组各元素的值。 这个问题可以用循环结构技术完成。程序如下: #include “stdio.h“ main() ,int i,a5; for(i=1;i=5;i+) ai-1=i*10; /*为数组元素赋值*/ for(i=0;i=4;i+) printf(“a%d=%dn“,

4、i,ai); /* 输出数组各元素的值*/ ,程序给出下面的输出结果: a0=10 a1=20 a2=30 a3=40 a4=50,可以看到,数组元素的引用是通过数组名和相应的下标引用的。这种引用方法叫作“下标法”。 在程序中引用数组元素时,其下标不能超过该数组定义的长度。C语言系统不进行数组是否超出定义的边界的检查,这个任务由用户自己解决。这就要求程序设计人员必须给数组以足够的容量,当然,还要注意程序的正确性。数组容量不够或程序的错误,都有可能导致数组的运算超出数组的边界。运算超出数组边界是有一定危险的,编程时要特别注意。,7.1.3 一维数组的初始化 在说明数组的同时对数组的元素赋值,这就

5、是数组的初始化。一维数组初始化的一般形式为: 数据类型 数组名容量= 常量表达式1,常量表达式2, ;,在对数组的所有元素初始化时,可以不给出数组的容量。在这种情况下,系统会自动按给出初始值(表达式)的个数建立相应容量的数组。这种初始化的一般格式为: 数据类型 数组名 = 常量表达式1,常量表达式2, ;,例7.1.2 对实型数组a的10个元素中的前5个元素进行初始化,然后,输出数组每个元素的值。 程序如下: #include “stdio.h“ main() float a10=1.1, 0, 3.1, 0, 5.2; int i;,for(i=0;i10;i+) printf(“%f “,

6、ai); printf(“n“); 程序的输出为: 1.100000 0.000000,3.100000 0.000000 5.200000 0.000000 0.000000 0.000000 0.000000 0.000000,7.1.4 一维数组程序设计 一维数组的程序设计,仍然离不开我们已经学过的顺序结构、选择结构和循环结构的设计方法。但在这一节我们更关注的是数组的设计和处理。我们要学习如何根据问题确定所需要的数组,如何处理数组中的各个数组元素。,对于若干个相互关联的,有某种联系的数据,一般用数组来组织这些数据,会对程序的数据处理带来很大的好处,减小程序设计的难度,提高数据处理的效率。

7、 在加工处理数组数据方面,循环程序技术起着非常大的作用。在许多情况下,不采用循环程序设计恐怕是不可能的。 下面通过一些程序例子来学习一维数组程序的设计。,例7.1.3 有数量为10个的一批数据, 要求用户将这些数据按顺序从键盘输入,存在一个数组中,然后输出。再将这个数组中的数据以相反的顺序存入这个数组,然后输出。编写程序。 这里要处理的数据是一组顺序相关的数据,非常适合用数组来组织这些数据,也就是用一个长度为10的一维数组(例如数组a)来顺序存储这些数据。输入数据的顺序由数组元素的下标确定。然后,为将数据的顺序倒过来存储在数组中,需要进行数据的交换:,a0a9 a1a8 a2a7 a3a6 a

8、4a5 其中任何一对数据的交换,都可用第三章例3.4.2程序的方法实现。而5对数据的交换,可用下面的循环语句完成:,for(k=0;k5;k+) m=ak; ak=a9-k; a9-k=m; 最后,用一个循环语句将处理后的数组a的10个数组元素输出。,下面给出完整的程序: #include “stdio.h“ main() int a10, k,m; for(k=0; k10;k+) scanf(“%d“, /* 输入原始数据 */,for(k=0;k10;k+) /* 输出原始数据 */ printf(“%d “, ak); printf(“n“); for(k=0; k5; k+) /*

9、将数据顺序颠倒 */ m=ak; ak=a9-k; a9-k=m; ,for(k=0; k10; k+) /* 输出顺序倒置后的数据*/ printf(“%d “, ak); printf(“n“); 将一组无序的数据按大小的顺序重新排列和存储是一维数组应用的典型问题。下面介绍这类数据问题的处理。,例7.1.4 编写一个程序,将一组数据(本例设定为5个数据)按由小到大的顺序排列。原始数据由键盘输入,程序输出排序后的结果。 一组数据可以用一个一维的数组来存储。数组的下标可作为这组数据的顺序。程序对数组中的数据排序时,下标就成了数据在这批数据中位置序号了。 数据按由小到大(或相反)排序的算法很多,

10、本例介绍其中的两个算法。,第一个算法的基本思想是,依次从前面取一个数据si,将它与它后面所有的数据si+1,si+2,逐个进行比较。如果发现有后面的数据sj小于前面的数据si,则将这两个数据的位置交换一下。这个交换可用下面的程序段实现: t=si; si=sj; sj=t;,这时,si中的数据,一定比它后边的所有数据都小。再取数据si+1与它后面的所有数据逐个比较。如果发现有后面的数据sj小于前面的数据si+1,则将这两个数据的位置交换一下。这样的比较一直进行到与最后一个数据比较。这时,si+1中的数据一定比它后边的所有数据都小。 上述这个比较过程从第一个数据一直进行到数组中的最后两个数据的比

11、较为止。于是排序便完成了。,下面以“8,7,9,5,6”五个数据的由小到大的排序为例,说明上述排序算法的排序过程: 第1步:s0与后面的4个数比较和交换(共进行4次比较)的过程: 8 7 9 5 6 7 8 9 5 6 5 8 9 7 6,第2步:s1与后面的3个数比较和交换(共进行3次比较)的过程: 5 8 9 7 6 5 7 9 8 6 5 6 9 8 7 第3步;s2与后面的2个数比较和交换(共比较2次)的过程: 5 6 9 8 7 5 6 8 9 7 5 6 7 9 8,第4步;s3与后面的1个数比较和交换的过程: 5 6 7 9 8 5 6 7 8 9 排序完成。此算法的流程图如图7

12、.2所示。,图7.2 排序算法(一),按此算法编写的程序如下: #include main() int i, j; float s5, t; printf(“Enter 5 numbers: n“); for(i=0; i5; i+) scanf(“%f“, ,for(i=0; i4; i+) for(j=i+1; j5; j+) if(sjsi) t=si; si=sj; sj=t; , for(i=0; i5; i+) printf(“%10.5fn“, si); 这个程序看起来很简单。这中间数组起了关键的作用。如果不使用数组,问题会变得非常复杂和困难。,下面再介绍另一种排序的算法。这种排

13、序算法的基本思想是,反复将数据从头到尾地进行两相邻数据的比较。如,首先是第一个数据与第二个数据比较(s0与s1比),然后,是第二个数据与第三个数据比较,依此类推,直至比较最后两个数据。在比较过程中,若发现后一个数据比前一个小(仍以由小到大排序为例),则将两个数据的位置对调。比较的结果,最后一个数便是最大的。然后进行第二轮的从头到尾的相邻两数的比较。这个比较过程要反复地从头到尾进行多次,直到出现从头到尾的比较中没有发生一次有需要调换位置的数据时为止,排序便完成了。,我们仍以“8,7,9,5,6”五个数据的由小到大的排序为例,说明上述排序算法的排序过程: 第1轮比较:8, 7, 9, 5, 6 -

14、7, 8, 9, 5, 6- 7, 8, 5, 9, 6-7, 8, 5, 6, 9; 第2轮比较:7, 8, 5, 6, 9-7, 5, 8, 6, 9-7, 5, 6, 8, 9; 第3轮比较:7, 5, 6, 8, 9-5, 7, 6, 8, 9-5, 6, 7, 8, 9;,第4轮比较:5, 6, 7, 8, 9 没有需要交换位置的数据,排序结束。 实现上述算法的具体步骤归纳如下: (1)设置循环控制条件(标志)flag,flag的初值为; (2)从头到尾地进行相邻数据的比较,必要时,进行数据位置对调; (3)重复步骤(2),直至不发生数据对调,flag置0; (4)输出排序后的结果。

15、 此算法的流程图如图7.3所示。,图7.3 排序算法(二),按流程图编写程序如下: #include “stdio.h“ main() float s5, t; int flag=1, i; printf(“Enter 5 data: n“); for(i=0; i=4; i+) scanf(“%f“, while(flag), i=1; flag=0; for(i=0; i=4; i+) if(sisi-1) t=si; si=si-1;,si-1=t; flag=1; for(i=0; i5; i+) printf(“%fn“, si); ,7.2.1 多维数组的定义和引用 k维数组定义的一般形式为: 数据类型 数组名常量表达式1常量表达式2常量表达式k; 二维数组可看成是一张二维的表格。第一维看作行,第二维看作列。因此,二维数组在实际应用中最为普遍。例如,定,7.2 多 维 数 组,义一个实型的二维数组 float twoarr57; 它的二维表格形式如图7.4所示。相应的二维数组元素,如第i行j列的元素表示为: twoarrij,图7.4 二维数组与二维表格,在内存中,二维数组各元素的存储顺序,则是一维的线性表

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号