《C语言程序设计》第4章数组.ppt
《《C语言程序设计》第4章数组.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》第4章数组.ppt(78页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第四章第四章 数数 组组Chapter 4 Array第四章第四章 数数 组组 在实际的应用中,经常会遇到某些类型相同并相互具有联系的数据。该类数据,经常要作相关的处理。如,一个班30个人的一门课程的成绩,求平均成绩、最高或最低成绩。处理这类数据的最好办法是将其定义成为一个具有共同特征的集合,这种同类型相关数据的集合称为数组。Chapter 4 Array第四章第四章 数数 组组Chapter 4 Array4.1 数组的基本概念 C 语言可以根据用户需要,用基本数据类型定义特殊性质的数语言可以根据用户需要,用基本数据类型定义特殊性质的数据类型,称为构造类型。构造类型有:据类型,称为构造类型。
2、构造类型有:数组、数组、结构、联合。结构、联合。数组:数组:相同数据类型变量相同数据类型变量的的有序有序集合。有序表现在数组元素在集合。有序表现在数组元素在内存中连续存放。内存中连续存放。数组用一个名字作为标识。数组用一个名字作为标识。为区分各元素,每个元素有一个用为区分各元素,每个元素有一个用整型表示的序号,称之为下标。下标可以有多个,下标的个数称为整型表示的序号,称之为下标。下标可以有多个,下标的个数称为数组的维数。数组的维数。如:十个整型变量如:十个整型变量 k0,k1,k9一个下标。一个下标。数组名。数组名。三个学生三门课程的成绩三个学生三门课程的成绩97.5 80.5 94.5 76
3、.5 81.4 90.060.0 64.5 75.0 学学号号 0 1 20 1 2 课程课程 下标一:行下标一:行下标二:列下标二:列数组元素:数组元素:a11第四章第四章 数数 组组Chapter 4 Array/*example 4-1(b)计算平均成绩计算平均成绩*/#include void main(void)int i;float math,ave;ave=0.0;/*平均成绩初值为平均成绩初值为0*/for(i=0;i10;i+)/*循环循环10次次*/scanf(%f,&math);/*输入成绩输入成绩*/ave=ave+math;/*累加成绩累加成绩*/ave=ave/10
4、;/*求平均求平均*/printf(ave=%fn,ave);【例例4-1】学学生生分分数数的的处处理理问问题题。有有10个个学学生生参参加加数数学学考考试试,考考试成绩由键盘输入,计算平均成绩。试成绩由键盘输入,计算平均成绩。第四章第四章 数数 组组Chapter 4 Array /*example 4-1(b)计算平均成绩计算平均成绩*/#include void main(void)int i;float math,ave;ave=0.0;/*平均成绩初值为平均成绩初值为0*/for(i=0;i10;i+)/*循环循环10次次*/scanf(%f,&math);/*输入成绩输入成绩*/a
5、ve=ave+math;/*累加成绩累加成绩*/ave=ave/10;/*求平均求平均*/printf(ave=%fn,ave);for(i=0;i=ave)printf(%fn,math);/*大于平均成绩则打印大于平均成绩则打印*/【例【例4-1(b)】第四章第四章 数数 组组Chapter 4 Array/*example 4-1(c)计算平均成绩计算平均成绩*/#includevoid main(void)int i;float math10,ave;ave=0.0;/*平均成绩初值为平均成绩初值为0*/for(i=0;i10;i+)/*循环循环10次次*/scanf(%f,&math
6、i);/*输入成绩输入成绩*/ave=ave+mathi;/*累加成绩累加成绩*/ave=ave/10;/*求平均求平均*/printf(ave=%fn,ave);for(i=0;i=ave)printf(%fn,mathi);/*大于平均成绩则打印大于平均成绩则打印*/【例【例4-1(c)】第四章第四章 数数 组组Chapter 4 Array数组必须先说明后使用。说明的目的如下:数组必须先说明后使用。说明的目的如下:说明数组的名字(标识)。说明数组的名字(标识)。说明数组的类型。说明数组的类型。说明数组的维数。说明数组的维数。确定各维下标的变化范围。确定各维下标的变化范围。编译系统将根据说
7、明,开辟内存单元按特有的顺序和相应的类编译系统将根据说明,开辟内存单元按特有的顺序和相应的类型为各元素分配内存单元。型为各元素分配内存单元。第四章第四章 数数 组组Chapter 4 Array4.2 一维数组一维数组 一维数组的说明一维数组的说明说明方式:说明方式:type array1常量表达式常量表达式,arrayn常量表达式常量表达式;类型说明符,根据需要可加修饰说明。说明数组的类型。类型说明符,根据需要可加修饰说明。说明数组的类型。数组名,用标识符命名。数组名,用标识符命名。用用 包含的常量表达式。数组的下包含的常量表达式。数组的下标从标从0变化到常量达式的值减一。变化到常量达式的值
8、减一。int id5,iyear10;float fScore36;当说明数组后,编译时系统会根据定义的类型分配连续的一段当说明数组后,编译时系统会根据定义的类型分配连续的一段内存单元给数组的各元素。内存单元给数组的各元素。id0id1id2id3id4 系统为数组分配的连续内存单元,每个系统为数组分配的连续内存单元,每个单元占两个单元占两个BYTE。首地址用数组名。首地址用数组名id表示。表示。第四章第四章 数数 组组Chapter 4 Array2.一维数组的引用一维数组的引用 数组是一组数,它们公用一个数组名,这是它们公有的属数组是一组数,它们公用一个数组名,这是它们公有的属性,但它们在
9、数组中的位置不同,这是它们私有的属性,为性,但它们在数组中的位置不同,这是它们私有的属性,为表明数组中的一个元素,既要指出其来自于哪个数组,这就表明数组中的一个元素,既要指出其来自于哪个数组,这就需要数组名;又要声明其在这个数组中的位置,这就需要下需要数组名;又要声明其在这个数组中的位置,这就需要下标标。一维数组中元素引用的一般形式为:一维数组中元素引用的一般形式为:数组名数组名下标值下标值说明:说明:下标通常为整型,如果为实型,系统自动取整;下标通常为整型,如果为实型,系统自动取整;下标常常巧妙的和循环变量相结合,随着循环变量的变化而下标常常巧妙的和循环变量相结合,随着循环变量的变化而变化,
10、可以达到事半功倍的效果;变化,可以达到事半功倍的效果;C语言不做下标越界的检查,即语法上对越界的下标不报错。语言不做下标越界的检查,即语法上对越界的下标不报错。第四章第四章 数数 组组Chapter 4 Array3.一维数组的存储一维数组的存储 计算机系统中有着大量的存储单元,为区别各个存储单元,计算机系统中有着大量的存储单元,为区别各个存储单元,每一个存储单元都有一个唯一的代表这个存储单元的地址,每一个存储单元都有一个唯一的代表这个存储单元的地址,就好像我们每一个人都有一个唯一的代表自己的身份证号一就好像我们每一个人都有一个唯一的代表自己的身份证号一样。计算机系统中,存储单元的地址的编码规
11、则是线性的,样。计算机系统中,存储单元的地址的编码规则是线性的,以十六进制表示,并且从以十六进制表示,并且从0开始计数,因此存储单元的地址开始计数,因此存储单元的地址为:为:0、1、2、.9、A、B、C、D、E、F、10H、.如果说明的是一个数组,如:如果说明的是一个数组,如:int math10;计算机开辟计算机开辟20个地址连续的存储单元(个地址连续的存储单元(TC环境下整型占环境下整型占2个字节,共有个字节,共有10个数组元素),用于存放数组中的个数组元素),用于存放数组中的10个数组元素,且这个数组元素,且这20个个存储单元的首地址标记为:数组名存储单元的首地址标记为:数组名math或
12、或&math0,其它,其它的地址依次标记为:的地址依次标记为:&math1.&math9,10个数组元个数组元素在内存中依次存放,它们是邻居关系,它们的地址是连续素在内存中依次存放,它们是邻居关系,它们的地址是连续的。的。第四章第四章 数数 组组Chapter 4 Array4.4.一维数组的初始化一维数组的初始化 数组的元素可以在说明数组时初始化。数组的元素可以在说明数组时初始化。int a10=1,2,3,4,5,6,7,8,9,10;/*/*说明数组,同时初始化全部元素。说明数组,同时初始化全部元素。*/*/float fValue10=1.0,2.0,3.0;/*说明数组,给部分元素初
13、值,其余元素为说明数组,给部分元素初值,其余元素为0。*/unsigned a=0 x0000,0 x0001,0 x0002;/*当数组元素全部赋初值时,可以不指定长度当数组元素全部赋初值时,可以不指定长度*/第四章第四章 数数 组组Chapter 4 Array/*example 4-2 数组的初始化数组的初始化*/#includevoid main(void)int i;int a5=1,2,3,4,5;int b5=1,2;int c=1,2,3;for(i=0;i5;i+)/*循环循环5次次*/printf(a%d=%d ,i,ai);/*输出输出a数组元素数组元素*/printf(
14、n);/*换行换行*/for(i=0;i5;i+)/*循环循环5次次*/【例【例4-2】数组的初始化示例。编写代码】数组的初始化示例。编写代码4-2如下,其执行结果如如下,其执行结果如图图4-3所示。所示。第四章第四章 数数 组组Chapter 4 Array printf(b%d=%d ,i,bi);/*输出输出b数组元素数组元素*/printf(n);/*换行换行*/for(i=0;i5;i+)/*循环循环5次次*/printf(c%d=%d ,i,ci);/*输出输出c元素,注意有危险元素,注意有危险*/printf(n);/*换行换行*/第四章第四章 数数 组组Chapter 4 Ar
15、ray5.5.一维数组的应用一维数组的应用【例【例4-3】兔子繁殖问题。】兔子繁殖问题。/*example 4-3 Fibonacci数列数列*/#include void main(void)int month;int f13=1,1;for(month=2;month13;month+)/*循环递推循环递推*/fmonth=fmonth-1+fmonth-2;/*计算数列计算数列*/for(month=0;month13;month+)printf(%d ,fmonth);/*输出数列输出数列*/第四章第四章 数数 组组Chapter 4 Array【例【例4-4】由键盘输入】由键盘输入n
16、个学生(设人数不超过个学生(设人数不超过50人)的数学成人)的数学成绩,分别统计优、良、中、及格、不及格的人数。绩,分别统计优、良、中、及格、不及格的人数。/*example 4-4 分别统计成绩分别统计成绩*/#include void main(void)int i,n;int a=0,b=0,c=0,d=0,e=0;/*表示各段人数表示各段人数*/float math50;printf(“n=?”);/*输入人数输入人数*/scanf(“%d”,&n);for(i=0;in;i+)/*循环循环n次次*/scanf(“%f”,&mathi);for(i=0;i=90)a+;/*分别统计分别
17、统计*/else if(mathi=80)b+;else if(mathi=70)c+;else if(mathi=60)d+;else e+;printf(%dt%dt%dt%dt%dn,a,b,c,d,e);/*打印打印*/第四章第四章 数数 组组Chapter 4 Array例:例:求求10个学生一门课程的平均分,并输出低于平均成绩的分数。个学生一门课程的平均分,并输出低于平均成绩的分数。#include void main(void)float fScore10,aver=0;int i;for(i=0;i10;i+)scanf(“%f”,&fScorei);aver+=fScorei
18、;aver/=10;for(i=0;i 10;i+)if(fScore i aver)printf(“num=%d,score=%f”,i+1,fScore i);说明数组。循环输入各元素的值并累加。循环输入各元素的值并累加。循环判断条件,满足条件输出。循环判断条件,满足条件输出。第四章第四章 数数 组组Chapter 4 Array4.3 二二 维维 数数 组组 在实际应用中,经常会遇到一些用多维索引的数据。如:四个在实际应用中,经常会遇到一些用多维索引的数据。如:四个学生三门课的成绩。可以用下表表示:学生三门课的成绩。可以用下表表示:92.580.591.099.083.590.070.0
19、66.060.078.056.059.0 显然,该表的每一项需要有两个索引项。表现为数组的两个下显然,该表的每一项需要有两个索引项。表现为数组的两个下标。超过一个下标的数组称为多维数组。标。超过一个下标的数组称为多维数组。行:代表某个学生。行:代表某个学生。列:代表某门课程。列:代表某门课程。第四章第四章 数数 组组Chapter 4 Array二二维数组的说明维数组的说明说明方式:说明方式:type array常量表达式常量表达式1常量表达式常量表达式n,;n个整型常量表达式个整型常量表达式数组元素的个数数组元素的个数?int a23,b452;多维数组在内存中的顺序多维数组在内存中的顺序i
20、nt a33;二维结构:二维结构:a00 a01 a02a10 a11 a12a20 a21 a22 排列顺序:先行后列。排列顺序:先行后列。a00a01a02a10a11a12a20a21a22下下标标为为0的的行行 总原则:最后一个下标先变化,变化一个周总原则:最后一个下标先变化,变化一个周期后,倒数第二个开始变化,期后,倒数第二个开始变化,如此类推。如此类推。a为数组在内为数组在内存中的首地址。存中的首地址。int b234;内存中的排列?内存中的排列?第四章第四章 数数 组组Chapter 4 Array二二维数组的初始化维数组的初始化数组可以在说明时初始化。数组可以在说明时初始化。全
21、部赋初值全部赋初值int a23=1,2,3,4,5,6;下标为下标为0的一行的一行下标为下标为1的一行的一行int b23=1,2,3,4,5,6;按内存顺序赋初值。按内存顺序赋初值。部分赋初值部分赋初值int a23=1,2;0行的行的0列的元素赋初列的元素赋初值。值。0行其余值为行其余值为0。int a23=1,2;对全体数组元素赋初值,第一维下标可以省略。对全体数组元素赋初值,第一维下标可以省略。int a 3=1,2,3,4,5,6;第四章第四章 数数 组组Chapter 4 Array二维二维数组元素的引用数组元素的引用 数组定义后,具备数组定义后,具备简单变量的一切性质简单变量的
22、一切性质,可以作为表达式的运,可以作为表达式的运算对象,也可以被赋值。引用时,算对象,也可以被赋值。引用时,只能引用数组元素只能引用数组元素,方式如下:,方式如下:arrayexp1expnint a1010,y,i=2;ai+26=20;y=ai+26*100/30;a1011=34;对对4行行6列的元素赋值。列的元素赋值。参加表达式运算。参加表达式运算。C语言不作下标检查,语法正确,语言不作下标检查,语法正确,但使用危险,可能造成程序的错误!但使用危险,可能造成程序的错误!整型表达式。整型表达式。第四章第四章 数数 组组Chapter 4 Array5.二维数组的应用二维数组的应用【例【例
23、4-5】下三角矩阵。】下三角矩阵。/*example 4-5 下三角矩阵下三角矩阵*/#include void main(void)int i,j;int a44;for(i=0;i4;i+)/*外循环遍历行外循环遍历行*/for(j=0;j=j)aij=1;/*下三角下三角*/else aij=0;/*上三角上三角*/for(i=0;i4;i+)第四章第四章 数数 组组Chapter 4 Array for(j=0;j4;j+)printf(“%4d”,aij);/*输出数列输出数列*/printf(“n”);/*换行换行*/第四章第四章 数数 组组Chapter 4 Array【例【例4
24、-6(a)】二维数组的转置】二维数组的转置。/*example 4-6(a)二维数组的转置二维数组的转置*/#include void main(void)int i,j;int a33=1,2,3,4,5,6,7,8,9;/*定义原数组定义原数组*/int b33;/*定义新数组定义新数组*/for(i=0;i3;i+)/*外循环遍历行外循环遍历行*/for(j=0;j3;j+)/*内循环遍历列内循环遍历列*/bij=aji;/*计算新元素计算新元素*/for(i=0;i3;i+)for(j=0;j3;j+)printf(“%4d,aij);/*输出原数组输出原数组*/printf(“n”)
25、;/*换行换行*/第四章第四章 数数 组组Chapter 4 Array printf(“n”);/*换行换行*/for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,bij);/*输出新数组输出新数组*/printf(“n”);/*换行换行*/第四章第四章 数数 组组Chapter 4 Array/*example 4-6(b)二维数组的转置二维数组的转置*/#includevoid main(void)int i,j,t;int a33=1,2,3,4,5,6,7,8,9;/*定义原数组定义原数组*/for(i=0;i3;i+)for(j=0;j3;j+)print
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 数组
限制150内