c语言教程(课件)第5章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一维数组程序举例
例L5-0-5:用数组来处理求Fibonacci数列: 程序如下; main() { int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0)printf(“\n”); printf(“%12d”,f[i]);} }
排序演示
对半法查找(例L5-3)
8 13 21 28 35 41 52 63 71 76 81 95 101 150 164
Top Top Mid Bot
Mid
Bot
Top Mid Bot
Top Mid Bot
二维数组的定义和引用
1 0 0 0 ? ?0 6 0 0 ? ? ? ?0 0 11 0? ? ?
这种方法对非0元素少时比较方便,不必将所有的0都写 出来,只需输入少量数据。 也可以只对某几行元素赋初值: static int a[3][4]={{1},{5,6}}; 数组元素为:
1 0 0 0 ? ?5 6 0 0 ? ? ? ?0 0 0 0 ? ? ?
二维数组元素的排列是按行进行的,即在内存中,先按顺序排列 第一行的元素,然后,再按顺序排列第二行的元素,以此类推。
如:上面定义的X数组的元素在内存中排列顺序为: X[0][0],X[0][1],X[1][0],X[1][1],X[2][0],X[2][1]; m×n 的二维数组a的元素a[i][j]在内存中的顺序号为i×m+j。
下面方法不对: 下面方法不对: int a(10); 3。常量表达式表示元素的个数,即数组长度。例如,a[10] 。常量表达式表示元素的个数,即数组长度。例如, 中10表示 数组有10个元素,下标从0开始,这10个元素是: 表示a数组有 个元素,下标从 开始, 个元素是: 表示 数组有 个元素 开始 个元素是 a[0],a[1]……a[9]。注意不能使用数组元素 。注意不能使用数组元素a[10]。 。 4。常量表达式中可以包括常量和符号常量,不能包含变量。 。常量表达式中可以包括常量和符号常量,不能包含变量。 也就是说, 不允许对数组的大小作动态定义 不允许对数组的大小作动态定义, 也就是说,C不允许对数组的大小作动态定义,即数组的大 小不依赖于程序运行过程中变量的值。例如, 小不依赖于程序运行过程中变量的值。例如,下面这样的定 义数组是不行的: 义数组是不行的: int n; scanf(“%d”,&n); int a[n]; ……
X[1][1]=X[0][0]*2; X[2][1]=X[0][0]/2+X[1][1]; 二维数组元素的地址也是通过“&”运算得到的。如X[1][1]元素的地 址可表示为&X[1][1]。 如时从键盘上为二维数组元素输入数据,一般需要使用双重循环, 同时可采用两种方式:一种是按行输入方式,既先输入第1行,然 后再输入第2行,以此类推;另一种方式是按列输入方式,既先输 入第1列,然后输入第2列。采用哪一种方式,完全取决于程序的需 要。 下面的语句是按行的方式从键盘上为X数组的每个元素输入数组: for(i=0;i<3;i++) for(j=0;j<2;j++) scanf(“%d”,&x[i][j]);
一维数组程序举例
例L5-1:输入10名学生的成绩,求平均分,并将低于平均分的成绩 打印出来。 例L5-2:用比较法对10个数排序(由小到大)—全在主函数中完成。 例L5-2-0:用比较法对10个数排序(由小到大)—用分函数中完成。 例L5-2-1:用起泡法对10个数排序(由大到小) —用分函数中完成。 例L5-2-2:用选择法对10个数排序(由大到小) —用分函数中完成。
它的作用是只对各行第1列的元素赋初值,其余元素值自动 赋为0。赋初值后数组各元素为:
1 0 0 0? ?5 0 0 0 ? ? ? ?9 0 0 0? ? ?
也可以对各行中的某一元素赋初值: int a[3][4]={{1},{0,6},{0,0,11}}; 初始化后的数组元素如下:
本文由youlangoo贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
第五章:数组
在此之前,所介绍的数据都是属于基本类型(整型、字符 型、实型),C语言还提供了构造类型的数据,它们有:数组 类型、结构体类型、共用体类型。构造类型是由基本类型数 据按一定规则组成的,因此有的书称它们为“导出类型”。 本讲介绍的数组,数组是有序数据的集合。数组中的每 一个元素都属于同一个数据类型。用一个统一的数据名和下 标来唯一地确定数组中的元素。 数组可以是一维的,也可以 是多维的,许多重要的应用都是基于数组的。学习本讲后, 要求理解数组下标,掌握初始化数组的方法,学会把数组用 作函数参数,学会二维数组的使用,并学习数组应用的技术。
一维数组的初始化
可以用赋值语句或输入语句使数组中的元素得到值,但占用运行时 间。可以使数组在程序运行之前初始化,即在编译之前得到初值。 对数组元素的初始化可以用以下方法实现: 1、在定义数组时对数组元素赋以初值。例如: 、在定义数组时对数组元素赋以初值。例如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括号内,请注意:在int的前面有 将数组元素的初值依次放在一对花括号内,请注意: 的前面有 一个关键字static,表明它是“静态存储”的数组。 一个关键字 ,表明它是“静态存储”的数组。 静态和外部存储( 数组默认的初值为0或空字符 静态和外部存储(extern)数组默认的初值为 或空字符。 数组默认的初值为 或空字符。 2、可以只给一部分元素赋值,例如: 、可以只给一部分元素赋值,例如: static int a[10]={0,1,2,3,4}; 定义a数组有 个元素,但花括号内只提供5个初值 数组有10个元素 个初值, 定义 数组有 个元素,但花括号内只提供 个初值,这表示只给前 个元素赋初值, 个元素值为0。 面5个元素赋初值,后面 个元素值为 。 个元素赋初值 后面5个元素值为
数组作为函数的参数
1、数组元素作为参数:与一般变量相同, 属于“值传递”。例L5属于“值传递”。例L5-0-3 2、数组名作为参数:属于地址传递方式, 即直接对地址操作,返回变化的结果。 形参中的一维数组,可以不指定元素的 个数,因为它只是告诉编译程序数组的 地址(起始地址)。例L5-0-4 地址(起始地址)。例L5-
例L5-0-1:把0—9这十个数字赋给一个一维数组,然后按逆序输 出。 main() { int i,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf(“%d,”,a[i]); }
思考题
把26个大写字母从‘A’——‘Z’赋给一维字符数组,然后按逆 序输出。例L5-0-2 L5main() { char i,a[26]; for(i=‘A’ ; i<=‘Z’ ;i++) a[i-65]=i; for(i=‘Z’;i>=‘A’;i--) printf(“%c,”,a[i-65]); }
3、如果想使一个数组中全部元素值为0,即可以写成 、如果想使一个数组中全部元素值为 , int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能写成: 不能写成: int a[10]={0*10}; 4、在对全部数组元素赋初值时,可以不指定数组长度。例 、在对全部数组元素赋初值时,可以不指定数组长度。 如: static int a[5]={1,2,3,4,5}; 可以写成 static int a[]={1,2,3,4,5}; 5、但若被定义的数组长度与提供的初值的个数不相同,则 、但若被定义的数组长度与提供的初值的个数不相同, 数组长度不能省略。 数组长度不能省略。 6、静态数组不赋初值时,各值为0或“空”;动态数组则为 、静态数组不赋初值时,各值为 或 随机值。 随机值。 也可以写成 int a[10]={0}; 即第一个元素为 ,其余没有指定默认为0。 即第一个元素为0,其余没有指定默认为 。
二维数组元素的引用
二维数组元素的表示形式如下: 数组名[下标表达式][下标表达式] 其中,下标表达式可以是整型常量、整型变量及其表达式。 如: int X[3][2]; 它共有6个元素,分别用X[0][0],X[0][1],X[1][0],X[1][1], X[2][0],X[2][1]来表示。 可用下面的语句把10赋给X数组中第0行、第1列的元素。 X[0][1]=10; 对基本数据类型的变量所能进行的各种运算,也都适合于同 类型的二维数组元素。如:
二维数组的初始化
可以利用下面方法对二维数组初始化: 分行给二维数组赋初值。如: static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以将所有数据写在一个花括弧内,按数组排列的顺序 对 各元素赋初值。如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 可以对部分元素赋初值。 static int a[3][4]={{1},{5},{9}};
一维数组素的引用
数组必须先定义,然后使用。C语言规定只能逐个引用数组元 素而不能一次引用整个数组。 数组元素的引用形式为: 数组名[下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3] 数组元素的使用一般与循环结构结合在一起。请看下例:
例题分析
一维数组的定义和引用
? ? ? 一维数组的定义 一维数组元素的引用 一维数组的初始化 一维数组程序举例
一维数组的定义
数组是一个由若干个同类型变量组成的集合。一维数组的说明 方法为数据类型加数组名,再加方括号,里面含有元素个数。 即: 类型说明符 数组名[常量表达式] 例如:下面的代码说明一个整数数组 int a[10]; 它表示数组名为a,此数组有10个元素。 说明: 说明: 1。数组名命名规则和变量名相同,遵循标识符命名规则。 。数组名命名规则和变量名相同,遵循标识符命名规则。 2。数组名后是用方括号括起来的常量表达式,不能用圆括号, 。数组名后是用方括号括起来的常量表达式,不能用圆括号,
? ? ? 二维数组的定义 二维数组的引用 二维数组的初始化 二维数组的程序举例
二维数组的定义
二维数组的定义方式如下: 类型说明符 数组名[常表达式][常量表达式]; 例如:int X[3][2]; 表示数组X是一个3*2二维数组,共有3行2列,共有6个元素,每个 元素都是int型。 二维数组的应用与矩阵有关,其中,从左起第一个下标表示行数, 第二个下标表示列数。与一维数组相似,二维数组的每个下标也是 从0开始的。 数组中的每个元素都具有相同的数据类型,且占有连续的存储空间, 一维数组的元素是按照下标递增的顺序连续存放的,
如果对全部元素都赋初值(即提供全部初始数据),则 定义数组时对第一维的长度可以不指定,但第二维的长度 不能省略。如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面的定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 系统会根据数据的总个数分配存储空间,一共12个数据, 每行4列。当然可确定为3行。 在定义时也可以只对部分元素赋初值而省略第一维的长度。 但应分行赋初值。如: static int a[ ][4]={{0,0,3},{},{0,10}};
例L5-0-5:用数组来处理求Fibonacci数列: 程序如下; main() { int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0)printf(“\n”); printf(“%12d”,f[i]);} }
排序演示
对半法查找(例L5-3)
8 13 21 28 35 41 52 63 71 76 81 95 101 150 164
Top Top Mid Bot
Mid
Bot
Top Mid Bot
Top Mid Bot
二维数组的定义和引用
1 0 0 0 ? ?0 6 0 0 ? ? ? ?0 0 11 0? ? ?
这种方法对非0元素少时比较方便,不必将所有的0都写 出来,只需输入少量数据。 也可以只对某几行元素赋初值: static int a[3][4]={{1},{5,6}}; 数组元素为:
1 0 0 0 ? ?5 6 0 0 ? ? ? ?0 0 0 0 ? ? ?
二维数组元素的排列是按行进行的,即在内存中,先按顺序排列 第一行的元素,然后,再按顺序排列第二行的元素,以此类推。
如:上面定义的X数组的元素在内存中排列顺序为: X[0][0],X[0][1],X[1][0],X[1][1],X[2][0],X[2][1]; m×n 的二维数组a的元素a[i][j]在内存中的顺序号为i×m+j。
下面方法不对: 下面方法不对: int a(10); 3。常量表达式表示元素的个数,即数组长度。例如,a[10] 。常量表达式表示元素的个数,即数组长度。例如, 中10表示 数组有10个元素,下标从0开始,这10个元素是: 表示a数组有 个元素,下标从 开始, 个元素是: 表示 数组有 个元素 开始 个元素是 a[0],a[1]……a[9]。注意不能使用数组元素 。注意不能使用数组元素a[10]。 。 4。常量表达式中可以包括常量和符号常量,不能包含变量。 。常量表达式中可以包括常量和符号常量,不能包含变量。 也就是说, 不允许对数组的大小作动态定义 不允许对数组的大小作动态定义, 也就是说,C不允许对数组的大小作动态定义,即数组的大 小不依赖于程序运行过程中变量的值。例如, 小不依赖于程序运行过程中变量的值。例如,下面这样的定 义数组是不行的: 义数组是不行的: int n; scanf(“%d”,&n); int a[n]; ……
X[1][1]=X[0][0]*2; X[2][1]=X[0][0]/2+X[1][1]; 二维数组元素的地址也是通过“&”运算得到的。如X[1][1]元素的地 址可表示为&X[1][1]。 如时从键盘上为二维数组元素输入数据,一般需要使用双重循环, 同时可采用两种方式:一种是按行输入方式,既先输入第1行,然 后再输入第2行,以此类推;另一种方式是按列输入方式,既先输 入第1列,然后输入第2列。采用哪一种方式,完全取决于程序的需 要。 下面的语句是按行的方式从键盘上为X数组的每个元素输入数组: for(i=0;i<3;i++) for(j=0;j<2;j++) scanf(“%d”,&x[i][j]);
一维数组程序举例
例L5-1:输入10名学生的成绩,求平均分,并将低于平均分的成绩 打印出来。 例L5-2:用比较法对10个数排序(由小到大)—全在主函数中完成。 例L5-2-0:用比较法对10个数排序(由小到大)—用分函数中完成。 例L5-2-1:用起泡法对10个数排序(由大到小) —用分函数中完成。 例L5-2-2:用选择法对10个数排序(由大到小) —用分函数中完成。
它的作用是只对各行第1列的元素赋初值,其余元素值自动 赋为0。赋初值后数组各元素为:
1 0 0 0? ?5 0 0 0 ? ? ? ?9 0 0 0? ? ?
也可以对各行中的某一元素赋初值: int a[3][4]={{1},{0,6},{0,0,11}}; 初始化后的数组元素如下:
本文由youlangoo贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
第五章:数组
在此之前,所介绍的数据都是属于基本类型(整型、字符 型、实型),C语言还提供了构造类型的数据,它们有:数组 类型、结构体类型、共用体类型。构造类型是由基本类型数 据按一定规则组成的,因此有的书称它们为“导出类型”。 本讲介绍的数组,数组是有序数据的集合。数组中的每 一个元素都属于同一个数据类型。用一个统一的数据名和下 标来唯一地确定数组中的元素。 数组可以是一维的,也可以 是多维的,许多重要的应用都是基于数组的。学习本讲后, 要求理解数组下标,掌握初始化数组的方法,学会把数组用 作函数参数,学会二维数组的使用,并学习数组应用的技术。
一维数组的初始化
可以用赋值语句或输入语句使数组中的元素得到值,但占用运行时 间。可以使数组在程序运行之前初始化,即在编译之前得到初值。 对数组元素的初始化可以用以下方法实现: 1、在定义数组时对数组元素赋以初值。例如: 、在定义数组时对数组元素赋以初值。例如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括号内,请注意:在int的前面有 将数组元素的初值依次放在一对花括号内,请注意: 的前面有 一个关键字static,表明它是“静态存储”的数组。 一个关键字 ,表明它是“静态存储”的数组。 静态和外部存储( 数组默认的初值为0或空字符 静态和外部存储(extern)数组默认的初值为 或空字符。 数组默认的初值为 或空字符。 2、可以只给一部分元素赋值,例如: 、可以只给一部分元素赋值,例如: static int a[10]={0,1,2,3,4}; 定义a数组有 个元素,但花括号内只提供5个初值 数组有10个元素 个初值, 定义 数组有 个元素,但花括号内只提供 个初值,这表示只给前 个元素赋初值, 个元素值为0。 面5个元素赋初值,后面 个元素值为 。 个元素赋初值 后面5个元素值为
数组作为函数的参数
1、数组元素作为参数:与一般变量相同, 属于“值传递”。例L5属于“值传递”。例L5-0-3 2、数组名作为参数:属于地址传递方式, 即直接对地址操作,返回变化的结果。 形参中的一维数组,可以不指定元素的 个数,因为它只是告诉编译程序数组的 地址(起始地址)。例L5-0-4 地址(起始地址)。例L5-
例L5-0-1:把0—9这十个数字赋给一个一维数组,然后按逆序输 出。 main() { int i,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf(“%d,”,a[i]); }
思考题
把26个大写字母从‘A’——‘Z’赋给一维字符数组,然后按逆 序输出。例L5-0-2 L5main() { char i,a[26]; for(i=‘A’ ; i<=‘Z’ ;i++) a[i-65]=i; for(i=‘Z’;i>=‘A’;i--) printf(“%c,”,a[i-65]); }
3、如果想使一个数组中全部元素值为0,即可以写成 、如果想使一个数组中全部元素值为 , int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能写成: 不能写成: int a[10]={0*10}; 4、在对全部数组元素赋初值时,可以不指定数组长度。例 、在对全部数组元素赋初值时,可以不指定数组长度。 如: static int a[5]={1,2,3,4,5}; 可以写成 static int a[]={1,2,3,4,5}; 5、但若被定义的数组长度与提供的初值的个数不相同,则 、但若被定义的数组长度与提供的初值的个数不相同, 数组长度不能省略。 数组长度不能省略。 6、静态数组不赋初值时,各值为0或“空”;动态数组则为 、静态数组不赋初值时,各值为 或 随机值。 随机值。 也可以写成 int a[10]={0}; 即第一个元素为 ,其余没有指定默认为0。 即第一个元素为0,其余没有指定默认为 。
二维数组元素的引用
二维数组元素的表示形式如下: 数组名[下标表达式][下标表达式] 其中,下标表达式可以是整型常量、整型变量及其表达式。 如: int X[3][2]; 它共有6个元素,分别用X[0][0],X[0][1],X[1][0],X[1][1], X[2][0],X[2][1]来表示。 可用下面的语句把10赋给X数组中第0行、第1列的元素。 X[0][1]=10; 对基本数据类型的变量所能进行的各种运算,也都适合于同 类型的二维数组元素。如:
二维数组的初始化
可以利用下面方法对二维数组初始化: 分行给二维数组赋初值。如: static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以将所有数据写在一个花括弧内,按数组排列的顺序 对 各元素赋初值。如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 可以对部分元素赋初值。 static int a[3][4]={{1},{5},{9}};
一维数组素的引用
数组必须先定义,然后使用。C语言规定只能逐个引用数组元 素而不能一次引用整个数组。 数组元素的引用形式为: 数组名[下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3] 数组元素的使用一般与循环结构结合在一起。请看下例:
例题分析
一维数组的定义和引用
? ? ? 一维数组的定义 一维数组元素的引用 一维数组的初始化 一维数组程序举例
一维数组的定义
数组是一个由若干个同类型变量组成的集合。一维数组的说明 方法为数据类型加数组名,再加方括号,里面含有元素个数。 即: 类型说明符 数组名[常量表达式] 例如:下面的代码说明一个整数数组 int a[10]; 它表示数组名为a,此数组有10个元素。 说明: 说明: 1。数组名命名规则和变量名相同,遵循标识符命名规则。 。数组名命名规则和变量名相同,遵循标识符命名规则。 2。数组名后是用方括号括起来的常量表达式,不能用圆括号, 。数组名后是用方括号括起来的常量表达式,不能用圆括号,
? ? ? 二维数组的定义 二维数组的引用 二维数组的初始化 二维数组的程序举例
二维数组的定义
二维数组的定义方式如下: 类型说明符 数组名[常表达式][常量表达式]; 例如:int X[3][2]; 表示数组X是一个3*2二维数组,共有3行2列,共有6个元素,每个 元素都是int型。 二维数组的应用与矩阵有关,其中,从左起第一个下标表示行数, 第二个下标表示列数。与一维数组相似,二维数组的每个下标也是 从0开始的。 数组中的每个元素都具有相同的数据类型,且占有连续的存储空间, 一维数组的元素是按照下标递增的顺序连续存放的,
如果对全部元素都赋初值(即提供全部初始数据),则 定义数组时对第一维的长度可以不指定,但第二维的长度 不能省略。如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面的定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 系统会根据数据的总个数分配存储空间,一共12个数据, 每行4列。当然可确定为3行。 在定义时也可以只对部分元素赋初值而省略第一维的长度。 但应分行赋初值。如: static int a[ ][4]={{0,0,3},{},{0,10}};