[理学]第四章 数组

上传人:油条 文档编号:55076786 上传时间:2018-09-24 格式:PPT 页数:43 大小:595KB
返回 下载 相关 举报
[理学]第四章 数组_第1页
第1页 / 共43页
[理学]第四章 数组_第2页
第2页 / 共43页
[理学]第四章 数组_第3页
第3页 / 共43页
[理学]第四章 数组_第4页
第4页 / 共43页
[理学]第四章 数组_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《[理学]第四章 数组》由会员分享,可在线阅读,更多相关《[理学]第四章 数组(43页珍藏版)》请在金锄头文库上搜索。

1、第四章 数组,简述,数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素。 如: int a10; a0 = 5; a1 = 7;,一维数组 二维数组 字符数组 字符串处理函数,(一)一维数组,内容,定义 数组元素引用 初始化 举例,一维数组定义(1/2),一维数组的定义方式为: 类型说明符 数组名 常量表达式; 例如: int a10; 说明: (1) 数组名定名规则和变量名相同,遵循标识符定名规则。 (2) 数组名后是用方括弧括起来的常量表达式,不能用圆括弧,下面用法不对:int a(10); (3) 常量表达式表示元素的个数,即数

2、组长度。 例如:在a10中,10表示a数组有10个元素,注意:下标从0开始,这10个元素是a0,a1,a9。注意不能使用数组元素a10。,一维数组定义(2/2),(4) 常量表达式中可以包括常量和符号常量,不能包含变量。 也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。 例如:下面这样定义数组不行 int n; scanf(“%d“, 5)一维数组元素在内存中的存放方式:按顺序存放。,一维数组的元素引用,数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。 数组元素的表示形式为: 数组名下标 下标可以是整型常量或整型表达式。

3、 例如: a0 = a5 + a7 - a2*3 注意: 1)下标以“0”为基准。 a0:表示数组a的第一个元素。 a1:表示数组a的第二个元素。 2)下标的边界: 下界 下标 上界; 下界0; 上界整常量表达式1。,引用示例,例6.1 数组元素的引用 #include int main() int i; int a10; for (i=0; i=0; i-) printf(“%d”, ai); return 1; 运行结果:9 8 7 6 5 4 3 2 1 0,一维的数组初始化(1/2),对数组元素的初始化可以用以下方法实现: 1)在定义数组时对数组元素赋以初值。 例如: int a10

4、= 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; 将数组元素的初值依次放在一对花括弧内。 2)可以只给一部分元素赋值。 例如: int a10 = 0, 1, 2, 3, 4; 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值。,一维的数组初始化(2/2),3)如果想使一个数组中全部元素值为0,可以写成: int a10 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 不能写成 int a10 = 0*10; 4) 在对全部数组元素赋初值时,可以不指定数组长度。 例如: int a5 = 1, 2, 3, 4, 5; 可以写成 int

5、 a = 1, 2, 3, 4, 5; 在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5。,一维数组举例(例7.2),例6.2,用数组来处理求fibonacci数列问题 程序见源码6-2.c. 运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,一维数组举例(例7.3),例6.3用起泡法对10个数排序(由小到大)。 起泡法的思路是:将相邻两个数比较,将小的调到前头。 分析如下面的图。 程序见源码6-3.c,一维数组举例(例7.3),一维数组举例(例7.3),(二)二维数组,内

6、容,定义 元素应用 初始化 举例,二维数组的定义,二维数组定义的一般形式为: 类型说明符 数组名常量表达式1常量表达式2。 例如: float a34; 定义a为34(3行4列)的数组。 注意不能写成 float a3,4; 二维数组元素在内存中的存储方式: 在计算机中二维数组的元素按行顺序存放。,二维数组的引用,二维数组的引用格式: 数组名下标1下标2 注意下标的范围: 0下标1常量表达式1 - 1; 0下标2常量表达式2 - 1。 例如: int a23; a02 = 1; a13 = 4; / 错误,下标2越界,二维数组的初始化(1/3),可以用下面的方法对二维数组初始化: 1)分行给二

7、维数组赋初值。 如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 一行对一行。 (2) 可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。 如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 没有第一种方法好,不直观。,二维数组的初始化(2/3),(3) 可以对部分元素赋初值。 如: int a34=1, 5, 0, 9; 它的作用是只对各行的相应列的元素赋初值,其余元素值自动为0。赋初值后数组各元素为 1 0 0 0 5 0 0 0 0 9 0 0 也可以只对某几行元素赋初值: int a34 = 1, 5,6; 数组元素为

8、 1 0 0 0 5 6 0 0 0 0 0 0,二维数组的初始化(3/3),4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。 如: int a34 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 与下面的定义等价: int a4 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 系统会根据数据总个数分配存储空间,一共12个数据,每行4列,当然可确定为3行。 在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。 如:int a34 = 0, 0, 3,

