C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5

上传人:w****i 文档编号:92563770 上传时间:2019-07-11 格式:PPT 页数:113 大小:1.26MB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5_第1页
第1页 / 共113页
C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5_第2页
第2页 / 共113页
C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5_第3页
第3页 / 共113页
C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5_第4页
第4页 / 共113页
C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5_第5页
第5页 / 共113页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 蔡启先第4章 数组和字符串5(113页珍藏版)》请在金锄头文库上搜索。

1、第4章 数组和字符串,4.1 一维数组,4.2 字符数组和字符串,4.4 多维数组,第 4 章 数 组 和 字 符 串,4.3 二维数组,4.5 数组越界问题,4.6 综合应用举例,前面我们讨论了C 语言的基本数据类型。除基 本数据类型外,C语言还提供了一些扩展的数据类型, 即由基本数据类型构成的扩展数据类型,我们称之 为构造数据类型,有数组、结构体、共用体等。 数组是若干同类变量的集合,也就是一组具有 固定大小和相同数据类型元素的有序集合。构成数 组的各元素必须是同一类型的变量,数组中的每个 元素通过下标访问(用方括号标示下标)。在C语言 里,数组都由连续内存区构成,一个数组就是线性 存储的

2、一组同类型的值。数组可以是一维的,也可以 是多维的。,目录,数组可以用一种便利的方式来存储处理一组相关的数据,如学生成绩的管理。在实际问题中数组主要用来处理批量数据,如表格、向量、矩阵等,因而在很多程序中数组都是很重要的一种数据类型。 字符串和字符型数组的关系非常紧密,对字符串的处理常涉及对字符数组的处理。本章着重于数组的定义和使用以及字符串的处理。,4.1 一维数组,4.1.1 一维数组的定义,4.1.2 一维数组的初始化,4.1.3 程序举例,4.1 一维数组,数组是一种非常重要的数据类型,它可使我们,以一种便利的方式来存储使用一些相关的信息项,,这有点类似于数学中的集合。例如我们线性存储

3、 10个元素的整数,可定义如下数组:,int a10;,这就是具有10个元素的数组,其中的每个元素 都是一个int型的值。当然数组可以是任意基本数 据类型的数组:,char c10; /* 定义10个字符型元素的数组 */ float f10; /* 定义10个浮点型元素的数组 */,数组变量和其它变量一样,在使用之前需要说明, 定义一维数组的一般形式是:,类型说明符 数组名常量表达式,这里,类型说明符定义数组的基本类型, 即数组 中各元素的类型。数组名是一个标识符,其命名规则 和变量相同。常量表达式定义数组的大小或者长度, 即数组中可以存放多少个元素。常量表达式必须是整 型常量或整型常量表达

4、式。,4.1.1 一维数组的定义,4.1一维数组,例如,为了定义具有5个元素的double类型 数组student,可以书写成如下语句: double student5; double student2+3;,或者,#define SIZE 5,duoble student5; /* 采用整型的符号常量 */,该语句表示定义了一个双精度浮点型数组,数组 名就是student,“”表示是数组,“5”表示该数组 可以存放5个双精度浮点型数据。,4.1一维数组,注意下面定义是错误的: double 2student5; /* 数组名不符合命名规则 */ int a=10;double student

5、a;/*数组的长度为变量*/ 进行了数组说明后,就可以对数组元素进行访问了。那 么,通过什么方法来访问到数组元素呢?可用注明下标 的形式即下标变量来表示数组元素: 数组名 常量表达式,4.1一维数组,其中常量表达式表示数组的下标,它必须是整型常量或整型表达式,如student0、student 3等。在C语言中,下标是从0开始的,因此上面说明的student数组的最大下标是4,它含有5个元素,即student 0、student 1、student 2、.、student 4。必须要注意的是,按照上面对数组student的定义,不存在数组元素student5。但是C语言不检查数组边界,程序可以

6、在数组两边越界,写入其他变量,甚至写入程序代码段。因此作为程序员,必要时应自己加入边界检查(详见4.5节)。,4.1一维数组,下面是以下标变量的形式具体访问数组元素:,student0=85 /*直接对序号为0的数组元素赋值*/,student 1= student 0*2; /* 通过已知下标变量对数组元素赋值 */,student 2= student 0+ student 1;,注意:访问数组元素时使用的常量表达式和进 行数组说明时使用的常量表达式的意义不同。前 者是用来指明元素在数组中所处的位置,而后者 是表示数组的大小。,4.1一维数组,4.1.2 一维数组的初始化,数组初始化的一般

7、形式与其它变量的初始化相似,可以在定 义的时候初始化变量,其形式如下:,类型说明符 数组名 常量表达式 = 值表 ;,例如: int a5=-1,2,8,4,-5;,这不同于以前的单个数值变量的初始化,而是采用花括号 括起来的一系列数值来初始化数组,数值间用逗号隔开。这 样,首元素a0赋值为-1,a1赋值为2,a2赋值为8,依 次类推。,当采用这种方式时,也可写成:,int a =-1,2,3,4,-5;,此时数据的个数已经确定,花括号中有五个整数,系统就会 据此自动定义a数组的长度为5,故可不指定数组长度。,为什么不指定?,4.1一维数组,下面试图对数组所有元素赋值是错误的:,int a5;

