c语言程序设计 第7章_数组.ppt

上传人:s****8 文档编号:67248755 上传时间:2022-12-24 格式:PPT 页数:114 大小:1.48MB
返回 下载 相关 举报
c语言程序设计 第7章_数组.ppt_第1页
第1页 / 共114页
c语言程序设计 第7章_数组.ppt_第2页
第2页 / 共114页
点击查看更多>>
资源描述

《c语言程序设计 第7章_数组.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计 第7章_数组.ppt(114页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言程序设计教程语言程序设计教程(第(第2版)版)第第7 7章章 数组数组第7章 数组本章主要内容本章主要内容1.1.一维数组的概念一维数组的概念2.2.二维二维(多维多维)数组的概念数组的概念3.3.字符数组的概念字符数组的概念4.4.数组作为函数参数的作用数组作为函数参数的作用5.5.不同类型数组的区别不同类型数组的区别程序设计遇到的问题:程序设计遇到的问题:处理大量具有相同数据类型数据时遇到不方便。处理大量具有相同数据类型数据时遇到不方便。如:计算如:计算Fibonacci数列前数列前4040个元素的值;统计个元素的值;统计5050个商品的个商品的平均价格等等。平均价格等等。问题具有的

2、特性问题具有的特性:数据类型相同。:数据类型相同。现有的解决方案:采用简单变量的方式。现有的解决方案:采用简单变量的方式。现有方案的缺陷:现有方案的缺陷:需要大量不同的标识符作为变量名;需要大量不同的标识符作为变量名;变量在内存中的存放是随机的;变量在内存中的存放是随机的;随着这种变量的增多,组织和管理好这些变量会使程随着这种变量的增多,组织和管理好这些变量会使程序变得复杂。序变得复杂。改进的解决改进的解决方案:使用数组。方案:使用数组。数组具有的特点数组具有的特点:1、数组属于构造数据类型中的一种数组属于构造数据类型中的一种是指具有相同数据类型的有序数据的集合是指具有相同数据类型的有序数据的

3、集合,在这个集合中,所有数据的数在这个集合中,所有数据的数据类型都是相同的;据类型都是相同的;2、数组、数组用唯一的一个数组名来标识。用唯一的一个数组名来标识。数组名代表的是数组在内存中数组名代表的是数组在内存中的首地址。数组的大小(数组元素的个数)必须在定义时确定,在程序的首地址。数组的大小(数组元素的个数)必须在定义时确定,在程序中不可改变;中不可改变;3、每一个数组元素的作用相当于简单变量;同一数组中的数组元素在内、每一个数组元素的作用相当于简单变量;同一数组中的数组元素在内存中占据的内存空间是连续的;存中占据的内存空间是连续的;4、数组中的每一个元素具有相同的名称(就是数组名),每数组

4、中的每一个元素具有相同的名称(就是数组名),每一个元素属同一数据类型一个元素属同一数据类型,它们用数组名和下标来确定。它们用数组名和下标来确定。5 5、数组的下标:是数组元素的位置的一个索引或指示。、数组的下标:是数组元素的位置的一个索引或指示。6 6、数组中的维数、数组中的维数:数组元素下标的个数。数组元素下标的个数。定义了一个数组后,在内存中就会分配一片连续的存储空间,依次存定义了一个数组后,在内存中就会分配一片连续的存储空间,依次存放数组的各个元素。放数组的各个元素。如:如:int a10;它有以下含义:它有以下含义:1.表示定义了一个一维数组。表示定义了一个一维数组。2.数组名为数组名

5、为a。3.数组中的每一个元素的数据类型都是整型。数组中的每一个元素的数据类型都是整型。4.该数组由该数组由10个数组元素组成个数组元素组成,10个元素分别个元素分别为为a0、a1、a2、a3、a4、a5、a6、a7、a8、a9。它们的下标为它们的下标为09。其中的每一个数组元素均可当作整型变量其中的每一个数组元素均可当作整型变量使用(如赋值、参与运算等)。使用(如赋值、参与运算等)。5.数组数组a在内存中占据在内存中占据20个字节的存储空间,个字节的存储空间,10个数组元素依次存放在其中个数组元素依次存放在其中。如:如:如:如:float b23;float b23;它有以下含义:它有以下含义

6、:它有以下含义:它有以下含义:1.1.表示定义了一个表示定义了一个表示定义了一个表示定义了一个 二维数组二维数组二维数组二维数组。2.2.数组名数组名数组名数组名为为为为b b。3.3.数组中的每一个元素的数据类型都是数组中的每一个元素的数据类型都是数组中的每一个元素的数据类型都是数组中的每一个元素的数据类型都是浮点型浮点型浮点型浮点型。4.4.该数组由该数组由该数组由该数组由6 6个数组元素个数组元素个数组元素个数组元素组成组成组成组成,6,6个元素分别为个元素分别为个元素分别为个元素分别为b00b00、b01b01、b02b02、b10b10、b11b11、b12b12。它它它它们的下标们

7、的下标们的下标们的下标 由两个数字组成,第一个下标从由两个数字组成,第一个下标从由两个数字组成,第一个下标从由两个数字组成,第一个下标从0101,第二个下标从第二个下标从第二个下标从第二个下标从0202。其中的每一个数组元素均可。其中的每一个数组元素均可。其中的每一个数组元素均可。其中的每一个数组元素均可当作浮点型变量使用。当作浮点型变量使用。当作浮点型变量使用。当作浮点型变量使用。5.5.数组数组数组数组b b在内存中也是连续存放的,共占据在内存中也是连续存放的,共占据在内存中也是连续存放的,共占据在内存中也是连续存放的,共占据2424个字节个字节个字节个字节的存储空间。的存储空间。的存储空

8、间。的存储空间。例:从键盘输入例:从键盘输入10个数并将其输出。个数并将其输出。分析分析:用简单变量来处理,则要定义:用简单变量来处理,则要定义10个不同的变量来存放个不同的变量来存放输入的数,使用起来很不方便。若是用数组来处理,则只要输入的数,使用起来很不方便。若是用数组来处理,则只要定义一个数组就可。定义一个数组就可。程序清单如下:程序清单如下:main()int i,a10;for(i=0;i10;i+)scanf(“%d”,&ai);for(i=0;i10;i+)printf(“%4d”,ai);if(i%5=0)printf(“n”);7.1.1一维数组的定义一维数组的定义 一维数组

9、的定义格式:一维数组的定义格式:存储类型存储类型数组大小数组大小;如:int a6;说明:说明:数组名为a;数组有6个元素:a0、a1、a2、a3、a4、a5。每个元素都代表着一个整型变量。数组在内存中是按顺序连续存放的,占用的内存大小为每一个元素占用内存的大小的和。使用数组时要注意的几个方面:使用数组时要注意的几个方面:C语言对数组的下标值是否越界不做检测。语言对数组的下标值是否越界不做检测。如有数组如有数组intscore6,数组,数组score的下标值为的下标值为05。若在程序中使用了若在程序中使用了score6或其他下标值,程序仍会运行,或其他下标值,程序仍会运行,但有可能出现意外情况

10、。但有可能出现意外情况。数组不能整体输入或整体输出。数组不能整体输入或整体输出。只能对其数组元素进行输入和输出。只能对其数组元素进行输入和输出。数组名遵循标识符命名规则;数组名遵循标识符命名规则;常量表达式用方括弧括起来;常量表达式用方括弧括起来;常量表达式表示数组元素个数常量表达式表示数组元素个数,即数组长度,数组元素的下标即数组长度,数组元素的下标从从0开始;开始;数组类型为数组中每一个元素类型;数组类型为数组中每一个元素类型;数组名表示内存首地址数组名表示内存首地址,它是一地址常量它是一地址常量例:例:intint a6;a6;a00145a1a2a3a4a523a又例如:又例如:#de

11、fineI4intdataI;(这里的这里的常量表达式为符号常量常量表达式为符号常量)而:而:int i=15;int data i;是不合法的是不合法的(不能用变量定义数组维数不能用变量定义数组维数)还有:还有:int data5;data5=10;(不合法不合法)这里不能使用这里不能使用data5,注意:注意:C语言对数组不作越界检查,使用时要注意语言对数组不作越界检查,使用时要注意例例例例1 1 1 1:阅读程序,通过程序的运行结果,了解一维简单数组:阅读程序,通过程序的运行结果,了解一维简单数组:阅读程序,通过程序的运行结果,了解一维简单数组:阅读程序,通过程序的运行结果,了解一维简单

12、数组的输入和输出。的输入和输出。的输入和输出。的输入和输出。(课本例课本例课本例课本例-1-1-1-1)main()int i,a5;for(i=0;i5;i+)/*输入第一组的输入第一组的5个值个值*/scanf(“%d”,&ai);for(i=0;i5;i+)/*输出输出5个值个值*/printf(“na%d=%dn”,i,ai);for(i=0;i5;i+)/*输入第二组的输入第二组的5个值个值*/scanf(“%d”,&ai);for(i=0;i5;i+)/*输出输出10个值个值*/printf(“na%d=%dn”,i,ai);for(i=0;i10;i+)/*输入第三组的输入第三组

13、的10个值个值*/scanf(“%d”,&ai);for(i=0;i10;i+)/*输出输出10个值个值*/printf(“na%d=%dn”,i,ai);程序运行情况见课本第159页所示。结论:结论:结论:结论:为确保程序的正确性,要求使用的数组元素与定为确保程序的正确性,要求使用的数组元素与定为确保程序的正确性,要求使用的数组元素与定为确保程序的正确性,要求使用的数组元素与定义的大小要相符合。如第义的大小要相符合。如第义的大小要相符合。如第义的大小要相符合。如第1 1组的输入输出情况;组的输入输出情况;组的输入输出情况;组的输入输出情况;对于超出数组大小范围的非数组元素,程序并未对于超出数

14、组大小范围的非数组元素,程序并未对于超出数组大小范围的非数组元素,程序并未对于超出数组大小范围的非数组元素,程序并未检查其合理性,其结果是无法预料的。如第检查其合理性,其结果是无法预料的。如第检查其合理性,其结果是无法预料的。如第检查其合理性,其结果是无法预料的。如第2 2组的组的组的组的输入输出情况;输入输出情况;输入输出情况;输入输出情况;如果对超出数组大小的非数组元数输入合理的值,如果对超出数组大小的非数组元数输入合理的值,如果对超出数组大小的非数组元数输入合理的值,如果对超出数组大小的非数组元数输入合理的值,表面上看输出的结果也是正确的,但实际上系统表面上看输出的结果也是正确的,但实际

15、上系统表面上看输出的结果也是正确的,但实际上系统表面上看输出的结果也是正确的,但实际上系统已经出现了问题,程序会非正常结束。如第已经出现了问题,程序会非正常结束。如第已经出现了问题,程序会非正常结束。如第已经出现了问题,程序会非正常结束。如第3 3组的组的组的组的输入输出情况。输入输出情况。输入输出情况。输入输出情况。特别提示:特别提示:特别提示:特别提示:使用数组的时候,要注意数组元素的合法性。使用数组的时候,要注意数组元素的合法性。使用数组的时候,要注意数组元素的合法性。使用数组的时候,要注意数组元素的合法性。7.1.2一维数组的初始化一维数组的初始化 定义了一数组后,就可以用赋值语句或输

16、入语句给数组元定义了一数组后,就可以用赋值语句或输入语句给数组元素赋值。除此之外,素赋值。除此之外,C语言还允许在定义数组的同时对数组元素语言还允许在定义数组的同时对数组元素赋值,这就是数组的初始化。赋值,这就是数组的初始化。1.初始化:初始化:在定义数组时对数组元素赋初值,数组元素这样获得在定义数组时对数组元素赋初值,数组元素这样获得初值的方法称为数组的初始化。初值的方法称为数组的初始化。数组初始化的格式:数组初始化的格式:static数组名数组名=;或:或:数组名数组名=;例如:例如:inta5=2,4,6,8,10;或:;或:inta=2,4,6,8,10;则数组元素的值:则数组元素的值

17、:a0=2,a1=4,a2=6,a3=8,a4=10。staticintb5=2,4,6,8,10;或:或:staticintb=2,4,6,8,10;则数组元素的值:则数组元素的值:b0=2b1=4b2=6b3=8b4=10存储类行为自动型:存储类行为自动型:auto2 2、数组的初始化的几种常见形式:数组的初始化的几种常见形式:数组的初始化的几种常见形式:数组的初始化的几种常见形式:给全部元素赋初值给全部元素赋初值 如:如:inta5=0,1,2,3,4;在对全部数组元素赋初值时,可以不指定数组长度,即数组在对全部数组元素赋初值时,可以不指定数组长度,即数组长度可以省略。如长度可以省略。如

18、inta=0,1,2,3,4;/*与前面功能一致与前面功能一致*/对部分数组元素赋初值对部分数组元素赋初值,此时数组长度不能省略。,此时数组长度不能省略。如:如:floatb5=1.4,7.2;/*此时此时b0=1.4,b1=7.2,其余元素系其余元素系统自动赋统自动赋0值值*/又如:又如:inta5=1,2;/*此时此时a0=1,a1=2,其余元素系统自动其余元素系统自动赋赋0值值*/又如,又如,又如,又如,char w5=A,B,Cchar w5=A,B,C;/*此时此时w0=A,w1=B,w2=C,w3=w4=。*/对数组全部元素赋初值对数组全部元素赋初值0 如:如:int a5=0;相

19、当于相当于a0=a1=a2=a3=a4=03 3 3 3、初始化数组元素时,要注意以下几情况:初始化数组元素时,要注意以下几情况:初始化数组元素时,要注意以下几情况:初始化数组元素时,要注意以下几情况:只能给数组元素逐个赋初值,不能给数组元素整体赋值。只能给数组元素逐个赋初值,不能给数组元素整体赋值。如要给如要给10个元素全部赋值个元素全部赋值1,只能写成,只能写成 int a10=1,1,1,1,1,1,1,1,1,1;不能写成:不能写成:int a10=1对于自动存储类型的对于自动存储类型的数组若不初始化,其元素值为随机数数组若不初始化,其元素值为随机数;如:如:int a5;在没有给数组

20、元素赋值前,在没有给数组元素赋值前,ai的值是不确定的,这和普通的值是不确定的,这和普通变量是一样的。变量是一样的。对存储类型为对存储类型为static数组若不赋初值,系统会自动赋以数组若不赋初值,系统会自动赋以0值值如,如,static int a5;等价于:等价于:a0=0;a1=0;a2=0;a3=0;a4=0;给数组元素赋初值的个数只能少于或等于数组的大小。给数组元素赋初值的个数只能少于或等于数组的大小。如:如:int a3=6,2,3,5,1;这种用法是错误的这种用法是错误的;1 1、数组同变量一样、数组同变量一样、数组同变量一样、数组同变量一样,必须必须必须必须先定义后引用先定义后

21、引用先定义后引用先定义后引用。数组元素的作用等同于。数组元素的作用等同于。数组元素的作用等同于。数组元素的作用等同于简单变量。简单变量。简单变量。简单变量。2 2、引用数组元素的格式是:、引用数组元素的格式是:、引用数组元素的格式是:、引用数组元素的格式是:数组名数组名 下标下标 3 3、只能逐个引用数组元素,、只能逐个引用数组元素,、只能逐个引用数组元素,、只能逐个引用数组元素,不能一次引用整个数组。不能一次引用整个数组。不能一次引用整个数组。不能一次引用整个数组。可以是整型常量可以是整型常量或整型常量表达式或整型常量表达式其最小值默认为其最小值默认为0.如有定义如有定义 int a10;则

22、可引用的数组元素为则可引用的数组元素为a0到到a9,引用的方法有引用的方法有:a5=6;a7=a5+;a6=3;a0=a5+a7-a2*3;7.2 一维数组的使用例:例:inta10;for(i=0;i10;i+)scanf(“%d”,&ai);printf(“%d”,a);(输出的是数组输出的是数组a的首地址的首地址)可以用:可以用:for(j=0;j10;j+)printf(“%dn”,aj);()又如:又如:又如:又如:intintintint a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;

23、a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;a5=1,2,3,4,5,b5=2,4,6,8,10,c3=1,2,3;char w4=char w4=char w4=char w4=a,b,c,d,a,b,c,d,;则下面的语句是合法的:则下面的语句是合法的:则下面的语句是合法的:则下面的语句是合法的:a3=28;a3=28;b4=a2+a3;b4=a2+a3;w3=d;w3=d;c2=c4%2;c2=c4%2;printf(%dprintf(%d,a0);,a0);数组元素引用的说明数组元素引用的说明下标可以是整数或整型表达式。下标可以是整数或整型表达式。如若如若i

24、,j均为整型变量,则下面的数组使用是合法的。均为整型变量,则下面的数组使用是合法的。vari+j=2;str1+2=e;下标的值不应超过数组的大小,如数组下标的值不应超过数组的大小,如数组a的大小为的大小为5,则下标的取值在则下标的取值在04的范围内。的范围内。再次提醒:再次提醒:C编译不检查下标是否“出界”。对于数组:对于数组:intvar5,如果使用,如果使用var5,系统不报错,会把系统不报错,会把var4下面一个单元中的下面一个单元中的内容作为内容作为var5引用,如图所示。引用,如图所示。例:输入例:输入1010个整数,分别按顺序和逆序输出。个整数,分别按顺序和逆序输出。#inclu

25、devoidmain()inti,a10;printf(input10numbers:n);for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=0;i=0;i-)printf(%d,ai);程序的运行情况:程序的运行情况:input 10 numbers:1 2 3 4 5 6 7 5 9 101 2 3 4 5 6 7 5 9 1010957654321常用此方法给数组元素赋值常用此方法给数组元素赋值常用此方法输出数组元素常用此方法输出数组元素例:从键盘输入例:从键盘输入例:从键盘输入例:从键盘输入4 4个学生某一课程的成绩,并输出。个学生某一课程的成绩

