(6.1.5)--第6章C语言程序设计.ppt
《(6.1.5)--第6章C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《(6.1.5)--第6章C语言程序设计.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6 6 6 6利用数组处理批量数据第第第第章章章章为什么需要循环控制(1)数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。(2)用数组名和下标即可唯一地确定数组中的元素。(3)数组中的每一个元素都属于同一个数据类型。数组用50个float型简单变量表示学生的成绩烦琐,如果有1000名学生怎么办呢?没有反映出这些数据间的内在联系,实际上这些数据是同一个班级、同一门课程的成绩,它们具有相同的属性。要向计算机输入全班50个学生一门课程的成绩解决方法S15数组名下标s15定义一维数组类型型说明符明符 数数组名名常量表达式常量表达式(1)数组名的命名规则和变量名相
2、同,遵循标识符命名规则。(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。(3)常量表达式中可以包括常量和符号常量,不能包含变量。int a10;整型数组,即数组中的元素均为整型数组名为a数组包含10个整型元素a0a1a2a3a4a5a6a7a8a9相当于定义了10个简单的整型变量注意数组元素的下下标从从0开开始始,用“int a10;”定义数组,则最大下标值为9,不存在数组元素a10引用一维数组元素数数组名名下下标 只能引用数组元素而不能一次整体调用整个数组全部元素的值。数组元素与一个简单变量的地位和作用相似。“下标”可以是整型常量或整型表达式
3、。注意定义数组时用到的“数组名常量表达式”和引用数组元素时用的“数组名下标”形式相同,但含义不同。int a10;/前面有int,这是定义数组,指定数组包含10个元素t=a6;/这里的a6表示引用a数组中序号为6的元素引用一维数组元素【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。#includeint main()int i,a10;for(i=0;i=0;i-)/输出a9a0共10个数组元素printf(%d,ai);printf(n);return 0;第1个for循环使a0a9的值为09。第2个for循环按a9a0的顺序输出各元素的值。a0
4、a1a2a3a4a5a6a7a8a90123456789一维数组的初始化(1)在定义数组时对全部数组元素赋予初值。将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表初始化列表”。(2)可以只给数组中的一部分元素赋值。定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0。(3)给数组中全部元素赋初值为0。(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。但是,如果数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略。为了使程序简洁,常在定义数组的同时给各数组元
5、素赋值,这称为数组的初始化。int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4;int a10=0,0,0,0,0,0,0,0,0,0;int a10=0;/未赋值的部分元素自动设定为0或int a5=1,2,3,4,5;int a=1,2,3,4,5;或一维数组程序举例【例6.2】用数组来处理求Fibonacci数列问题。#include int main()int i;int f20=1,1;/对最前面两个元素f0和f1赋初值1for(i=2;i20;i+)fi=fi-2+fi-1;/先后求出f2f19的值for(i=0;i20;i+)if(i%5=
6、0)printf(n);/控制每输出5个数后换行 printf(%12d,fi);/输出一个数printf(n);return 0;一维数组程序举例【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列。起泡排序法起泡排序法算法算法985420854209542089420589204589第一趟第二趟第三趟第四趟第五趟一维数组程序举例【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列。#include int main()int a10;int i,j,t;printf(input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);pr
7、intf(n);for(j=0;j9;j+)/进行9次循环,实现9趟比较for(i=0;iai+1)/相邻两个数比较 t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers:n);for(i=0;iai+1定义和引用二维数组有3个小分队,每队有6名队员,要把这些队员的工资用数组保存起来以备查。小例子队员1 队员2 队员3 队员4 队员5 队员6第第1分分队245618471243160023462757第第2分分队304520181725202024581436第第3分分队142711751046197614772018如果建立一个数组pay,它应当是二维的
8、,第一维用来表示第几分队,第二维用来表示第几个队员。例如用pay2,3表示2分队第3名队员的工资,它的值是1725。二维数组常称为矩矩阵(matrix)。把二维数组写成行行(row)和列列(column)的排列形式,可以有助于形象化地理解二维数组的逻辑结构。定义二维数组类型型说明符明符 数数组名名常量表达式常量表达式常量表达式常量表达式二维数组可被看作一种特殊的一维数组:它的元素又是一个一维数组。例如,float a34;可以把a看作一个一维数组,它有3个元素:a0,a1,a2,每个元素又是一个包含4个元素的一维数组:a0 a00 a01 a02 a03 a1 a10 a11 a12 a13
9、a2 a20 a21 a22 a23float pay36;float型二维数组数组名为pay数组第二维有6个元素数组第一维有3个元素float a34,b510;/定义a为34(3行4列)的数组,b为510(5行10列)的数组float a3,4,b5,10;/在一对方括号内不能写两个下标二维数组的存储C语言中,二维数组中元素排列的顺序是按行存放的。float a34注意用矩矩阵形式形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存内存中,各元素是连续存放的,不是二维的,是线性性的。a00 a01 a02 a03a10 a11 a12 a13a20 a21
10、a22 a23a00a01a02a03a10a11a12a13a20a21a22a23200020042008201220162020202420282032203620402044第0行元素第1行元素第2行元素多维数组多维数组元素在内存中的排列顺序为:第1维的下标变化最慢,最右边的下标变化最快。float a2,3,4;/定义三维数组a,它有2页,3行,4列float a2,3,4;在内存中的排列顺序为:a000 a001 a002 a003 a010 a011 a012 a013 a020 a021 a022 a023 a100 a101 a102 a103 a110 a111 a112
11、a113 a120 a121 a122 a123引用二维数组元素数数组名名下下标 下下标“下标”可以是整型常量或整型表达式。数组元素可以出现在表达式中,也可以被赋值,如:b12=a23/2;注意在引用数组元素时,下标值应在已定义的数组大小的范围内。严格区分在定定义数组时用的a34和引用引用元素时的a34的区别。前者用a34来定义数组的维数和各维的大小,后者a34中的3和4是数组元素的下标值,a34代表行序号为3、列序号为4的元素(行序号和列序号均从0起算)。int a34;/定义a为34的二维数组 a34=3;/不存在a34元素/数组a可用的“行下标”的范围为02,“列下标”的范围为03引用一
12、维数组元素【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。#includeint main()int i,a10;for(i=0;i=0;i-)/输出a9a0共10个数组元素printf(%d,ai);printf(n);return 0;第1个for循环使a0a9的值为09。第2个for循环按a9a0的顺序输出各元素的值。a0a1a2a3a4a5a6a7a8a90123456789二维数组的初始化(1)分行给二维数组赋初值。(最清楚直观)(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。(3)可以对部分元素赋初值。
13、(4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。在定义时也可以只对部分元素赋初值而省略第1维的长度,但应分行赋初值。可以用“初始化列表”对二维数组初始化。int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,5,9;int a34=1,0,6,0,0,11;int a34=1,5,6;100050009000100006000011 0100056000000int a34=1,9;100000009000int a34=1,
14、2,3,4,5,6,7,8,9,10,11,12;int a4=1,2,3,4,5,6,7,8,9,10,11,12;int a4=0,0,3,0,10;二维数组程序举例【例6.4】将一个二维数组行和列的元素互换,存到另一个二维数组中。#include int main()int a23=1,2,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=1;i+)/处理a数组中的一行中各元素for(j=0;j=2;j+)/处理a数组中某一列中各元素printf(%5d,aij);/输出a数组的一个元素bji=aij;/将a数组元素的值赋给b数组相应元素pr
15、intf(n);printf(array b:n);/输出b数组各元素for(i=0;i=2;i+)/处理b数组中一行中各元素for(j=0;j=1;j+)/处理b数组中一列中各元素printf(%5d,bij);/输出b数组的一个元素printf(n);return 0;二维数组程序举例【例6.5】有一个34的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。#include int main()int i,j,row=0,colum=0,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;/定义数组并赋初值max=a00;/先认为a00最大f
16、or(i=0;i=2;i+)for(j=0;jmax)/如果某元素大于max,就取代max的原值max=aij;row=i;/记下此元素的行号colum=j;/记下此元素的列号printf(max=%dnrow=%dncolum=%dn,max,row,colum);return 0;max=a00for i=0 to 2for j=0 to 3真假max=aijrow=icolum=j输出:max和row、columaijmax找最大最小找最大最小值打擂台算法打擂台算法算法算法 先思考一下在打擂台时怎样确定最后的优胜者。先找出任一人站在台上,第2人上去与之比武,胜者留在台上。再上去第3人,与
17、台上的人(即刚才的得胜者)比武,胜者留台上,败者下台。以后每一个人都是与当时留在台上的人比武。直到所有人都上台比过为止,最后留在台上的就是冠军。字符数组定义字符数组用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符。char c10;c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;c0c1c2c3c4c5c6c7c8c9Iamh appy由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组来存放字符数据。int c10;c0=a;/合法,但浪费存储空间字符数组的初始化如果在定义字符数组时不进行初始化,则数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 6.1 语言程序设计
限制150内