数组
- 一维数组
- 定义
<类型关键字><数组名>[<常量表达式>];
- <类型关键字>为已存在的一种数据类型。
- <数组名>为用户定义的一个标识符。
- <常量表达式>为一常量表达式(常量或符号常量数组的长度,元素个数)
注意:两边的中括号是语法所要求的符号;不是可选项而是用的符号。
例:① int a[20]; //定义了一个有20个元素的一维int型数组a。
② double b[MS]; //假定MS为已定义的整型常量
名字一致,类型一致,个数确定。
- 一维数组元素的访问
C语言规定:对于数值型数组,只能逐个引用数组中的元素,而不能一次引用(例如输入输出或赋值)整个数组全部元素的值。
访问格式:<数组名>[<下标>] [ ]:为下标运算符
- [<下标>]与变量定义中的不同,那里是数组元素个数,这里是某个元素。
- 对于有n个元素的数组,下标依次为0,1,2,3,……,n-1,所以n个元素依次为:a[0],a[1],a[2],a[3],……,a[n-1]
- 下标可以是常量,也可以是变量或表达式,但其值必须是整数。
- 有下标可唯一确定某一元素,所以,数组元素又称为下标元素。
- C对数组元素的下标值不做有效性检查。
- 一维数组的初始化
- 在定义数组时,对数组元素赋予初值。
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
- 可以只对一部分元素赋初值0
例如: int a[10]={0,1,2,3,4};
前五个元素由用户赋予了初值,后五个元素系统赋值为0
- 若希望对所有元素赋初值0
例如:int a[10]={0};
第一个元素用户赋值为0,系统对后面9个元素赋值为0
- 若对全部元素进行初始化,可以省略数组长度。
例如: int a[5]={1,2,3,4,5};可以写成 int a[ ]={1,2,3,4,5}
- 一维数组数据存储空间的分配
- 定义一维数组后,系统分配一块连续的存储空间,空间大小为:n*sizeof(<元素类型>)
- C中,数组名表示该数组存储空间的首地址。
- 一维数组的应用
- 定义一个含有10个元素的整型数组分别给a[0]~a[9]赋值为0~9然后按逆序输出。
#include<stdio.h>
int main()
{
int i,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0;i--)
printf("%d",a[i]);
printf("\n");
return 0;
}
- 输出斐波那契数列
#include<stdio.h>
#define M 10
int main()
{
int a[M+1],i;
a[0]=1;
a[1]=2;
for(i=2;i<=M;++i)
a[i]=a[i-1]+a[i-2];
for(i=0;i<M;i++)
printf("%d",a[i]);
printf("%d\n",a[M]);
return 0;
}
- 选择排序
#include<stdio.h>
int main()
{
int i,j,k,x,n=10;
int a[10]={4,6,8,7,3,1,2,5,9,10};
for(i=1;i<n;i++)
{
k=i-1;
for(j=i;j<n;j++)
{
if(a[j]<a[k])
k=j;
}
x=a[i-1];
a[i-1]=a[k];
a[k]=x;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}
- 直接插入排序
#include<stdio.h>
int main()
{
int i,j,k,x,n=10;
int a[10]={4,6,8,7,3,1,2,5,9,10};
for(i=1;i<n;i++)
{
x=a[i];
for(j=i-1;j>=0;j--)
if(x<a[j])
a[j+1]=a[j];
else
break;
a[j+1]=x;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}
- 二维数组
- 定义格式:<类型关键字><数组名>[<常量表达式1>][<常量表达式2>]
- <常量表达式1>,<常量表达式2>两边的括号也是语法要求。
- <常量表达式1>为第一维元素个数(行),
<常量表达式2>为第二维元素个数(列);
元素总个数=<常量表达式1>*<常量表达式2>
- 二维数组元素的访问格式
<数组名>[<行下标>][<列下标>]
- [ ]与变量定义语句中的不同
- 下标可以是常量,也可以是变量或表达式,但其值必须是整数。
- 二维数组元素又称为双下标变量
- c对数组元素的下标值不做有效性检查
- 二维数组的初始化
- 定义二维数组的同时为数组元素赋值
- 分行给二维数组赋初值
- 可以把所有数据写在一个花括号内
- 可以对部分元素赋初值
- 全部元素赋初值为0
- 二维数组数组存储单元的分配
- 定义二维数组后,系统分配一块连续的存储空间,该存储空间大小为m*n*sizeof(<元素类型>),m和n分别为一维和二维的下标个数。
给二维数组元素分配存储空间时,行优先