9、 , 0, 10; 这样的写法,能通知编译系统;数组共有3行。数组各元素为: 0 0 3 0 0 0 0 0 0 10 0 0,二维数组举例(例7.4),例6.4将一个二维数组行和列元素互换,存到另一个二维数组中。 例如: a:1 2 3 b:1 4 4 5 6 2 5 3 6 程序见源码6-4.c,二维数组举例(例7.5),例6.5 有一个34的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 分析:用N-S流程图表示算法,如图: 程序见源码6-5.c。,(三)字符数组,内容,字符数组的定义 字符数组的初始化 字符数组的引用 字符串和字符串结束标志 字符数组的输入输出,

10、字符数组,用来存放字符数据的数组是字符数组。 字符数组中的一个元素存放一个字符。,字符数组的定义,定义方法与前面介绍的类似。 例如: char c10; c0=I; c1= ; 定义c为字符数组,包含10个元素。在赋值以后数组的状态如图所示。 也可以用整型数值来存放字符型数据,因此上面第一行也可以改用: int c10; / 合法,但浪费存储空间,字符数组的初始化(1/2),如: char c10 = I, ,a,m,h,a,P,P,y; char c = I, ,a,m,h,a,P,P,y; 如果花括弧中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理。 如果初值个数小于数组长度,

11、则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即0)。如: char c10=c, ,P,r,o,g,r,a,m; 数组状态如图所示:,字符数组的初始化(2/2),也可以定义和初始化一个二维数组。 如: diamond55 = , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,*;,字符数组的引用(1/2),例6.6 输出一个字符串。 #include int main() char c10 = I, , a, m, , a, , b, o, y; int i; for(i=0; i10;i+) printf(“%c“, ci); printf(“n“)

12、; return 1; 运行结果: I am a boy,字符数组引用(2/2),例6.7 输出一个钻石图形。 程序见源码6-7.c 运行结果为:,字符串和字符串结束标志(1/2),在C语言中,将字符串作为字符数组来存放。例7.6就是用一个一维的字符数组存放一个字符串“I am a boy”中的字符。这个字符串的实际长度与数组长度相等。 有时,人们关心的是有效字符串的长度而不是字符数组的长度。例如,定义一个字符数组长度为100,而实际有效字符只有40个。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符0代表。 如果有一个字符串,其中第10个字符为0,则此字符串的有效字符为9

13、个。也就是说,在遇到字符0时,表示字符串结束,由它前面的字符组成字符串。,字符串和字符串结束标志(2/2),我们以前曾用过以下的语句: printf(“How do you do?n“); 即输出一个字符串。 在执行此语句时系统怎么知道应该输出到哪里为止呢? 实际上,在内存中存放时,系统自动在最后一个字符n的后面加了一个0作为字符串结束标志,在执行printf函数时,每输出一个字符检查一次,看下一个字符是否0。遇0就停止输出。,字符数组初始化的另一种方法,字符数组初始化的另一种方法,可以用字符串常量来使字符数组初始化。 例如: char c = “I am happy“; 也可以省略花括弧,直

14、接写成 char c = “I am happy“; 这种方法直观、方便、符合人们的习惯。数组c的长度不是10,而是11,这点务请注意。因为字符串常量的最后由系统加上一个0。 如:char c = “China”,在内存种的存放形式如下:,字符数组的输入输出,字符数组的输入输出可以有两种方法: (1) 逐个字符输入输出。用格式符“%c”输入或输出一个字符,如例7.6、7.7。 (2) 将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串(String)。 例如: char c = “China”; printf(“%s”, c); 在内存中数组c的状态如图所示: 输出时,遇结束符0就

15、停止输出。输出结果为: China,字符数组的输入输出注意事项(1/3),(1) 输出字符不包括结束符0。 (2) 用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。写成下面这样是不对的: printf(“%s”, c0); (3) 如果数组长度大于字符串实际长度,也只输出到遇0结束。 如: char c10 = “china”; printf(“%s“,c); 则输出结果为:china,字符数组的输入输出注意事项(2/3),4)如果一个字符数组中包含一个以上0,则遇第一个0时输出就结束。 5)可以用scanf函数输入一个字符串。 例如 scanf(“%s”,c); scanf函数中的输入项c是字符数组名,它应该在先前已被定义。从键盘输入的字符串应短于已定义的字符数组的长度。 需要注意:scanf函数中的输入项是字符数组名。输入项为字符数组名时,不要再加地址符&,因为在C语言中数组名代表该数组的起始地址。下面写法不对: scanf(“%s”,&Str);,

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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