清华谭浩强C语言课件第7章数组.ppt
《清华谭浩强C语言课件第7章数组.ppt》由会员分享,可在线阅读,更多相关《清华谭浩强C语言课件第7章数组.ppt(81页珍藏版)》请在三一办公上搜索。
1、高级语言程序设计,张远,程序=算法+数据结构+结构化程序设计方法+语言工具和环境,第7章 数组,前面各章所使用的数据都属于基本数据类型(整型、实型、字符型),C语言除了提供基本数据类型外,还提供了构造类型的数据,它们是数组类型、结构体类型、共同体类型等。构造数据类型是由基本数据类型的数据按照一定的规则组成,所以也称为“导出类型”。,下面简单介绍一下数组概念:1、数组:一组具有相同数据类型的数据的有序的集合。2、数组元素:构成数组的数据。数组中的每一个数组元素具有相同的名称,不同的下标,可以作为单个变量使用,所以也称为下标变量。,3、数组的下标:是数组元素的位置的一个索引或指示。4、数组的维数:
2、数组元素下标的个数。根据数组的维数可以将数组分为一维、二维、三维、多维数组。,7.1 一维数组数组是一组有序数据的集合,数组中每一个元素的类型相同。用数组名和下标来唯一确定数组中的元素。,7.1.1一维数组的定义(先定义后使用)定义方式:类型说明符 数组名整型常量表达式,例:int a10,第7章 数组,int a10 表示如下信息:定义一个数组,数组名a,有10个元素,每个元素的类型均为int。这10个元素分别是:a0、a1、a2、a3、a4、.、a8、a9。各个数组元素是排成一行的一组下标变量,用一个统一的数组名来标识,用一个下标来指示其在数组中的位置。一维数组通常和一重循环相配合,对数组
3、元素进行处理。注意:1)下标从0开始。如:数组a的第1个元素是a0,数组的第8个元素是a7,第7章 数组,注意:2)C语言不允许对数组的大小做动态定义,如:int n;scanf(%d,因为在编译时,C编译器根据已知数组大小分配内存。,说明:1)数组名:按标识符规则。本例a就是数组名。2)整型常量表达式:表示数组元素个数(数组的长度)。可以是整型常量或符号常量,不允许用变量。整型常量表达式在说明数组元素个数的同时也确定了数组元素下标的范围,下标从0开始整型常量表达式-1(注意不是1整型常量表达式)。,C语言不检查数组下标越界,但是使用时,一般不能越界使用,否则结果难以预料(覆盖程序区-程序飞出
4、,覆盖数据区-数据覆盖破坏,操作系统被破坏,系统崩溃)。本例数组元素个数是10个,下标从0-9。,3)C编译程序为数组分配了一片连续的空间。,4)类型说明:指的是数据元素的类型,可以是基本数据类型,也可以是构造数据类型。类型说明确定了每个数据占用的内存字节数。,一维数组:float mark100;,每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节,第7章 数组,7.1.2 一维数组的初始化 初始化:在定义时指定初始值,编译器把初值赋给数组变量。赋值:使用赋值语句,在程序运行时把值赋给数组变量,如a0=2。初始化格式:数据类型 数组名常量表达式初值表,1、一般初始化,例:stat
5、ic int a10=0,1,2,3,4,5,6,7,8,9int array10=1,2,3,4,5,6,7,8,9,10;2、部分元素初始化,其余元素均为零。例:static int a10=0,1,2,3,4;仅前5个元素赋初值,后5个元素自动赋为0。3、全部元素均初始化为0,不允许简写。static int a10=0,0,0,0,0,0,0,0,0,0;不能写成:int a10=0*10;,第7章 数组,不能简写为:static int a10=0*10;注意:当程序不给数组指定初始值时,编译器作如下处理:(1)编译器自动把静态数组的各元素初始化为0。(2)编译器不为动态数组自动指定
6、初始值。,4、如果全部元素均指定初值,定义中可以省略元素的个数,例:static int a5=1,2,3,4,5;可以写为:static int a=1,2,3,4,5;,7.1.3 数组元素的引用C语言规定,不能引用整个数组,只能逐个引用元素,元素引用方式:数组名下标表达式 例:a0=a5+a7-a2*3“下标表达式”可以是任何非负整型数据,取值范围是0(元素个数-1)。,特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种
7、运算。在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。,例6.1 使数组元素a0a9的值为09,然后逆序输出。main()int i,a10;for(i=0;i=0;i-)printf(%d,ai);运行输出:9 8 7 6 5 4 3 2 1 0,7.1.4 一维数组的应用例7.3 输入10个数,用“冒泡法”对10个数排序(由小到大)。冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。,“冒泡法”算法:以六个数9、8、5、4、2、0为例。第1趟比较(
8、下图1)第2趟比较(下图2),第1趟比较后,剩5个数未排好序;两两比较5次第2趟比较后,剩4个数未排好序;两两比较4次第3趟比较后,剩3个数未排好序;两两比较3次第4趟比较后,剩2个数未排好序;两两比较2次第5趟比较后,全部排好序;两两比较1次,算法结论:对于n个数的排序,需进行n-1趟比较,第j趟比较需进行n-j次两两比较。程序流程图:(用两层嵌套循环实现),程序:设需排序的数有10个,定义数组大小为11,使用a1a10存放10个数,a0不用。main()int a11;/*用a1a10,a0不用*/int i,j,t;/*i,j作循环变量,t作临变*/printf(input 10 num
9、bers:n);for(i=1;i11;i+)scanf(%d,for(j=1;j ai+1)/*交换大小*/t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);,程序运行结果如下:input 10 numbers:1 0 4 8 12 65-76 100-45 123the sorted numbers:-76-45 0 1 4 8 12 65 100 123,7.2 二维数组 二维数组:数组元素是双下标变量的数组。二维数组的数组元素可以看作是排列为行列的形式(矩阵)。二维数组也用统一的数
10、组名来标识,第一个下标表示行,第二个下标表示列。下标从0开始。,7、2、1 二维数组的定义 类型说明符 数组名1行常量表达式1列常量表达式1,数组名2行常量表达式2列常量表达式2;例:int a34;a为34(3行4列)的数组 float b510;b为510(5行10列)的数组二维数组的理解:二维数组a34理解为:有三个元素a0、a1、a2,每一个元素是一个包含4个元素的数组。,二维数组的元素在内存中的存放顺序:按行存放,即:先顺序存放第一行的元素,再存放第二行的元素。(最右边的下标变化最快,第一维的下标变化最慢)。,地址 值 数组元素,b00b01b02b10b11b12b20b21b22
11、,3000H3002H3004H3006H3008H300AH300CH300EH3010H,例如:整型数组 b33=1,2,3,4,5,6,7,8,9;,123,456,789,再一次说明:1)二维数组中的每个数组元素都有两个下标,且必须分别放在单独的“”内。如:a3,4 2)二维数组定义中的第1个下标表示该数组具有的行数,第2个下标表示该数组具有的列数,两个下标之积是该数组具有的数组元素的个数。,(3)二维数组中的每个数组元素的数据类型均相同。二维数组的存放规律是“按行排列”。(4)二维数组可以看作是数组元素为一维数组的数组。,7.2.2 二维数组的初始化 1、分行赋值,如:static
12、int a34=1,2,3,4,5,6,7,8,9,10,11,12;2、全部数据写在一个大括号内,如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;,3、部分元素赋值,如:static int a34=1,5,9;仅对a00、a10、a20赋值,其余元素未赋值(编译器自动为未赋值元素指定初值0。教材p137还列举了一些部分元素赋初值的例子,请自行阅读。,4、如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。例:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;与下面定义等价:static int a
13、 4=1,2,3,4,5,6,7,8,9,10,11,12;,7.2.2 二维数组元素的引用 用数组名和下标引用元素。例:float a23;有6个元素,按如下方式引用各元素:a00、a01、a02、a10、a11、a12(下标从0始)注意:数组float a23中无元素a23。,7、2、3 二维数组应用举例 二维数组的遍历访问(扫描),一般都采用双重循环处理(行循环,列循环)。例7.4 将一个二维数组行和列交换,存到另一个二维数组中。例如:,算法:bji=aij程序:main()static int a23=1,2,3,4,5,6;static int b32,i,j;printf(arra
14、y a:n);for(i=0;i=1;i+)/*01行*/for(j=0;j=2;j+)/*02列*/printf(%5d,aij);bji=aij;/*行、列交换*/,printf(n);/*输出一行后换行*/printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);/*输出一行后换行*/,运行结果如下:array a:1 2 3 4 5 6array b:1 4 2 5 3 6,例7.5 有一个34的矩阵,要求编程序以求出其中值最大的那个元素的值及其所在的行号和列号。算法:首先把第一个元素a00作为临
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华 谭浩强 语言 课件 数组

链接地址:https://www.31ppt.com/p-5996715.html