文档介绍:第六章数组
构造数据类型之一
数组:有序数据的集合,用数组名标识
元素:属同一数据类型,用数组名和下标确定
一维数组
一维数组的定义
定义方式: 数据类型数组名[常量表达式];
合法标识符
表示元素个数
下标从0开始
[ ] :数组运算符
单目运算符
优先级(1)
左结合
不能用( )
例 int a[6];
a[0]
0
1
4
5
a[1]
a[2]
a[3]
a[4]
a[5]
2
3
a
编译时分配连续内存
内存字节数=数组维数*
sizeof(元素数据类型)
数组名表示内存首地址,
是地址常量
一维数组的引用
数组必须先定义,后使用
只能逐个引用数组元素,不能一次引用整个数组
数组元素表示形式: 数组名[下标]
其中:下标可以是常量或整型表达式
例 int i=15;
int data[i]; (不能用变量定义数组维数)
例 int a[10];
printf(“%d”,a); ()
必须 for(j=0;j<10;j++)
printf(“%d\t”,a[j]); ()
例 int data[5];
data[5]=10; //C语言对数组不作越界检查,使用时要注意
一维数组的初始化
初始化方式
在定义数组时,为数组元素赋初值
(在编译阶段使之得到初值)
int a[5]={1,2,3,4,5};
等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;
说明:
数组不初始化,其元素值为随机数
对static数组元素不赋初值,系统会自动赋以0值
当全部数组元素赋初值时,可不指定数组长度
如 int a[5]={6,2,3};
等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0;
如 int a[3]={6,2,3,5,1}; ()
static int a[5];
等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0;
只给部分数组元素赋初值
int a[]={1,2,3,4,5,6};
编译系统根据初值个数确定数组维数
程序举例
例读10个整数存入数组,找出其中最大值和最小值
步骤:
1. 输入:for循环输入10个整数
2. 处理:
(a) 先令max=min=x[0]
(b) 依次用x[i]和max,min比较(循环)
若max<x[i],令max=x[i]
若min>x[i],令min=x[i]
3. 输出:max和min
#include <>
#define SIZE 10
main()
{ int x[SIZE],i,max,min;
printf("Enter 10 integers:\n");
for(i=0;i<SIZE;i++)
{ printf("%d:",i+1);
scanf("%d",&x[i]);
}
max=min=x[0];
for(i=1;i<SIZE;i++)
{ if(max<x[i]) max=x[i];
if(min>x[i]) min=x[i];
}
printf("Maximum value is %d\n",max);
printf("Minimum value is %d\n",min);
}
例 i数列前20个数
f[0]
f[1]
f[2]
f[3]
f[4]
f[5]
f[19]
……...
1
1
f[19]
0
1
4
5
2
3
19
2
3
5
#include <>
main()
{ int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{ if(i%5==0) printf("\n");
printf("%12d",f[i]);
}
}
例用冒泡法对10个数排序
排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然
后比较第二个数与第三个数;依次类推,直至第n-1个数和第
n个数比较为止——第一趟冒泡排序,结果最大的数被安置在
最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在
第n-1个元素位置
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
例
38 49 65 76 13 27 30 97
第一趟
38 49 65 13 27 30 76
第二趟
38 49 13 27 30 65
第三趟
38 13 27 30 49
第四趟