清华谭浩强C语言课件第7章数组.ppt





《清华谭浩强C语言课件第7章数组.ppt》由会员分享,可在线阅读,更多相关《清华谭浩强C语言课件第7章数组.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、高级语言程序设计张远程序程序=算法算法+数据结构数据结构+结构化程序结构化程序设计方法设计方法+语言工具和环境语言工具和环境第7章 数组v前面各章所使用的数据都属于前面各章所使用的数据都属于基本数据基本数据类型类型(整型、实型、字符型),(整型、实型、字符型),C C语言除语言除了提供基本数据类型外,还提供了了提供基本数据类型外,还提供了构造构造类型类型的数据,它们是的数据,它们是数组类型、结构体数组类型、结构体类型、共同体类型等类型、共同体类型等。构造数据类型是。构造数据类型是由基本数据类型的数据按照一定的规则由基本数据类型的数据按照一定的规则组成,所以也称为组成,所以也称为“导出类型导出类
2、型”。v下面简单介绍一下数组概念:下面简单介绍一下数组概念:1、数组:一组具有、数组:一组具有相同数据类型相同数据类型的的数据数据的的有序的集合。有序的集合。2、数数组组元元素素:构构成成数数组组的的数数据据。数数组组中中的的每每一一个个数数组组元元素素具具有有相相同同的的名名称称,不不同同的的下下标标,可可以以作作为为单单个个变变量量使使用用,所所以以也称为也称为下标变量下标变量。3、数数组组的的下下标标:是是数数组组元元素素的的位位置置的的一一个个索引或指示索引或指示。4、数数组组的的维维数数:数数组组元元素素下下标标的的个个数数。根根据据数数组组的的维维数数可可以以将将数数组组分分为为一
3、一维维、二二维、三维、多维数组。维、三维、多维数组。v7.1一维数组一维数组v数数组是是一一组有有序序数数据据的的集集合合,数数组中中每每一一个个元元素素的的类型型相相同同。用用数数组名名和和下下标来来唯唯一一确确定定数数组中的元素。中的元素。7.1.1一维数组的定义(一维数组的定义(先定义后使用先定义后使用)定义方式:定义方式:类型说明符类型说明符数组名数组名整型常量表达式整型常量表达式例例:inta10第7章 数组int a10 int a10 表示如下信息:表示如下信息:v定义一个数组,数组名定义一个数组,数组名a a,有有1010个元素,每个元素个元素,每个元素的类型均为的类型均为in
4、tint。v这这1010个元素分别是:个元素分别是:a0a0、a1a1、a2a2、a3a3、a4a4、.、a8a8、a9a9。v各各个个数数组组元元素素是是排排成成一一行行的的一一组组下下标标变变量量,用用一一个个统统一一的的数数组组名名来来标标识识,用用一一个个下下标标来来指指示示其其在在数数组组中中的的位位置置。一一维维数数组组通通常常和和一一重重循循环环相相配配合合,对对数数组元素进行处理。组元素进行处理。v注意:注意:v1)下下标标从从0开开始始。如如:数数组组a的的第第1个个元元素素是是a0,数组的第,数组的第8个元素是个元素是a7第7章 数组v注意:注意:2 2)C C语言不允许对
5、数组的大小做动态定义,语言不允许对数组的大小做动态定义,如:如:vintn;vscanf(%d,&n);vintan;v因因为在在编译时,C编译器根据已知数器根据已知数组大大小分配内存。小分配内存。v说明:说明:1)数数组组名名:按按标标识识符符规规则则。本本例例a就就是是数数组名。组名。2)整整型型常常量量表表达达式式:表表示示数数组组元元素素个个数数(数数组组的的长长度度)。可可以以是是整整型型常常量量或或符符号号常常量量,不不允允许许用用变变量量。整整型型常常量量表表达达式式在在说说明明数数组组元元素素个个数数的的同同时时也也确确定定了了数数组组元元素素下下标标的的范范围围,下下标标从从
6、0开开始始整整型型常常量量表表达达式式-1(注注意意不不是是1整整型型常常量量表达式)。表达式)。vC语语言言不不检检查查数数组组下下标标越越界界,但但是是使使用用时时,一一般般不不能能越越界界使使用用,否否则则结结果果难难以以预预料料(覆覆盖盖程程序序区区-程程序序飞飞出出,覆覆盖盖数数据据区区-数数据据覆覆盖盖破破坏坏,操操作作系系统统被被破破坏坏,系系统统崩崩溃溃)。本本例例数组元素个数是数组元素个数是10个,下标从个,下标从0-9。3)C编译程序为数组分配了一片编译程序为数组分配了一片连续连续的的空间。空间。4)类类型型说说明明:指指的的是是数数据据元元素素的的类类型型,可可以以是是基
7、基本本数数据据类类型型,也也可可以以是是构构造造数数据据类类型型。类类型型说明确定了每个数据占用的内存字节数。说明确定了每个数据占用的内存字节数。一维数组:一维数组:floatfloat markmark100;100;mark0mark1mark2mark3.mark9986.592.077.552.0.94.0低地址低地址 高地址高地址每个数据元素占用的每个数据元素占用的字节数,就是字节数,就是基类型基类型的字节数的字节数一个元素占一个元素占4个个字节字节第7章 数组7 7.1.1.2 2 一维数组的初始化一维数组的初始化v初始化:在定义时初始化:在定义时指定初始值指定初始值,编译器把初值
8、,编译器把初值赋给数组变量。赋值:使用赋值语句,在程序赋给数组变量。赋值:使用赋值语句,在程序运行时把值赋给数组变量,如运行时把值赋给数组变量,如a0=2a0=2。v初始化格式:初始化格式:v数据类型数据类型 数组名数组名 常量表达式常量表达式 初值表初值表 1 1、一般初始化,例一般初始化,例:vstatic int a10=0,1,2,3,4,5,6,7,8,9static int a10=0,1,2,3,4,5,6,7,8,9vint array10=1,2,3,4,5,6,7,8,9,10int array10=1,2,3,4,5,6,7,8,9,10;2 2、部分元素初始化,部分元素
9、初始化,其余元素均为零其余元素均为零。例例:static int a10=0,1,2,3,4:static int a10=0,1,2,3,4;仅前仅前5 5个元素赋初值,后个元素赋初值,后5 5个元素自动赋为个元素自动赋为0 0。3 3、全部元素均初始化为、全部元素均初始化为0 0,不允许不允许简写。简写。static int a10=static int a10=0,0,0,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0,0,0;不能写成不能写成:inta10=0*10;第7章 数组v不能简写为:不能简写为:vstatic int a10=0*10;static int a10
10、=0*10;v注意注意:当程序不给数组指定初始值时,编:当程序不给数组指定初始值时,编译器作如下处理:译器作如下处理:v(1 1)编译器自动把静态数组的各元素初)编译器自动把静态数组的各元素初始化为始化为0 0。v(2 2)编译器不为动态数组自动指定初始)编译器不为动态数组自动指定初始值。值。v4 4、如果全部元素均指定初值,定义中、如果全部元素均指定初值,定义中可以省可以省略元素的个数略元素的个数,例,例:vstatic int a5=1,2,3,4,5;static int a5=1,2,3,4,5;v可以写为:可以写为:vstatic int a =1,2,3,4,5;static in
11、t a =1,2,3,4,5;7 7.1.3.1.3 数数组组元素的引用元素的引用vC C语言规定,语言规定,不能引用不能引用整个数组,只能整个数组,只能逐逐个引用元素个引用元素,元素引用方式:,元素引用方式:v 数组名数组名 下标表达式下标表达式 例例:a0=a5+a7-a2*3 “下下标标表表达达式式”可可以以是是任任何何非非负负整整型型数数据据,取值范围是取值范围是0 0 (元素个数(元素个数-1-1)。)。v特特别别强强调调:在在运运行行C C语语言言程程序序过过程程中中,系系统统并并不不自自动动检检验验数数组组元元素素的的下下标标是是否否越越界界。因因此此在在编编写写程程序序时时,保
12、保证证数数组组下下标标不不越越界界是是十十分分重重要要的。的。v1 1个个数数组组元元素素,实实质质上上就就是是1 1个个变变量量,它它具具有有和和相相同同类类型型单单个个变变量量一一样样的的属属性性,可可以以对对它它进进行行赋值和参与各种运算。赋值和参与各种运算。v在在C C语语言言中中,数数组组作作为为1 1个个整整体体,不不能能参参加加数数据据运算,只能对运算,只能对单个的元素单个的元素进行处理。进行处理。例例6.1 6.1 使数组元素使数组元素a0a0a9a9的值为的值为0 09 9,然后逆序输出。,然后逆序输出。vmain()main()v vint i,a10;int i,a10;
13、vfor(i=0;i=9;i+)for(i=0;i=0;i-)for(i=9;i=0;i-)vprintf(%d,ai);printf(%d,ai);v v运行输出:运行输出:9 8 7 6 5 4 3 2 1 09 8 7 6 5 4 3 2 1 07 7.1.4.1.4 一维数组的应用一维数组的应用例例7.3输输入入10个个数数,用用“冒冒泡泡法法”对对10个个数数排排序序(由由小小到到大)。大)。v冒冒泡泡法法的的基基本本思思想想:通通过过相相邻邻两两个个数数之之间间的的比比较较和和交交换换,使使排排序序码码(数数值值)较较小小的的数数逐逐渐渐从从底底部部移移向向顶顶部部,排排序序码码较
14、较大大的的数数逐逐渐渐从从顶顶部部移移向向底底部部。就就像像水水底底的的气气泡泡一一样样逐逐渐渐向上冒向上冒,故而得名。,故而得名。v“冒冒泡泡法法”算算法法:以以六六个个数数9、8、5、4、2、0为例。为例。v第第1趟比较(下图趟比较(下图1)第第2趟比较(下图趟比较(下图2)v第第1 1趟比较后,剩趟比较后,剩5 5个数未排好序;两两比个数未排好序;两两比较较5 5次次v第第2 2趟比较后,剩趟比较后,剩4 4个数未排好序;两两比个数未排好序;两两比较较4 4次次v第第3 3趟比较后,剩趟比较后,剩3 3个数未排好序;两两比个数未排好序;两两比较较3 3次次v第第4 4趟比较后,剩趟比较后
15、,剩2 2个数未排好序;两两比个数未排好序;两两比较较2 2次次v第第5 5趟比较后,全部排好序;两两比较趟比较后,全部排好序;两两比较1 1次次v算法结论算法结论:对于:对于n n个数的排序,需进行个数的排序,需进行n-n-1 1趟比较,第趟比较,第j j趟比较需进行趟比较需进行n-jn-j次两两比次两两比较。较。v程序流程图:(用两层嵌套循环实现)程序流程图:(用两层嵌套循环实现)v程序:设需排序的数有程序:设需排序的数有1010个,定义数组大小为个,定义数组大小为1111,使用,使用a1a1a10a10存放存放1010个数,个数,a0a0不用。不用。vmain()vvinta11;/*用
16、用a1a10,a0不用不用*/vinti,j,t;/*i,j作循环变量,作循环变量,t作临变作临变*/vprintf(input10numbers:n);vfor(i=1;i11;i+)vscanf(%d,&ai);/*输入输入10个整数个整数*/vprintf(n);vfor(j=1;j=9;j+)/*第第j趟比较趟比较*/vfor(i=1;i ai+1)/*if(ai ai+1)/*交换大小交换大小*/*/v t=ai;t=ai;v ai=ai+1;ai=ai+1;v ai+1=t;ai+1=t;v v printf(the sorted numbers:n);printf(the sor
17、ted numbers:n);v for(i=1;i11;i+)for(i=1;i11;i+)vprintf(%d,ai);printf(%d,ai);v 程序运行结果如下:程序运行结果如下:input 10 numbers:input 10 numbers:1 0 4 8 12 65-76 100-45 1231 0 4 8 12 65-76 100-45 123the sorted numbers:the sorted numbers:-76-45 0 1 4 8 12 65 100 123-76-45 0 1 4 8 12 65 100 1237 7.2 .2 二二维维数数组组 v二二维
18、维数数组组:数数组组元元素素是是双双下下标标变变量量的的数数组。组。v二二维维数数组组的的数数组组元元素素可可以以看看作作是是排排列列为为行行列列的的形形式式(矩矩阵阵)。二二维维数数组组也也用用统统一一的的数数组组名名来来标标识识,第第一一个个下下标标表表示示行行,第二个下标表示列。下标第二个下标表示列。下标从从0 0开始。开始。7 7、2 2、1 1 二维数组的定义二维数组的定义 v类类型型说说明明符符 数数组组名名11行行常常量量表表达达式式11列列常常量量表表达达式式1,1,数组名数组名22行常量表达式行常量表达式22列常量表达式列常量表达式2;2;例例:int a34;a:int a
19、34;a为为34(334(3行行4 4列列)的数组的数组 float b510;b float b510;b为为510(5510(5行行1010列列)的数组的数组v二维数组的理解:二维数组的理解:v二维数组二维数组a34理解为:理解为:有三个元素有三个元素a0、a1、a2,每一个元素是每一个元素是一个包含一个包含4个元素的数组。个元素的数组。v二维数组的元素在内存中的存放顺序:二维数组的元素在内存中的存放顺序:v按行存放,即:先顺序存放按行存放,即:先顺序存放第一行第一行的元素,再的元素,再存放第二行的元素。(存放第二行的元素。(最右边最右边的下标变化最快,的下标变化最快,第一维的下标变化第一
20、维的下标变化最慢)。最慢)。地址地址地址地址值值值值数组元素数组元素数组元素数组元素b b0000b b0101b b0202b b1010b b1111b b1212b b2020b b2121b b22223003000 0H H3003002 2H H3003004 4H H3003006 6H H3003008 8H H300300A AH H300300C CH H300300E EH H30301010H H例如:例如:整型数组整型数组b33=1,2,3,4,5,6,7,8,9;123456789v再一次说明:再一次说明:1)二二维维数数组组中中的的每每个个数数组组元元素素都都有有
21、两两个个下下标标,且且必必须须分分别别放放在在单单独独的的“”内内。如如:a3,42)二二维维数数组组定定义义中中的的第第1个个下下标标表表示示该该数数组组具具有有的的行行数数,第第2个个下下标标表表示示该该数数组组具具有有的的列列数数,两两个个下下标标之之积积是是该该数数组组具具有有的的数数组元素的组元素的个数个数。(3)二二维维数数组组中中的的每每个个数数组组元元素素的的数数据据类类型型均均相相同同。二二维维数数组组的的存存放放规规律律是是“按按行排列行排列”。(4)二二维维数数组组可可以以看看作作是是数数组组元元素素为为一一维维数组数组的数组。的数组。7 7.2.2.2 2 二维数组的初
22、始化二维数组的初始化1、分行赋值分行赋值,如:如:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;2、全部数据全部数据写在一个大括号内,如写在一个大括号内,如:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;3、部分元素赋值,如部分元素赋值,如:staticinta34=1,5,9;仅仅对对a00、a10、a20赋赋值值,其其余余元元素素未未赋赋值值(编编译译器器自自动动为为未未赋赋值值元元素指定素指定初值初值0。v教教材材p137还还列列举举了了一一些些部部分分元元素素赋赋初初值值的例子,请自行阅读。的例子,请自行阅读。4、如如
23、果果对对全全部部元元素素赋赋初初值值,则则第第一一维维的的长长度度可可以不指定以不指定,但必须指定,但必须指定第二维第二维的长度。的长度。例例:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;与下面定义等价:与下面定义等价:staticinta4=1,2,3,4,5,6,7,8,9,10,11,12;7 7.2.2.2 2 二维数组元素的引用二维数组元素的引用v用用数组名和下标数组名和下标引用元素。例引用元素。例:floata23;有有6个元素,按如下方式引个元素,按如下方式引用各元素:用各元素:a00、a01、a02、a10、a11、a12(下标从下标从0始)
24、始)v注意注意:数组:数组floata23中无元素中无元素a23。7 7、2 2、3 3 二维数组应用举例二维数组应用举例v二维数组的遍历访问(扫描),一般都二维数组的遍历访问(扫描),一般都采用采用双重循环处理双重循环处理(行循环,列循环)。(行循环,列循环)。例例7.4将一个二维数组行和列交换,存到将一个二维数组行和列交换,存到另一个二维数组中。例如另一个二维数组中。例如:v算法算法:bji=aijbji=aijv程序:程序:vmain()vvstaticinta23=1,2,3,4,5,6;vstaticintb32,i,j;vprintf(arraya:n);vfor(i=0;i=1;
25、i+)/*01行行*/vvfor(j=0;j=2;j+)/*02列列*/vvprintf(%5d,aij);vbji=aij;/*行、列交换行、列交换*/vv vprintf(n);/*printf(n);/*输出一行后换行输出一行后换行*/*/vvprintf(array b:n);printf(array b:n);vfor(i=0;i=2;i+)for(i=0;i=2;i+)vvfor(j=0;j=1;j+)for(j=0;jmax,把把aij作为作为新的临时新的临时最大最大值,并值,并记录记录下其下标下其下标i和和j。当全部元素比当全部元素比较完后,较完后,max是整个矩阵全部元素的最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华 谭浩强 语言 课件 数组

限制150内