第七章 数组.docx
- 文档编号:10617660
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:21
- 大小:21.71KB
第七章 数组.docx
《第七章 数组.docx》由会员分享,可在线阅读,更多相关《第七章 数组.docx(21页珍藏版)》请在冰豆网上搜索。
第七章数组
第七章数组
数组是一种常用的数据结构,用来存储同一类型值的集合。
当程序要处理大量的同类型的数据就需要将这批数据存储在数组中,以便用循环来处理数组中的每个值。
7.1一维数组
一、一维数组中的基本语法
1.一维数组的定义语法
数据类型数组名[整型常量表达式];
说明:
(1)一个数组是由若干数组元素组成的,每个数组元素相当于一个变量,用来存放单个数据。
一个数组的数据类型就是数组中所有元素的数据类型。
(2)数组名要符合C语言标识符的命名规则。
(3)整型常量表达式,即表达式中只有常量没有变量,而且表达式的结果必须为整型。
整型常量表达式的值表示数组中的元素个数(也称为数组长度)。
例如,要计算一个班级100名同学某门课程的平均分,我们可以定义一个长度为100的数组,存储每位同学的课程成绩:
doublescore[100]。
这里将数组命名为score,数组中的每个元素的数据类型都为double,一个元素存放一名同学的课程成绩。
这里特别要指出的是,定义数组时必须给出数组长度,即必须说明数组中的元素个数。
而且数组长度必须用整型常量表达式来表示,例如:
inta[10];
或者:
#defineN10
inta[N];
doublea[5+5],b[5*2];
intc[N+5],d[N*2];
不能通过变量或者带有变量的表达式表示数组长度。
例如,下列数组的定义是错误的:
intn=10;
inta[n];
intb[n+10];
另外,不能定义长度为0的数组,例如:
inta[0],b[10-10];
2.数组元素
(1)数组元素的引用
通过数组名和元素下标来引用所有的数组元素,即数组名[元素下标]。
其中元素下标表明某个具体的元素在数组中的位序,数组中第一个元素的下标为0,最后一个数组元素的下标应该是数组长度-1。
元素下标可以用整型表达式表示。
如有数组定义:
inta[10];根据数组长度,不难知道数组a是由10个数组元素组成的,这10个元素可以分别表示为:
a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。
需要注意起始元素的下标为0,最后一个元素的下标为9(数组长度减去1)。
在引用数组元素时,其实我们用到了数组下标运算符[],它是C语言优先级最高的4个运算符之一。
(2)数组元素的语法本质
每个数组元素相当与一个与数组类型相同的变量,所有凡是能对变量进行的运算都适合数组元素,见下面这段程序:
inti,j,a[10];
i=4;j=i;printf("%d",j);
a[3]=123;a[i]=a[1+2];/*数组元素的下标可以用变量定义!
*/
printf("%d",a[i]);
3.一维数组的初始化
数组的初始化是指在定义数组的同时为每一个数组元素赋值,可通过初始化列表对数组进行初始化,具体语法如下:
数据类型数组名[常量表达式]={表达式1,表达式2,…,表达式n};
例如,intx=3;inta[10]={0,1,x-1,x,x+1,2*x-1,5+1,7,8,9};
初始化列表语法有两个重要的变形:
(1)只初始化部分元素。
例如,inta[10]={0,1,2,3,4};其中a[5]~a[9]没有被初始化,
初值为0,所以在初始化数组时,凡没有被初始化的元素其初值就为0。
【课内思考题7.1】设inta[2010];如何将数组a中的全部元素初始化为0?
(2)初始化全部元素可以省略数组长度。
例如,inta[6]={0,1,2,3,4,5};可以写成inta[]={0,1,2,3,4,5};
4.一维数组元素的内存分布
例如,shorta[5];数组a中有5个元素,每个元素相当于一个short变量,占2个字节,所以系统需为a分配连续的10个字节,a[0]获得头2个字节,a[1]得到接下来的2个字节……
【例7.1】验证一维数组元素内存分布的连续性。
#include
main()
{
shorta[5]={1,2,3,4,5};
inti;
printf("sizeof(i)=%d\n",sizeof(i));
printf("&i=%#x\n",&i);
printf("sizeof(a)=%d\n",sizeof(a));
printf("sizeof(a[0])=%d\n",sizeof(a[0]));
printf("&a[0]=%#x\n",&a[0]);
printf("&a[1]=%#x\n",&a[1]);
printf("&a[2]=%#x\n",&a[2]);
printf("&a[3]=%#x\n",&a[3]);
printf("&a[4]=%#x\n",&a[4]);
printf("a=%#x\n",a);/*数组名代表数组首元素的地址*/
}
说明:
从程序最后一条语句的打印情况来看,数组名代表数组中第一个元素的地址,即a≡&a[0]。
【课内思考题7.2】如何使用sizeof运算符计算数组的长度(特别是省略长度的数组)?
二、一维数组在编程中的应用
1.顺序访问一维数组
(1)循环打印一维数组全部元素的值
#include
#defineN10
main()
{
inta[N];
inti;
for(i=0;i a[i]=i+1;/*scanf("%d",&a[i]);*/ for(i=0;i printf("%d",a[i]); printf("\n"); for(i=N-1;i>=0;i--) printf("%d",a[i]); printf("\n"); } (2)数组间赋值 #include #defineN10 main() { inta[N],b[N]; inti; for(i=0;i /*逐元素地拷贝*/ for(i=0;i for(i=0;i } 2.用数组生成fibonacci数列 #include main() { intf[20]; inti; f[0]=f[1]=1; for(i=2;i<19;i++) f[i]=f[i-1]+f[i-2]; for(i=0;i<20;i++) { printf("%-5d",f[i]); if((i+1)%5==0)printf("\n"); } } 3.数组逆置 #include #defineN8 main() { inta[N]; inti,j; for(j=0;j i=0,j=N-1; while(i { inttemp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; } for(j=0;j } 4.顺序查找 #include #defineN5 main() { inta[N]; intx; intindex=-1; inti;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 数组 第七