8、,a5=-1,2,3,4,-5;,这样是不能初始化数组a的。因为在可执行语句中,a5 是数组元素的表示形式,事实上该数组末元素为a4,不存 在a5这个元素。当然下面的写法也是错误的:,int a5; a=-1,2,3,4,-5;,a虽然是数组名,但它代表数组a的首地址(详见第5章指针)。,4.1一维数组,例4.1 没有指定数组长度时的初始化。,#include void main( ), int i;,int a =-1,2,3,4,-5 ; /* 声明5个整型元素的数组并初始化元素 */,printf (“%2s%10sn“,“i“,“ai“);,for(i=0;i5;i+),printf

9、(“%2d%10dn“,i,ai); /* 输出各元素的值 */,4.1一维数组,例4.1 没有指定数组长度时的初始化。,程序运行情况如下: i ai 0 -1 1 2 2 3 3 4 4 -5,#include void main( ), int i;,int a =-1,2,3,4,-5 ;,printf (“%2s%10sn“,“i“,“ai“);,for(i=0;i5;i+),printf (“%2d%10dn“,i,ai);,4.1一维数组,例4.2 值表的数据个数小于数组长度时的初始化。,#include,void main( ), int i;,int a5=-1,2,3 ; /

10、* 声明5个整型元素的数组并初始化前三个元素 */,printf (“%2s%10sn“,“i“,“ai“);,for(i=0;i5;i+),printf (“%2d%10dn“,i,ai); /* 输出各元素的值 */ ,初始化时值表的数据个数应该和数组的长度一致。如果 二者不同,会出现什么情况?现举例说明。,4.1一维数组,程序运行情况如下:,i ai 0 -1 1 2 2 3 3 0 4 0,从输出结果可知,此时没有被赋值的元素自动初始化为0,也 就是说在初始化之前,数组元素就像普通的变量一样值是随机 的,但如果部分初始化时,没被初始化的数组元素则自动设置 为0,所以使一个数组的所有元素

11、值都为0,可以写成:,int a20=0;,而不必逐个赋值0。,4.1一维数组,当初始化时值表的数据个数大于数组的长度时,编译时就会通不过,为避免出错,可采用例4.1的方法。,当然也可以直接对已定义数组中的下标变量赋值,例如:,a0=12; a3=-13;,等。下面的程序加载并输出由0-9组成的一个整型数组:,4.1一维数组,例4.3 数组输入0-9的值。,#include #define SIZE 10 /*符号常量方便数组长度的改变*/ Void main () int I, aSIZE ; /*声明10个整形元素的数组*/ for(j=0;jSIZE;j+) aj=j; /*加载个数组元

12、素*/ for(j=0;jSIZE;+j) printf(“%5d”,aj); /*输出个元素的值*/ ,程序运行情况如下: 0 1 2 3 4 5 6 7 8 9,4.1一维数组,第一个for循环提供了一种简单而直接的方法为数组赋初值, 这在C语言编程中经常使用,但需要注意的是使用循环对元素 逐个赋值。C不支持把数组作为一个整体来进行赋值和引用, 下面是一些错误的赋值方式:,int a =-1,2,3,4,-5 ; /* 正确的方式赋值 */,int b5;,b=a; /* 错误的方式赋值 */ b5=a5; /* 错误的方式赋值 */ b5=1,2,3,4,5 /* 错误的方式赋值 *,4

13、.1一维数组,保存数组所需内存量直接与基本类型和数组大小有关。对 一维数组而言,以字节为单位的总内存量可由下式计算得到:,总字节数sizeof(基类型)数组长度,本质上,一维数组就是在连续内存中按下标顺序存储的同 类信息组成的表。下图所示是数组a开始于内存位置1000的 内存映像。a的定义是:,int a7;,元素 a0 a1 a2 a3 a4 a5 a6 地址 1000 1002 1004 1006 1008 1010 1012 数组a在内存中的存储,4.1一维数组,例4.4 数组元素在内存中的分布。,#include,#define S 5,void main( ), int i;,int

14、 aS; /* 定义5个整型元素的数组 */,printf (“%2s%15sn“,“i“,“ai address“);,for(i=0;i5;i+),printf (“%2d%15dn“,i, /* 输出各元素在内存中的地址 */,printf (“total sizes is:%d“,sizeof(int)*S); /* 输出总字节数 */,程序运行情况如下(32位机执行的结果): i ai address 0 1310560 1 1310564 2 1310568 3 1310572 4 1310576 total sizes is:20,4.1一维数组,由于数组所占据的存储空间是由操作

15、系统安排的,因此在不同的情况下地址值是不同的,整型变量所占的字节也不同,但我们可看出数组元素的地址是连续的。,4.1一维数组,4.1.3 程序举例,例4.5 用一个一维数组存放rand()库函数产生的5个 随机数,找出其中的最大值及它的下标。,#include,#include /* 数学函数头文件 */,void main( ), int a5,i,max,j1=0;,for(i=0;i5;i+), ai=rand(); /* rand()产生-90到32767间的随机数 */,printf(“%6d“,ai);,4.1一维数组,printf(“n“);,max=a4; /* 假设a4的值最大 */,for(i=3;i=0;i-),if(maxai)max=ai; j1=i; /* 与其它四个随机数相比较 */,printf(“max is:a%d=%d “ , j1, aj1);,程序运行情况如下:,41 1846

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

最新文档


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

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