《c语言教学资料》4数组.ppt
《《c语言教学资料》4数组.ppt》由会员分享,可在线阅读,更多相关《《c语言教学资料》4数组.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 数数组和字符串和字符串2第第4 4章章 数组数组4.1 一维数组一维数组 4.2 二维数组二维数组 4.3 字符数组字符数组 4.4 数组元素的查找和排序数组元素的查找和排序 本章内容本章内容3第第4 4章章 数组数组v前面所讲的分散的变量对处理大量的有组织的数前面所讲的分散的变量对处理大量的有组织的数据(如:多个学生多门课的成绩处理)就显得无据(如:多个学生多门课的成绩处理)就显得无能为力,需要一种有组织的变量的集合来处理这能为力,需要一种有组织的变量的集合来处理这类问题。类问题。v这个集合需要用一个统一的名称来命名,而集合这个集合需要用一个统一的名称来命名,而集合中的每一个元素
2、需要用序号来唯一地确定。并且中的每一个元素需要用序号来唯一地确定。并且集合中的每一个元素都属于同一种数据类型。集合中的每一个元素都属于同一种数据类型。v这种变量的集合就是数组。这种变量的集合就是数组。v数组类型是构造类型数据的一种。构造类型数据数组类型是构造类型数据的一种。构造类型数据是由一些基本类型数据按照一定的规则组成。是由一些基本类型数据按照一定的规则组成。4第第4 4章章 数组数组v数组的基本概念:数组的基本概念:v所谓所谓数组数组,是若干个相同类型数据元素的有序集,是若干个相同类型数据元素的有序集合。所起的名字称为合。所起的名字称为数组名。数组名。例如:例如:int jsj30;in
3、t jsj30;v用对应的序号来区分这个集合中的一个个元素。用对应的序号来区分这个集合中的一个个元素。序号称为数组元素的序号称为数组元素的下标。下标。例如:例如:sjs0,jsj1,jsj2jsj29sjs0,jsj1,jsj2jsj29v用一个下标来区分其元素的数组,称为用一个下标来区分其元素的数组,称为一维数组一维数组;用两个或多个下标来区分其元素的数组,称为用两个或多个下标来区分其元素的数组,称为二二维数组维数组(例如:(例如:a23a23)或)或多维数组多维数组(例如:(例如:a233a233)。)。5 4.1 4.1 一维数组一维数组本节内容本节内容 4.1.2 一维数组的初始化一维
4、数组的初始化 4.1.3 一维数组元素的引用一维数组元素的引用 4.1.4 一维数组的应用举例一维数组的应用举例 4.1.1 一维数组的定义一维数组的定义64.1 4.1 一维数组一维数组v只有一个下标的数组叫做只有一个下标的数组叫做一维数组一维数组。例如:例如:sum3sum3v数组是一组变量,这组变量具有相同的名字,相数组是一组变量,这组变量具有相同的名字,相同的数据类型,并且在存储器中连续存放。同的数据类型,并且在存储器中连续存放。例如:数组例如:数组sum3sum3中包含中包含sum0sum0、sum1sum1、sum2sum2。v每一个变量称为数组的一个每一个变量称为数组的一个“数组
5、单元数组单元”。v保存在其中的数据值称为保存在其中的数据值称为“数组元素数组元素”。v用用“下标变量下标变量”来标识来标识区分数组中的各数组元区分数组中的各数组元素。素。74.1.1 4.1.1 一维数组的定义一维数组的定义v一维数组的定义方式为:一维数组的定义方式为:类型说明符类型说明符 数组名数组名 常量表达式常量表达式;v例如:例如:int a6int a6;v如图,编译时分配连续内存单元。如图,编译时分配连续内存单元。a00145a1a2a3a4a523a84.1.1 4.1.1 一维数组的定义一维数组的定义v注意事项:注意事项:int a10;int a10;数组名的命名遵循标识符命
6、名规则。数组名的命名遵循标识符命名规则。类型说明符说明该数组中数组元素的数据类型。类型说明符说明该数组中数组元素的数据类型。数组名后是用方括号括起来的常量表达式。数组名后是用方括号括起来的常量表达式。方括号中的常量表达式表示数组中元素的个数。方括号中的常量表达式表示数组中元素的个数。C C语言规定数组元素的下标从语言规定数组元素的下标从0 0开始,因此在数组开始,因此在数组a a中中的的1010个元素,分别为个元素,分别为a0a0a9a9,不存在,不存在a10a10 。定义数组时定义数组时,方括号中的常量表达式可以是常量或者,方括号中的常量表达式可以是常量或者符号常量,但不能包含变量。符号常量
7、,但不能包含变量。例如:例如:int ax;int ax;是不可是不可以的。以的。94.1.2 4.1.2 一维数组的初始化一维数组的初始化v数组的初始化数组的初始化即为数组元素赋初始值即为数组元素赋初始值 v先定义数组,然后用赋值语句为数组元素赋初值。先定义数组,然后用赋值语句为数组元素赋初值。int a10int a10;a0=0a0=0;a1=1a1=1;a2=2a2=2;v在定义数组时对数组全部元素赋初值。在定义数组时对数组全部元素赋初值。例如:例如:int a10=0int a10=0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,99;v在定义数组时对数组中一部分
8、元素赋值。在定义数组时对数组中一部分元素赋值。例如:例如:int a10=0 int a10=0,1 1,2 2,3 3,44;(未赋值元素为;(未赋值元素为0 0)v在定义数组时给数组全部元素赋值为在定义数组时给数组全部元素赋值为0 0。int a10=0int a10=0;v为全部数组元素赋初值时,可不指定数组长度。为全部数组元素赋初值时,可不指定数组长度。int a=0int a=0,1 1,2 2,3 3,44;104.1.3 4.1.3 一维数组元素的引用一维数组元素的引用v数组元素引用的一般形式为:数组元素引用的一般形式为:v数组名数组名 下标下标 v引用数组元素的几点说明:引用数
9、组元素的几点说明:下标可以是整型常量或整型表达式(可以是变量)。下标可以是整型常量或整型表达式(可以是变量)。a0=ax+a2*a3-a5-2 a0=ax+a2*a3-a5-2 (x x为整型且有值)为整型且有值)C C语言中数组元素的下标从语言中数组元素的下标从0 0开始,并且数组元素的下开始,并且数组元素的下标一定要小于数组的长度。标一定要小于数组的长度。只能逐个引用数组元素,而不能一次引用整个数组。只能逐个引用数组元素,而不能一次引用整个数组。只能:只能:printf(“%d”,a0);printf(“%d”,a0);不能:不能:printf(“%d”,a);printf(“%d”,a)
10、;v C C语言规定:语言规定:数组名是分配给该数组的存储区的首数组名是分配给该数组的存储区的首地址,即数组第一个元素存放的地址地址,即数组第一个元素存放的地址。114.1.3 4.1.3 一维数组元素的引用一维数组元素的引用inta10;inti,max,min;printf(Pleaseinput:);for(i=0;i10;i+)scanf(%d,&ai);max=a0;min=a0;for(i=1;imax)max=ai;elseif(aimin)min=ai;printf(max=%d;min=%d,max,min);【例例4-1】从键盘从键盘输入输入10个同学的计个同学的计算机基础
11、课成绩算机基础课成绩(整型);输出最(整型);输出最高成绩和最低成绩。高成绩和最低成绩。12【例例4-2】一个歌唱比赛,共有一个歌唱比赛,共有10名评委,他们分别给一位名评委,他们分别给一位歌手打分。分数采用百分制。选手最后的得分是用这样的歌手打分。分数采用百分制。选手最后的得分是用这样的方法计算出来的:从方法计算出来的:从10名评委的评分中扣除一个最高分,名评委的评分中扣除一个最高分,扣除一个最低分,然后统计其总分,并除以扣除一个最低分,然后统计其总分,并除以8,最后得到这,最后得到这个歌手的最后得分。个歌手的最后得分。4.1.4 4.1.4 一维数组的应用举例一维数组的应用举例#inclu
12、demain()intscore10;/10个评委的评分floatmark;/记录最后得分inti;intmax=-1;/最高分intmin=101/最低分intsum=0;/10个评委评分的总和for(i=0;i10;i+)/输入10个分数printf(PleaseEntertheScoreofNo.%d:,i+1);scanf(%d,&scorei);sum=sum+scorei;134.1.4 4.1.4 一维数组的应用举例一维数组的应用举例for(i=0;imax)max=scorei;for(i=0;i10;i+)/遍历数组,找最低分if(scoreimin)min=scorei;m
13、ark=(sum-max-min)/8.0;/求平均printf(Themarkofthissingeris%4.2fn,mark);144.1.4 4.1.4 一维数组的应用举例一维数组的应用举例154.1.4 4.1.4 一维数组的应用举例一维数组的应用举例v【例【例4-34-3】利用数组计算】利用数组计算FibonacciFibonacci数列的前数列的前1010个个数数,并按每行打印并按每行打印5 5个数的格式输出。个数的格式输出。v其中:其中:FibonacciFibonacci数列计算公式如下:数列计算公式如下:F1=1 F1=1,F2=1F2=1,F3=F1+F2F3=F1+F2
14、,Fn=Fn-2+Fn-1Fn=Fn-2+Fn-1。#includevoidmain()inti;intf10=1,1;/用数组存储Fibonacci数列,并赋初值/f0=1,f1=1,f2=f3=f9=0for(i=2;i10;i+)/为f2f9按计算公式重新赋值fi=fi-2+fi-1;164.1.4 4.1.4 一维数组的应用举例一维数组的应用举例for(i=0;i10;i+)/输出10个Fibonacci数printf(%dt,fi);if(i+1)%5=0)/i+1为当前输出的Fibonacci数的序号printf(n);/每输出五个数换行17 4.2 4.2 二维数组二维数组本节内
15、容本节内容 4.2.2 二维数组的初始化二维数组的初始化 4.2.3 二维数组元素的引用二维数组元素的引用 4.2.4 二维数组的应用举例二维数组的应用举例 4.2.1 二维数组的定义二维数组的定义184.2.1 4.2.1 二维数组的定义二维数组的定义v二维数组定义的一般形式为:二维数组定义的一般形式为:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22;v例如,例如,“int a23;int a23;”v(注意,不能写成(注意,不能写成“int int a2,3a2,3;”;”)v定义了数组定义了数组a a。数组。数组a a为为2 2行行3 3列的整型数组
16、,即数组元列的整型数组,即数组元素为素为:a00,a01,a02a00,a01,a02a10,a11,a12a10,a11,a12194.2.1 4.2.1 二维数组的定义二维数组的定义v二维数组可以看作是由一维数组嵌套构成的。二维数组可以看作是由一维数组嵌套构成的。v我们可以把二维数组看作是一种特殊的一维数我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。组:它的元素又是一个一维数组。v例如,可以把数组例如,可以把数组a a看作一个一维数组,它有两看作一个一维数组,它有两个元素:个元素:a0a0、a1a1,每一个元素又是一个包,每一个元素又是一个包含含3 3个元素的一维数
17、组。个元素的一维数组。a0a0 a00a00a01a01a02a02a1a1 a10a10a11a11a12a12204.2.2 4.2.2 二维数组的初始化二维数组的初始化v按行分段整体初始化。按行分段整体初始化。int a34=1,4,6,6,4,6,7,1,8,4,1,0;int a34=1,4,6,6,4,6,7,1,8,4,1,0;v按行连续整体初始化。按行连续整体初始化。int a34=1,4,6,6,4,6,7,1,8,4,1,0;int a34=1,4,6,6,4,6,7,1,8,4,1,0;v按行分段部分初始化。按行分段部分初始化。int a34=5,7,1,8,5,2,5,
18、6;int a34=5,7,1,8,5,2,5,6;v按行连续部分初始化。按行连续部分初始化。int a34=2,5,8,6,2,4,7,2,1;int a34=2,5,8,6,2,4,7,2,1;v如果提供全部的初始值,在定义时可不指明第如果提供全部的初始值,在定义时可不指明第一维的长度。一维的长度。int4=4,5,0,1,3,5,7,6,1,0,2,3;int4=4,5,0,1,3,5,7,6,1,0,2,3;214.2.3 4.2.3 二维数组元素的引用二维数组元素的引用v二维数组元素的表示形式为:二维数组元素的表示形式为:数组名数组名 下标下标11下标下标22v下标可以是整型常量或整
19、型表达式。下标可以是整型常量或整型表达式。v定义时,定义时,a34a34中的中的3 3和和4 4各维的大小各维的大小。v引用时,引用时,a23a23中的中的2 2和和3 3是下标值是下标值。v如果定义数组:如果定义数组:int a34int a34;那么引用;那么引用a34a34是错误的,因为数组的下标是从是错误的,因为数组的下标是从0 0开始,数组开始,数组a a的的下标下标1 1的范围是的范围是0 02 2,下标,下标2 2的范围是的范围是0 03 3。数组数组中不存在中不存在a34a34这个元素!这个元素!224.2.3 4.2.3 二维数组元素的引用二维数组元素的引用v【例【例4-54
20、-5】输入一个】输入一个3333的矩阵,求该矩阵的转置的矩阵,求该矩阵的转置矩阵(行列互换),并输出这两个矩阵。例如矩矩阵(行列互换),并输出这两个矩阵。例如矩阵阵A A的转置矩阵为矩阵的转置矩阵为矩阵B B:234.2.4 4.2.4 二维数组的应用举例二维数组的应用举例#include#defineN3main()inti,j,n;intaNN,bNN;printf(pleaseinput:n);for(i=0;i=N-1;i+)/循环输入for(j=0;j=N-1;j+)printf(a%d%d:,i,j);scanf(%d,&aij);for(i=0;i=N-1;i+)/a行列互换得到
21、转置矩阵存入bfor(j=0;j=N-1;j+)bij=aji;244.2.4 4.2.4 二维数组的应用举例二维数组的应用举例for(i=0;i=N-1;i+)/输出两个矩阵for(j=0;j=N-1;j+)/输出数组a的第i+1行printf(%2d,aij);printf(t);/矩阵的间隔for(j=0;j=N-1;j+)/出数组b的第i+1行printf(%2d,bij);printf(n);254.2.4 4.2.4 二维数组的应用举例二维数组的应用举例26 4.3 4.3 字符数组字符数组本节内容本节内容 4.3.2 字符串与字符数组字符串与字符数组 4.3.3 字符数组的初始化
22、字符数组的初始化 4.3.4 字符数组的引用字符数组的引用 4.3.1 字符数组的定义字符数组的定义27 4.3 4.3 字符数组字符数组本节内容本节内容 4.3.6 常用字符串处理函数常用字符串处理函数 4.3.7 综合应用举例综合应用举例 4.3.5 字符数组的应用举例字符数组的应用举例284.3.1 4.3.1 字符数组的定义字符数组的定义v用来存放字符数据的数组是用来存放字符数据的数组是字符数组字符数组,字符数组,字符数组中的一个数组元素存放一个字符。中的一个数组元素存放一个字符。v字符数组的定义一般形式如下:字符数组的定义一般形式如下:char char 数组名数组名 常量表达式常量
23、表达式 v例如例如“char c10;”char c10;”定义了一个一维字符数组定义了一个一维字符数组c c,它的长度为,它的长度为1010,可以存放,可以存放1010个字符或一个长度个字符或一个长度不大于不大于9 9的字符串。的字符串。v又如又如“char c35;”char c35;”定义了一个二维字符数组定义了一个二维字符数组c c,它可以存放,它可以存放1515个字符或个字符或3 3个长度不大于个长度不大于4 4的字符的字符串。串。294.3.2 4.3.2 字符串与字符数组字符串与字符数组vC C语言中有字符串常量,却没有字符串变量,通语言中有字符串常量,却没有字符串变量,通常用字
24、符数组来存放字符串。常用字符数组来存放字符串。v字符串是以字符串是以00作为结束符的字符序列作为结束符的字符序列。v当一个字符串存入字符数组时,当一个字符串存入字符数组时,C C编译系统会自编译系统会自动将结束符动将结束符00存入数组,以此作为该字符串存入数组,以此作为该字符串结束的标志,这要比用字符逐个的给字符数组赋结束的标志,这要比用字符逐个的给字符数组赋值多占一个字节来存放字符串结束标志值多占一个字节来存放字符串结束标志00。如:如:char c8=Li Chen;char c8=Li Chen;L Li i C Ch he en n00304.3.2 4.3.2 字符串与字符数组字符串
25、与字符数组v采用采用00标志作为字符串的结束标志后,在用标志作为字符串的结束标志后,在用字符串赋初值时无需指定数组的长度,可以由编字符串赋初值时无需指定数组的长度,可以由编译系统自动处理。译系统自动处理。如:如:char c=Li Chen;char c=Li Chen;在内存中占在内存中占8 8个字节,分别存储个字节,分别存储L,i,L,i,C,h,e,nC,h,e,n和和00。v字符串常量字符串常量“Li ChenLi Chen”,”,代表字符串所在内存的代表字符串所在内存的首地址,而不是字符串序列本身首地址,而不是字符串序列本身,所以只能在定义所以只能在定义数组时用字符串常量初始化,不能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言教学资料 语言 教学 资料 数组
限制150内