目录
数组的定义及其相关概念
在C语言中,数组是用来提供一种简单的构造数据类型,即数组是一组同类型的数据项的有序集合,其中每个数据项称为“数组元素。数组分为一维数组和多维数组。一维数组就是仅有一个下标而确定数组元素,多维数组则是有一个以上的下标而确定数组元素的数组。
一维数组的定义和引用
定义:
[存储类型符] 数据类型符 数组变量名[整型常量表达式];
注意事项;
- 存储类型符表示各元素的存储类别,比如在前面函数里讲到的static,extern,auto等类型
- 数据类型可以是任意类型,int型,float型,char型等
- 数组变量名的命名规则同变量名命名规则一样,符合C语言的标识符命名规则(不要以数字开头),数组变量名是数组第一个数组元素在内存中的地址
- “[ ]”是数组标志,中间必须是整型常量或者整型常量表达式,它决定了数组的长度(数组元素的个数),必须是固定的值。
- 数组定义后,系统会将其分配一定大小的内存单元,其所占内存单元的大小与数组元素的类型和数组的长度有关。数组所占字节数=数组大小*sizeof(数组元素类型)。比如:int a[10];其所占字节数为4x10=40
引用:
数组变量名[下标]
- 数组中的下标都是从0开始,到数组大小-1结束
- 不能直接存取整个数组,只能引用数组中的各个数据单元,比如:
#include <stdio.h>
int main()
{
int a[10];
a[2]=4;
a[3]=2;
a[4]=a[2]+a[3];
printf("%d",a[4]);
return 0;
}
其中定义了一个数组大小为10,数组名为a的整型数组,第3个元素a[2]被赋值为4,第4个元素a[3]被赋值为2,a[4]的值等于a[2]+a[3],整个数组是从a[0]开始,到a[9]结束
一维数组的赋值和应用
一维数组的初始化赋值:
数据类型符 数组变量名[常量表达式]={表达式1,表达式2,... 表达式n};
注意:表达式的个数不能超过数组变量的大小,比如:
int a[5]={1,2,3,4,5,6};//超出了数组的大小范围
表达式之间用逗号隔开,当表达式的个数小于数组的大小,未指定值的数组元素赋值为0
int a[10]={1,2,3,4,5,6}; 在内存中的存储形式如下图
当对数组元素赋初值时,可以省略数组的大小,此时数组的实际大小就是初值列表中表达式的个数。比如:char b[ ]={'a','b','c'};则数组b的实际大小为3;但不能对数组变量进行整体赋值,比如:
int a[5];
a={1,2,3,4,5}; //错误
a[ ]={1,2,3,4,5}; //错误
a[5]={1,2,3,4,5}; //错误
应用:用冒泡排序法将10个整数按照从小到大的顺序排序
冒泡排序法是假设数组有n个数组元素,采用冒泡排序对数组元素进行排序,从下标为0的元素开始,比较相邻的两个元素的大小,每次比较如果前面的元素大于后面的元素,则交换这两个元素的值
#include <stdio.h>
#define N 10
int main()
{
int a[N],i,j,t;//注意N已在预处理命令中赋值
printf("请输入一组数字:\n",N);//输入N个数字
for( i=0;i<N;i++)
scanf("%d",&a[i]);
for( i=1;i<N;i++)//轮次,共N-1次
for( j=0;j<N-i;j++)//实现一次冒泡操作
if(a[j]>a[j+1])//交换两相邻间的数
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序结果为:\n");//输出排序好的结果
for( i=0;i<N;i++)
printf("%d",a[i]);
return 0;
}