C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
一、一维数组
一维数组的定义
数据类型 数组名[常量表达式];
数组特点:[ ] :数组运算符,单目运算符,优先级(1),左结合,不能用( )
编译时分配连续内存
内存字节数=数组维数*
sizeof(元素数据类型)
数组名表示内存首地址,
是地址常量
二、数组的引用
int data[5];
data[5]=10; //C语言对数组不作越界检查,使用时要 注意
数组必须先定义,后使用v只能逐个引用数组元素,不能一次引用整个数组v数组元素表示形式: 数组名[下标]其中:下标可以是常量或整型表达式。
例 int a[10];
printf(“%d”,a);
必须 for(j=0;j<10;j++)
printf(“%d\\t”,a[j]);
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值
只给部分数组元素赋初值
当全部数组元素赋初值时,可不指定数组长度
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个数排序
算法分析:如果有n个数,则要进行n-1趟比较。
在第1趟比较中要进行n-1次相邻元素的两两比较,
在第j趟比较中要进行n-j次两两比较。
比较的顺序从前往后,经过一趟比较后,
将最值沉底(换到最后一个元素位置),
最大值沉底为升序,最小值沉底为降序。
排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置.
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
#include
int main()
{
int i,j,t,a[10]={5,4,8,3,6,9,7,222,64,88};
//排序
for(i=1;i<10;i++) //外循环控制排序趟数,n个数排n-1趟
{
for(j=0;j<10-1;j++) //内循环每趟比较的次数,第j趟比较n-i次
{
if(a[j]>a[j+1]) //相邻元素比较,逆序则交换
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("排序后的结果是:\\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}
四、多维数组
定义方式:
数据类型数组名[常量表达式][常量表达式];
例 int a[3][4];
float b[2][5];
int c[2][3][4];
int a[3,4]; (x)
数组元素的存放顺序l原因:内存是一维的
二维数组:按行序优先
多维数组:最右下标变化最快
五、二维数组
二维数组a是由3个元素组成,每个元素a[i]由包含4个元素的一维数组组成
二维数组元素的引用
形式:数组名[下标][下标]
将二维数组行列元素互换,存到另一个数组中
#include
main()
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\\n");
for(i=0;i<=1;i++)
{ for(j=0;j<=2;j++)
{ printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\\n");
}
求二维数组中最大元素值及其行列号
#include
main()
{ int a[3][4]={{1,2,3,4},
{9,8,7,6},
{-10,10,-5,2}};
int i,j,row=0,colum=0,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{ max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d, \\
colum=%d\\n",max,row,colum);
}
发布评论请先 登录
相关推荐
评论