《C语言程序设计 教学课件 ppt 作者 蒋清明C语言程序设计__第5章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 蒋清明C语言程序设计__第5章(105页珍藏版)》请在金锄头文库上搜索。
1、第5章 数组,返回总目录,目 录,5.1 一维数组,5.2 二维数组,5.3 多维数组,5.6 习题五,5.4 函数与数组,5.5 问题与解答,返回总目录,基本要求: )熟悉一维、二维及多维数组的定义、初始化与引用; )熟悉字符串数组与字符串操作; )熟悉“函数与数组”的相关操作。 学习重点: )“函数与数组”的相关操作;,5.1 一维数组,5.1.0 引言,返回目录,C语言提供了多种数据类型,除了前面介绍的整型、实型和字符型等基本数据类型外,还有一些扩展的数据类型,如数组、指针、结构和联合等。由于它们是由基本数据类型按一定规则组成的,所以被称之为复合数据类型或构造数据类型。,5.1 一维数组
2、,5.1.0 引言,本章首先介绍一种最常用的构造数据类型数组。 数组是具有一定顺序关系的若干个同类型变量的集合。 在数组中,每一个变量称之为一个数组元素。 数组中的各个数组元素又可以用一个统一的“数组名”后接不同的“下标”来惟一确定。,5.1 一维数组,5.1.0 引言,按照数组元素的类型可把数组分为整型数组、实型数组、字符型数组和指针型数组等。 按照下标的个数又可以把数组分为一维数组、二维数组和多维数组。 我们首先学习最简单也是最常用的“一维数组”。,5.1 一维数组,5.1.1 一维数组的定义与初始化,一维数组的定义,在C语言中,与变量的定义一样,数组也遵循“先定义后使用”的原则。一维数组
3、的定义格式为: 类型说明符 数组名常量表达式; 例如: short score8; 表示定义一个数组,数组名为score,共有8个元素,每个元素的数据类型均为短整型。,5.1 一维数组,5.1.1 一维数组的定义与初始化,当在说明部分定义了一个数组之后,C编译程序会为所定义的数组在内存中开辟一串连续的存储单元,本例定义的score 数组在内存中的排列如图5.1所示。,Score数组共有8个元素,在内存中,这8个数组元素共占用8个连续的存储单元,每个存储单元中只能存储一个整数,第一个元素对应的存储单元的地址称为数组首地址。(图中假设首地址为2000,每个short型数据占2个字节).,一维数组的
4、定义,5.1 一维数组,5.1.1 一维数组的定义与初始化,在定义一维数组时,应注意以下几点:,一维数组的定义,类型说明符用来说明数组元素属于何种数据类型,如int、char、float或double等。 数组名由用户自定义,与变量名的命名一样,遵循标识符命名规则。 数组名后必须用“方括号”括起常量表达式,不能用其它括号。例如: short score(8); short score; short score8; 这3个定义都是错误的。 常量表达式定义数组的长度,表示数组的元素个数。但要注意,数组在内存中所占的字节数数组长度元素类型长度。如图5.1定义的数组score在内存中所占字节数8216
5、。,5.1 一维数组,5.1.1 一维数组的定义与初始化,在定义一维数组时,应注意以下几点:,一维数组的定义,常量表达式中一般包括整型常量、字符常量或符号常量,但不能包括实型(符号)常量或字符串(符号)常量。 当然,实际使用时,除非特殊需要,一般都只要用一个“整型常量值”来定义数组的长度即可。 常量表达式中不能包括变量。 例如: short n=8; short scoren; 是不正确的。,5.1 一维数组,5.1.1 一维数组的定义与初始化,在定义一维数组时,应注意以下几点:,一维数组的定义,数组元素的下标从0开始,所以上例定义的数组的8个元素分别是:score0、score1、score
6、2、score3、score4、score5、score6、score7。注意最大下标是7而不是8,不要弄错! 相同类型的数组、变量可放在一起定义,中间用逗号隔开。例如: short a,b=8,score8,c,num10,d; 是正确的。其中定义了4个变量(a,b,c,d)和2个数组(score和num)。,5.1 一维数组,5.1.1 一维数组的定义与初始化,一维数组的初始化,数组的初始化是指在定义数组的同时为数组元素赋初始值。一维数组在定义时进行初始化的格式为: 类型说明符 数组名常量表达式=值1,值2,值n; 其中,大括号中的各个值依次对应赋给数组中的各个元素。各个值之间用逗号隔开。
7、 例如,数组定义及初始化语句为: int x5=1,2,3,4,5; 则有: x0=1; x1=2; x2=3; x3=4; x4=5;,5.1 一维数组,5.1.1 一维数组的定义与初始化,一维数组的初始化,在定义并初始化一维数组时,应注意以下几点:,(1) 若 中初值的个数数组元素个数,则只有数组的前部分元素对应获得初值,后部分没有获得初值的元素则置相应类型的默认值(如int型置整数0, char型置字符0,float型置实数0.000000等)。 例如定义: int x5=1,2,3; 则有:x0=1; x1=2; x2=3; x3=0; x4=0。,5.1 一维数组,5.1.1 一维数
8、组的定义与初始化,一维数组的初始化,在定义并初始化一维数组时,应注意以下几点:,(2) 若 中初值的个数数组元素个数,则在数组定义时可省略元素个数,此时数组长度由 中值的个数来决定。 例如定义: int x =1,2,3,4,5; 就相当于int x5=1,2,3,4,5。,5.1 一维数组,5.1.1 一维数组的定义与初始化,一维数组的初始化,在定义并初始化一维数组时,应注意以下几点:,(3) 若 中初值的个数数组元素个数,则编译时会出现“too many initializers”之类的错误,表示初值个数太多。 例如定义: int x5=1,2,3,4,5,6; 是不对的。因为初值个数(=
9、6)超过了定义的数组长度(=5)。,5.1 一维数组,5.1.2 一维数组的引用,一维数组的引用,C语言规定数组不能以整体形式参与各种运算。参与各种运算的只能是数组元素,即在程序中不能一次引用整个数组而只能逐个引用数组元素。 一维数组元素的引用形式为: 数组名下标 其中,下标可以是整型常量,整型变量或整型表达式。例如定义:int n=2; int score4=10,20,30,40; 则其4个元素的引用形式为:score0、score1、score2和score3。,5.1 一维数组,5.1.2 一维数组的引用,一维数组的引用,又如:score2 score4-2 scoren 都表示引用s
10、core数组的第3个元素。从中可以看出,在引用数组元素时,下标可以是整型变量。而前面已经介绍在定义数组时,数组长度是不能为整型变量的。 数组元素与普通变量的表现形式不同,但实质是相同的,它也是一种变量。因此,一个数组元素可以象普通变量那样参与赋值、算术运算、输入和输出等操作。下面通过介绍一维数组的输入、输出操作来熟练掌握对一维数组元素的引用。,5.1 一维数组,5.1.2 一维数组的引用,一维数组的输入,1)通过初始化使一维数组各元素得到初值,如: int score4=10,20,30,40; 2)在程序运行期间用赋值语句为一维数组各元素赋值,如: int i, score4; for(i=
11、0; i4; i+) scorei=(i+1)*10; 3)在程序运行期间用键盘输入语句scanf( )为数组元素输入值,如: int i, score4; for(i=0; i4; i+) scanf ( “%d“, ,5.1 一维数组,5.1.2 一维数组的引用,一维数组的输出,一维数组的输出是指用输出语句printf ( )将数组的元素逐个地输出。例如: int i, a10=1,2,3,4,5,6,7,8,9,10; for(i=0;i10;i+) printf (“%5d“,ai); 从这些示例可以看出,数组元素是一种带下标的变量,它跟普通变量一样参与赋值、输入和输出等操作。,5.1
12、 一维数组,5.1.2 一维数组的引用,一维数组的输出,但是,绝对不能把“数组名”当成变通变量一样使用。例如定义: int a100; int b10=1,2,3,4,5,6,7,8,9,10; 后,采用如下语句进行数据输入输出操作: scanf(“%d“, 则是错误的,也不要认为这能输入或输出整个数组。,5.1 一维数组,5.1.2 一维数组的引用,例5.1 从键盘输入10个数,将这10个数逆序输出,然后求出这10个数的和并输出。 #include main( ) int i,a10,total=0; printf(“请连续输入10个整数(空格分开):“); for(i=0;i=0;i-)
13、printf(“%5d“,ai); /*数组元素的逐个输出*/ for(i=0;i10;i+) total=total+ai; /*数组元素逐个相加*/ printf(“n这10个整数的和为:%dn“,total); ,5.1 一维数组,5.1.3 字符数组与字符串,字符串:用双引号括起来的一串字符。 例如:“How are you!”或“Hello, world!” 字符数组:用来存放字符型数据的数组。 例如:char c13; 字符串结束标志:C语言规定了一个字符串结束标志,以字符0代表。 0代表ASCII码为0的字符,它是一个“空操作符”,即什么也不干。由它来作为字符串结束标志不会产生附
14、加的操作或增加有效字符,其作用是用来测定字符串的实际长度。,5.1 一维数组,5.1.3 字符数组与字符串,字符串的存储: C语言中没有专门存放字符串的变量(Basic、Fortran语言中有),而是采用字符数组存放。字符数组中的每个元素存放字符串的一个字符。 即字符数组在存放字符串时,字符串末尾的结束符0也一并存放。所以,一个字符串用一维数组来装入时,数组元素个数一定要比字符数多一个。例如: char c13=“How are you!”; 定义了一个字符数组c,存放的字符串中字符数为12,考虑到还有1个字符串结束符0,定义的数组长度不能少于13。,5.1 一维数组,5.1.3 字符数组与字
15、符串,字符数组的定义与初始化 定义与普通数组类似,一般形式为: char 数组名常量表达式 例如:char c8; 定义时进行初始化。例如: char c =“GOOD“; /*字符串末尾会自动加上结束符0*/ 等价于:char c =G,O,O,D,0; 等价于:char c =“GOOD“; /*字符串常量外的大括号可省略*/ 等价于:char c5=“GOOD“; 等价于:char c5=G,O,O,D,0; 等价于:char c5=“GOOD“;,5.1 一维数组,5.1.3 字符数组与字符串,例5.2 请编写一个程序,其功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1688”,则程序要能把它转换为整数值-1688并输出。,#include main( ) int flag=0,i=0; long num=0; char str =“-1688“; /*将数字字符串放在一维字符数组s中*/ while(stri!=0) if(stri=-) flag=1; /*判断数的正负,为-表示负数*/ else if (stri=+) flag=0; /*判