C语言-数组

目录

1.一维数组的初始化

2.二维数组的引用和初始化。


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=%dn",
          max,row,colum);
}