目录
1.一维数组的初始化
给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可以采用初始化赋值和动态赋值的方法。
数组初始化赋值是指在数组定义时给数组元素赋予初值。
注:数组初始化在编译阶段进行,而用赋值语句或输入语句给数组素指定初值是在运行时完成。
初始化赋值的一般形式为:
类型说明符 数组名[常量表达式]={值,值,... ...值}
(1)在定义数组时对数组元素赋以初值
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
将数组元素的初始值依次放在一对花括号内,经过上面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。
(2)可以只给一部分元素赋值。
例如:int a[10]={0,1,2,3,4};
定义a数组中有10个元素,但花括号内只提供5个初始值,这表示只给前面5个元素赋值,后5个元素值为0。
(3)在对全部数组元素赋初值时,由于数组的个数已定,因此可以不指定数组长度。
例如:int a[5]={1,2,3,4,5};
也可以写成:int a[ ]={1,2,3,4,5};
2.二维数组的引用和初始化。
数据类型 数组名[常量表达式1][常量表达式2]={初始化数据};
注:一对方括号内不能写两个下标
例如:float a[3,4] 错误
数组元素个数必须是常量表达式,不能使用变量。
例如:int i=2;j=4;
int a[i][j]; 错误
(1)直接分行给二维数组赋初值。
如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)把所有数据写在一个花括号内,按数组排列的顺序对各元素赋值。
例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)对部分元素赋初值。
例如:int a[3][4]={{1},{5},{9}};
(4)如果对全部元素都赋值,则定义数组时对第一维的长度可以不定,但第二维的长度不能省。
如:int a[3][4]={1,2,3,4,5,6,7,8,9};
等价于
int a[ ][4]={1,2,3,4,5,6,7,8,9};
在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋值。
例如:int a[][4]={{0,0,3},{},{0,10};
二维数组的输入输出:采用双重循环方式进行。
数组的输入
#include <stdio.h>
int main()
{
int a[2][3],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
......
return 0;
}
数组的输出
#include <stdio.h>
int main()
{
int a[2][3],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
......
return 0;
}
例题:有一个3×4的矩阵,要求编程序求出其中值最大的那个元素,以及其所在的行号和列号。
#include <stdio.h>
void main()
{
int i,j,row=0,colim=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},
{-10,10,-5,2}};
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);
}