26、,并输出。个学生某一课程的成绩,并输出。个学生某一课程的成绩,并输出。程序清单如下:程序清单如下:main()inti;floatscore4;for(i=0;i4;i+)printf(“scoreofNO:%d:”,i+1);scanf(“%f”,&scorei);for(i=0;i4;i+)printf(“nscore%d=%7.2fn”,i,scorei);这里定义了一个实型的一维数组这里定义了一个实型的一维数组输入第输入第i个学生的成绩个学生的成绩输出第输出第i个学生的成绩个学生的成绩程序运行情况如下:程序运行情况如下:scoreofNO.1:98 score of NO.2:78 s

27、core of NO.3:83 score of NO.4:66 score0=98.00 score1=78.00 score2=83.00 score3=66.00例例例例2 2 2 2:阅读下面的程序,了解一维数组各元素的基本应用情况。:阅读下面的程序,了解一维数组各元素的基本应用情况。:阅读下面的程序,了解一维数组各元素的基本应用情况。:阅读下面的程序,了解一维数组各元素的基本应用情况。main()int i,a5=1,2,3,4,5;for(i=0;i5;i+)/*输出正确的值输出正确的值*/printf(“a%d=%dt”,i,ai);printf(“n”);for(i=5;i10

28、;i+)/*输出不正确的值输出不正确的值*/printf(“a%d=%dt”,i,ai);printf(“n”);a0=(a1+a2)*a3+a4);printf(“a0=%dn”,a0);程序运行情况如下:程序运行情况如下:a0=1 a1=2 a2=3 a3=4 a4=5 a5=5 a6=12451 a7=41991 a8=1 a9=36083例例3 3:编写程序,计算出:编写程序,计算出fibonaci数列前数列前20项的值,项的值,将计算结果保存到数组将计算结果保存到数组FBNC中。并将其输出到屏中。并将其输出到屏幕上,每行幕上,每行5项,一共项,一共4行。行。分析:分析:本例求解要求用

