C语言程序设计 教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章 数组

上传人:E**** 文档编号:89394811 上传时间:2019-05-24 格式:PPT 页数:50 大小:209KB
返回 下载 相关 举报
C语言程序设计  教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章  数组_第1页
第1页 / 共50页
C语言程序设计  教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章  数组_第2页
第2页 / 共50页
C语言程序设计  教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章  数组_第3页
第3页 / 共50页
C语言程序设计  教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章  数组_第4页
第4页 / 共50页
C语言程序设计  教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章  数组_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章 数组》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 刘卫国 贾宗福 沈根海 第7章 数组(50页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计,中国铁道出版社,2008年1月,高等学校计算机教育系列规划教材,第7章 数 组,第7章 数组 7.1 数组的概念 7.2 数组的定义 7.3 数组的赋值与输入输出 7.4 数组的应用 7.5 字符数组与字符串 7.6 数组作为函数的参数 本章小结,7.1 数组的概念 把具有相同类型的一批数据看成是一个整体,叫作数组(Array)。给数组取一个名字叫数组名。所以数组名代表一批数据。数组中的每一个数据称为数组元素,它可通过顺序号(下标)来区分。例如,一个班60名学生的成绩组成一个数组g,每个学生的成绩分别表示为: g0,g1,g2,gi,g59 又如某厂5个车间全年各季度的产量组成

2、数组p,每个车间每季度的产量分别表示为: p00,p01,p02,p03 p40,p41,p42,p43 在这里,区分g数组的元素需要一个顺序号,故称为一维数组,而区分p数组的元素需要两个顺序号,故称为二维数组。,7.2 数组的定义 7.2.1 一维数组 1一维数组的定义 一维数组的定义形式为: 类型符 数组名常量表达式; 其中,方括号中的常量表达式的值表示数组元素的个数。常量表达式中可以包括字面常量和符号常量以及由它们组成的常量表达式,但必须是整型。方括号之前的数组名是一个标识符。类型符指明数组元素的类型。,2一维数组元素的引用 一维数组元素的引用形式为: 数组名下标 显然一个数组元素的引用

3、代表一个数据,有时称这种形式的变量为下标变量,它和简单变量等同使用。 C语言规定,数组元素的下标从0开始。在引用数组元素时要注意下标的取值范围。当定义数组元素的个数为M时,下标值取0到M-1之间的整数。例如上面定义的a数组共10个元素,下标值为09之间的整数。 下标可以是整型常量、整型变量或整型表达式。,3一维数组的初始化 (1)顺序列出数组全部元素的初值。 数组初始化时,将数组元素的初值依次写在一对花括号内。 (2)只给数组的前面一部分元素设定初值。 (3)当对全部数组元素赋初值时,可以不指定数组元素的个数。,7.2.2 二维数组 1二维数组的定义 二维数组的定义形式为: 类型符 数组名常量

4、表达式常量表达式; C语言把二维数组看作是一种特殊的一维数组。对于上述定义的数组a,把它看作是具有2个元素的一维数组:a0和a1,每个元素又是一个包含3个元素的一维数组。通常,一个n维数组可看作是一个一维数组,而它的元素是一个(n-1)维的数组。C语言对多维数组的这种观点和处理方法,使数组的初始化、引用数组的元素以及用指针表示数组带来很大的方便。,2二维数组元素的引用 二维数组元素的引用形式为: 数组名下标下标 通常,n维数组元素的引用形式为数组名之后连续紧接n个“下标”。如同一维数组一样,下标可以是整型常量、变量或表达式。各维下标的下界都是0。,3二维数组的初始化 二维数组的初始化方法有以下

5、几种: (1)按行给二维数组赋初值。 (2)按元素的排列顺序赋初值。 (3)对部分元素赋初值。 (4)如果对数组的全部元素都赋初值,定义数组时,第一维的元素个数可以不指定。,7.2.3 数组的存储结构 进行数组的定义就是让编译程序为每个数组分配一片连续的内存单元,以用来依次存放数组的各个元素。对一维数组来说,各个元素按下标由小到大顺序存放,对二维数组来说,先按行的顺序,再按列的顺序依次存放各个元素。每个元素占用几个字节的存储单元,取决于数组的数据类型,同一个数组的各个元素占用相同字节数的存储单元。,图7-1 数组的存储结构 对于多维数组,它的元素在内存中的存放顺序为:第一维的下标变化最慢,最右

6、边的下标变化最快。,7.3 数组的赋值与输入输出 7.3.1 数组的赋值 在C语言中,只能逐个对数组元素赋值,不能直接对数组名赋值。例如,定义了int i,a5;后,要将100、200、300、400、500存入数组a中,可用如下程序段实现: for(i=0;i5;i+) ai=(i+1)*100; 或 a0=100,a1=200,a2=300,a3=400,a4=500;,7.3.2 数组的输入输出 一般用循环结构实现数组的输入输出,循环变量控制数组的下标,对各个元素逐个进行。例如,下面的程序段可实现一维数组的输入: float x10; int i; for(i=0;i10;i+) sca

7、nf(“%f”, /*xi前面一定要加上地址运算符“&”*/,二维数组的输入输出则要用二重循环。若按行的顺序输入,则可以用下面语句: int a34,i,j; for(i=0;i3;i+) /*改变行号*/ for(j=0;j4;j+) /*改变列号*/ scanf(“%d”,【例7.1】将整型数组a的10个元素分两行输出。 【例7.2】按矩阵形式打印二维数组b34。,7.4 数组的应用 7.4.1 一维数组应用举例 【例7.3】骰子是一个正六面体,用16这6个数分别代表这6面。将骰子投掷6 000次,统计每一面出现的次数。 【例7.4】将n个数按从小到大顺序排列后输出。,【例7.5】数据检索

8、问题。检索是从一组数据中找出具有某种特征的数据项,它是数据处理中应用很广泛的一种操作。最容易理解的一种检索方式是顺序检索,其基本思想是对所存储的数据从第一项开始,依次与所要检索的数据进行比较,直到找到该数据,或将全部元素都找完还没有找到该数据为止。 【例7.6】约瑟夫(Josephus)问题。有m个同学围成一个圆圈做游戏,从某人开始编号(编号为1m),并从1号同学开始报数,数到n的同学被取消游戏资格,下一个同学(第n+1个)又从1开始报数,数到n的同学便第二个被取消游戏资格,如此重复,直到最后一个同学被取消游戏资格,求依次被取消游戏资格的同学编号。,【例7.7】用筛选法求2,n范围内的全部素数

9、。 【例7.8】将数字1、2、3、4、5、6填入一个2行3列的表格中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。求出按此要求可有几种填写方法?,7.4.2 二维数组应用举例 【例7.9】给定一个mn矩阵,其元素互不相等,求每行绝对值最大的元素及其所在列号。 【例7.10】矩阵乘法。已知mn矩阵A和np矩阵B,试求它们乘积C=AB。,【例7.11】把某月的第几天转换成这一年的第几天。 【例7.12】找出一个二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组可能不止一个鞍点,也可能没有鞍点。,7.5 字符数组与字符串 7.5.1 字符数组的定

10、义和初始化 1字符串常量 字符串常量是用双引号括起来的一串字符。系统在存放字符串常量时,自动在它的最后一个字符后面附加一个字符串结束标志符0,它占用内存空间,但不作为字符串的有效字符。在字符串常量的书写形式中,双引号只充当字符串的界限符,不是字符串的一部分。如果字符串中要包含字符“”,则可经过转义字符(如“”)来实现,其他转义字符(如“n”、“t”)也可以作为单个字符出现在字符串中。,2字符数组的定义 字符数组是指数组元素的类型为字符型数据的数组,它也要先定义后使用。字符数组的定义形式如下: char 数组名常量表达式常量表达式; 注意:每个字符串末尾都有1个零字符0,它要占1个字节的存储单元

11、。,3一维字符数组的初始化 一维字符数组的初始化,有以下两种方式。 (1)用字符常量初始化。 将字符常量依次存放在花括号中,以逐个为数组中各元素指定初值字符,字符在内存中以相应的ASCII代码存放。 注意:用这种方式初始化,如果是字符串,最后一个字符必须是0,不能是其他字符;否则只是存放的字符元素,不是字符串。,(2)直接用字符串常量初始化,字符串常量加不加花括号均可。 在用字符串初始化一个一维字符数组时,可以不指定数组大小。例如: char str1=“I am happy!”; 注意:字符数组str1的元素个数为12,不是11。 需要指出,字符数组本身并不要求最后要有标志0。但当字符数组需

12、要作为字符串时,就必须有标志符0。,4二维字符数组的初始化 二维字符数组相当于一维字符串数组,即一维数组的每个元素是字符串,其初始化也有两种方式。 (1)字符常量方式。 (2)字符串常量方式。,一个字符串可以存放在一个一维字符数组中。如果有若干个字符串,可以用一个二维字符数组来存放。因此一个nm的二维字符数组可以存放n个字符串,每个字符串最大有效长度为m-1(0还要占一位)。 可以认为二维字符数组由若干个一维字符数组组成。可以单独输出数组中的某一个元素,即一个字符,也可以输出某一行,即一个字符串。 【例7.13】写出下列程序的运行结果。,7.5.2 字符数组的输入输出 1用scanf()和pr

13、intf()实现字符数组的输入和输出 (1)用%c控制的scanf()和printf()可以逐个输入和输出字符数组中的各个字符。 【例7.14】用scanf()和printf()实现字符型数组的输入和输出。 (2)用%s控制的scanf()和printf()可以输入和输出字符串。,注意:由于数组名代表数组起始地址,因此在scanf()函数中只需写数组名ch即可,而不能写成scanf(“%s”,语句向字符数组输入一个字符串,可在运行时从键盘输入并按回车键即可,不必在字符串两端加双引号。例如,可按以下方式输入字符串: Computer 在按回车键后,回车键前面的字符作为一个字符串输入,系统自动在最

14、后加一个字符串结束标志“0”,并且输入给数组中的字符个数是9而不是8。,注意:%s用在scanf()中控制输入时,输入的字符串不能含有空格或制表符。因为C语言规定,用scanf()输入字符串是以空格或回车符作为字符串间隔符号;当%s遇到空格或制表符时,就认为输入结束。,2字符串输入函数gets()和字符串输出函数puts() 使用gets()的一般格式为: gets(字符数组名); 用puts()可以输出字符串,字符串中空格或回车不影响,遇到“0”结束字符串输出,而且自动把字符串末尾的“0”字符转换成换行符,而%s控制的printf()则没有将字符串末尾的“0”转换成换行符的功能,必须增加“n

15、”来实现换行。调用它的一般格式为: puts(字符数组名或字符串常量);,【例7.15】一维字符数组的输入和输出。 【例7.16】二维字符数组的输入和输出。,7.5.3 字符串处理函数 1求字符串长度函数strlen() 该函数用来计算字符串的长度,即所给字符串中包含的字符个数(不计字符串末尾的“0”字符),函数返回值为整型,其调用格式为: strlen(字符串) 其中的参数可以是字符数组名或字符串常量。,2字符串复制函数strcpy()和strncpy() 该函数用来将一个字符串复制到另一个字符串中,函数类型为void,其调用格式为: strcpy(字符数组1,字符串2) 该函数可以将字符串

16、2中的字符复制到字符数组1中。其中字符数组1必须定义得足够大,以容纳被复制的字符串。函数中的参数字符数组1必须是字符数组名,字符串2可以是字符数组名或字符串常数。,在某些应用中,需要将一个字符串的前面一部分复制,其余部分不复制。函数strncpy()可实现这个要求,其调用格式为: strncpy(字符数组1,字符串2,n) 该函数的作用是将字符串2中的前n个字符复制到字符数组1(附加“0”)。其中n是整型表达式,指明欲复制的字符个数。如果字符串2中的字符个数不多于n,则该函数调用等价于: strcpy(str1,str2) 注意:不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。例如, 设str1是

展开阅读全文
相关资源
相关搜索

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

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