29、整型数组FBNC20保存数据;根据fibonaci数列的组成规律,各数组元素的值为:FBNC0=0 FBNC1=1 FBNCi=FBNCi-1+FBNCi-2 (i=2,3,n)从第三项开始的,每个数据项的值为前两个数据项的和。程序清单见课本第程序清单见课本第程序清单见课本第程序清单见课本第162162162162页,或为:页,或为:页,或为:页,或为:定义数组定义数组计算计算输出输出main()longFBNC20=1,1;inti;for(i=2;i20;i+)FBNCi=FBNCi-2+FBNCi-1;for(i=0;i8,交换交换*/(2)895420/*95,交换交换*/(3)859

30、420/*94,交换交换*/(4)854920/*92,交换交换*/(5)854290/*90,交换交换*/第一轮结束第一轮结束854209第一轮结束后最大的数到了最后第一轮结束后最大的数到了最后第一轮共进行了第一轮共进行了n-1=6-1=5次比较即循环了次比较即循环了5次次第二轮交换第二轮交换:(1)854209/*85,交换交换*/(2)584209/*84,交换交换*/(3)548209/*82交换交换*/(4)542809/*80,交换交换*/第二轮结束第二轮结束542089那么第二轮进行了那么第二轮进行了n-2=6-2=4次比较即循环了次比较即循环了4次次总结总结:第第i轮进行了轮进

31、行了 n-i比较即循环了比较即循环了n-i次次.一共要一共要n-1轮比较即外围循环轮比较即外围循环n-1次次程序清单如下:程序清单如下:算法的算法的N-S结构流程图如下结构流程图如下:a ja j+1for j=0 to N-i-1for i=0 to N-1输入N个数给a0到aN-1 真假t=aj;a j=aj+1;aj+1=t;输出a0到aN-1源程序清单如下源程序清单如下:#defineN10main()intaN,i,j,t;for(i=0;iN;i+)scanf(“%d”,&ai);for(i=0;iN-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;f

32、or(i=0;iN;i+)printf(“%d”,ai);7.3 多 维 数 组7.3.1 7.3.1 多维数组的概念多维数组的概念多维数组的概念多维数组的概念多维数组的定义格式为:多维数组的定义格式为:多维数组的定义格式为:多维数组的定义格式为:数组名数组名数组名数组名 下标下标下标下标11下标下标下标下标22 下标下标下标下标n n;注:注:注:注:下标值表示元素的个数。下标值表示元素的个数。下标值表示元素的个数。下标值表示元素的个数。多维数组的存储顺序按下标从左到右的变化顺序。多维数组的存储顺序按下标从左到右的变化顺序。多维数组的存储顺序按下标从左到右的变化顺序。多维数组的存储顺序按下标

33、从左到右的变化顺序。可以像对待一维数组那样来处理多维数组。可以像对待一维数组那样来处理多维数组。可以像对待一维数组那样来处理多维数组。可以像对待一维数组那样来处理多维数组。例如:例如:例如:例如:float V2232;float V2232;共有共有共有共有2424个元素个元素个元素个元素 intint Tel323;Tel323;共有共有1818个元素7.3.2二维数组的定义二维数组的定义1 1、二维数组的定义格式为:二维数组的定义格式为:数组名数组名行元素个数行元素个数列元素个数列元素个数;例如:例如:charword32;intnum24;floatterm43;数组元素的下标从数组元

34、素的下标从0开始,数组开始,数组word中的元素为:中的元素为:word00word01 word10word11 word20word21二维数组的二维数组的存放顺序:存放顺序:按行优先,先行后列按行优先,先行后列。数组数组word在内存中的存放顺序如图所示:在内存中的存放顺序如图所示:例如:例如:inta34;定义了一个定义了一个3*4(3行行4列列)的数组的数组.数数组名为组名为a,每一个数组元素的类型均为整每一个数组元素的类型均为整型型.该数组共有该数组共有34个元素,它个元素,它们们分分别为别为:a00,a01,a02,a03a10,a11,a12,a13a20,a21,a22,a2

35、3注意注意:不能写成不能写成inta3,4;2、几点说明:、几点说明:v二维数组中的每一个元素都有两个下标,且必须分别二维数组中的每一个元素都有两个下标,且必须分别放在单独的放在单独的“”内内v二维数组中的第一个下标表示该数组具有的行数,二维数组中的第一个下标表示该数组具有的行数,第第二个下标表示该数组具有的列数,两个下标之积是该数二个下标表示该数组具有的列数,两个下标之积是该数组具有的数组元素的个数。组具有的数组元素的个数。v多维数组定义亦类似于二维数组多维数组定义亦类似于二维数组,如:如:float a234;事实上,二维数组可看作特殊的一维数组;事实上,二维数组可看作特殊的一维数组;可以

36、把可以把二维数组看作是一种特殊的一维数组二维数组看作是一种特殊的一维数组:它的元素又是它的元素又是一个一维数组一个一维数组.例如:例如:inta34;/*定义了一个定义了一个3*4(3行行4列列)的数组的数组.*/此时我们可以将此时我们可以将a看成一个一维数组看成一个一维数组:a0、a1、a2,每个元素又是包含每个元素又是包含4个元素的一维数组。个元素的一维数组。a0-a00a01a02a03aa1-a10a11a12a13a2-a20a21a22a233.二维数组在内存中的存放顺序按行存放,即在内存中先顺序存放第一行的元素,再存放第按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元

37、素。二行的元素。如:如:inta34;则数组元素在内存中的存放顺序是:则数组元素在内存中的存放顺序是:a00a01a02a03a10a11a12a13a20a21a22a237.3.3 二维数组及多维数组的初始化二维数组及多维数组的初始化二维数组初始化的几种常见形式二维数组初始化的几种常见形式二维数组初始化的几种常见形式二维数组初始化的几种常见形式:1、对全部元素分行初始化。如:、对全部元素分行初始化。如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;2、对全部元素按数组在内存中的存放顺序将所有数据写在一个、对全部元素按数组在内存中的存放顺序将所有数据写在一个花括号内。

38、花括号内。如:如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;注:给二维数组所有元素赋初值时第一维的长度可以省略。注:给二维数组所有元素赋初值时第一维的长度可以省略。如:如:int a 4=1,2,3,4,5,6,7,9,10,11,12;等价于等价于int a34=1,2,3,4,5,6,7,9,10,11,12;或:或:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;等价于等价于int a3 4=1,2,3,4,5,6,7,8,9,10,11,12;123456789101112例如:例如:int array 32=1,2,3,4,5,6;分

39、行赋值分行赋值 int array 32=1,2,3,4,5,6;按顺序赋值按顺序赋值 int array 2=1,2,3,4,5,6;按顺序赋值按顺序赋值上面3种对数组array元素赋初值的结果相同。3、对部分元素赋初值对部分元素赋初值赋初值格式:array32=a1,a2,a3;分行赋值分行赋值array32=a1,a2,a3;按顺序赋值按顺序赋值例如:例如:staticintarray32=1,2,3;分行赋值分行赋值 staticintarray32=1,2,3;按顺序赋值按顺序赋值上面两种对数组上面两种对数组array部分元素赋初值的结果是相同的。部分元素赋初值的结果是相同的。数组数

40、组array的前面的前面3个元素赋了初值;个元素赋了初值;后面后面3个元素未赋初值;个元素未赋初值;系统自动赋予系统自动赋予0值值(static(static型型)。数组数组array中各元素的值为:中各元素的值为:array 00=1;array 01=2;array 10=3;array 11=0;array 20=5;array 21=6;又如又如:inta34=0,1,0,6,0,0,11;01000600001107.3.4 二维数组的使用二维数组的使用例:输入一个三行四列的矩陈,将该矩阵转置后输出。例:输入一个三行四列的矩陈,将该矩阵转置后输出。例:输入一个三行四列的矩陈,将该矩阵

41、转置后输出。例:输入一个三行四列的矩陈,将该矩阵转置后输出。分析:问题可分为三步:分析:问题可分为三步:分析:问题可分为三步:分析:问题可分为三步:1.1.输入该矩阵的各元素,并存放在输入该矩阵的各元素,并存放在输入该矩阵的各元素,并存放在输入该矩阵的各元素,并存放在a a 矩阵中;矩阵中;矩阵中;矩阵中;2.2.实现矩阵的转置实现矩阵的转置实现矩阵的转置实现矩阵的转置:即行列互换,将第即行列互换,将第即行列互换,将第即行列互换,将第i i行的元素变为第行的元素变为第行的元素变为第行的元素变为第i i列的元素,并将互换后的矩阵存放在列的元素,并将互换后的矩阵存放在列的元素,并将互换后的矩阵存放

42、在列的元素,并将互换后的矩阵存放在b b矩阵中;矩阵中;矩阵中;矩阵中;3.3.输出转置后的矩阵输出转置后的矩阵输出转置后的矩阵输出转置后的矩阵b b。程序清单如下:程序清单如下:程序清单如下:程序清单如下:main()inti,j,a34,b43;printf(inputarraynumbers:n);for(i=0;i3;i+)scanf(“%d%d%d%d”,&ai0,&ai1,&ai2,&ai3);for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;printf(outputarraynumbers:n);for(i=0;i4;i+)for(j=0;j3;j+)pr

43、intf(%4d,bij);printf(n);给数组元素赋值给数组元素赋值转置转置输出转置后的矩阵输出转置后的矩阵程序运行情况:程序运行情况:input array numbers:12 18 16 1921 28 25 2236 32 33 37output array numbers:12 21 3618 28 3216 25 3319 22 37main()inti,j,a34,b43;printf(inputarraynumbers:n);for(i=0;i3;i+)for(j=0;j4;j+)scanf(“%d”,&aij);for(i=0;i3;i+)for(j=0;j4;j+)

44、bji=aij;printf(outputarraynumbers:n);for(i=0;i4;i+)for(j=0;j3;j+)printf(%4d,bij);printf(n);给数组元素赋值改成给数组元素赋值改成此式,则运行时该如此式,则运行时该如何输入才能正确接收?何输入才能正确接收?程序运行情况:程序运行情况:input array numbers:12 18 16 1921 28 25 2236 32 33 37output array numbers:12 21 3618 28 3216 25 3319 22 37例:例:一个学习小组有一个学习小组有一个学习小组有一个学习小组有5

45、 5个人,每个人有三门课的考试个人,每个人有三门课的考试个人,每个人有三门课的考试个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。成绩。求全组分科的平均成绩和各科总平均成绩。成绩。求全组分科的平均成绩和各科总平均成绩。成绩。求全组分科的平均成绩和各科总平均成绩。成绩如下:成绩如下:成绩如下:成绩如下:姓名姓名姓名姓名 操作系统操作系统操作系统操作系统 C C语言语言语言语言 数据库数据库数据库数据库 张张张张8080 75 759292 王王王王6161 65 657171 李李李李5959 63 637070 赵赵赵赵8585 87 879090 周周周周7676 77

46、 778585 可设一个二维数组可设一个二维数组可设一个二维数组可设一个二维数组a53a53存放五个人三门课的成存放五个人三门课的成存放五个人三门课的成存放五个人三门课的成绩绩绩绩,再设一个一维数组再设一个一维数组再设一个一维数组再设一个一维数组v3v3存放所求得的各科平均成存放所求得的各科平均成存放所求得的各科平均成存放所求得的各科平均成绩,设变量绩,设变量绩,设变量绩,设变量l l为全组各科总平均成绩。为全组各科总平均成绩。为全组各科总平均成绩。为全组各科总平均成绩。main()int i,j;float s=0,l,v3,a53;printf(input score:n);for(i=0

47、;i3;i+)for(j=0;j5;j+)scanf(“%f”,&aij);/*输入成绩输入成绩*/s=s+aij;/*各分科总成绩各分科总成绩*/vi=s/5;/*分科平均成绩分科平均成绩*/s=0;/*为下一次统计单科总成绩做准备为下一次统计单科总成绩做准备*/l=(v0+v1+v2)/3;/*总平均成绩总平均成绩*/printf(“score1 avg:%6.1fn score2 avg:%6.1fn”,score3 avg:%6.1fn,v0,v1,v2);printf(“Total avg:%6.1fn,l);/*输出总平均成绩输出总平均成绩*/分析分析分析分析:程序中首先用了一个双

48、重循环。程序中首先用了一个双重循环。程序中首先用了一个双重循环。程序中首先用了一个双重循环。在内循环中依次读入在内循环中依次读入在内循环中依次读入在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来某一门课程的各个学生的成绩,并把这些成绩累加起来某一门课程的各个学生的成绩,并把这些成绩累加起来某一门课程的各个学生的成绩,并把这些成绩累加起来。退出内循环后再把该累加成绩除以退出内循环后再把该累加成绩除以退出内循环后再把该累加成绩除以退出内循环后再把该累加成绩除以5 5送入送入送入送入vivi之中,这就之中,这就之中,这就之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出是该

49、门课程的平均成绩。外循环共循环三次,分别求出是该门课程的平均成绩。外循环共循环三次,分别求出是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在三门课各自的平均成绩并存放在三门课各自的平均成绩并存放在三门课各自的平均成绩并存放在v v数组之中。退出外循数组之中。退出外循数组之中。退出外循数组之中。退出外循环之后,把环之后,把环之后,把环之后,把v0,v1,v2v0,v1,v2相加除以相加除以相加除以相加除以3 3即得到各科总平均成即得到各科总平均成即得到各科总平均成即得到各科总平均成绩。最后按题意输出各个成绩。绩。最后按题意输出各个成绩。绩。最后按题意输出各个成绩。绩。

50、最后按题意输出各个成绩。程序执行结果如下程序执行结果如下程序执行结果如下程序执行结果如下:input score:input score:80 61 59 85 76 80 61 59 85 76 75 65 63 87 77 75 65 63 87 77 92 71 70 90 85 92 71 70 90 85 score1 score1 avgavg:72.2:72.2 score2 score2 avgavg:73.4:73.4 score3 score3 avgavg:81.6:81.6 Total Total avgavg:75.7:75.7程序执行时数据输入方法:程序执行时数据输

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com