1.数组由数据类型相同的一系列元素组成(单个的变量叫变量,数组中定义的多个变量叫元素)。
需要使用数组时,通过声明数组告诉编译器数组中内含多少元素和这些元素的类型。编译器根据这些信息正确地创建数组。(普通变量可以使用的类型,数组元素都可以用)
2.格式举例
int a[5]={1,2,3,4,5};
a是数组的名字,5指该数组有五个元素,并且这五个元素分别用a[0],a[1]…a[4]表示
3.代码举例
1 #include<stdio.h> 2 3 4 5 #define MONTHS 12 6 7 8 9 int main(void) 10 11 { 12 13 int days[MONTHS]={31,28,31,30,31,30,31,31,30,31,30,31}; 14 15 int i; 16 17 for(i=0;i<MONTHS;i++) 18 19 printf("%2d 月有 %2d 天\n",i+1,days[i]); 20 21 22 23 return 0; 24 25 26 27 }
4.为什么需要数组
①解决大数量同类型数据的存储和使用问题
②为了模拟现实世界
5.注意
①初始化列表中的项数应与数组的大小一致。
(当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为0。
如果初始化列表的项数多于数组元素个数,编译器会毫不留情地将其视为错误。)
②如果初始化数组时省略方括号中的数字,编译器会根据初始化列表中的项数来确定数组的大小。
6.分类
①一维数组
②二维数组
③多维数组
7.一维数组的使用
㈠怎样定义一维数组(一维数组要满足的条件)
①为n个变量连续分配存储空间
②所有变量数据类型必须相同
③所有变量所占字节大小必须相同
㈡有关一维数组的操作
⑴初始化
①完全初始化
例:int a[5]={1,2,3,4,5};
②不完全初始化
例:int a[5]={1,2,3};
未初始化的元素自动为0
③不初始化
例:int a[5];
不初始化所有元素为垃圾值
④清零
例:int a[5]={0};
这时数组内所有元素全部为0
注意:如果初始化列表的项数多于数组元素个数,编译器会毫不留情地将其视为错误。
㈢一维数组错误示范
⑴ int a[5];
a[5]={1,2,3,4,5};
只有在定义数组的同时才能整体赋值
⑵ int a[5]={1,2,3,4,5};
a[5]=100;
没有a[5]这个元素,最大只有a[4]
⑶ int a[5]={1,2,3,4,5};
int b[5];
b=a;
一维数组名不代表数组中所有的元素,
一维数组名代表数组第一个元素的地址
正确写法:
for(i=0;i<5;++i)
b[i]=a[i];
㈣赋值
方法一:
int a[5]={1,2,3,4,5};
方法二:
int a[5];
a[0]=1;
a[1]=2;
……
a[4]=5;
方法三:
scanf("%d",&a[0]);
8.二维数组的使用
㈠格式举例
①int a[3][4];
该数组共十二个元素,可以当做三行四列来看待。这十二个元素的名字依次是:
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
②a[i][j]表示第i+1行第j+1列的元素
③int a[m][n];//该二维数组右下角的元素只能是a[m–1][n–1]
㈡初始化
方法一:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
方法二:
int a[3][4]={
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12}
};
㈢二维数组的输出(还是以上面程序为例)
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<4;++j)
printf("%d",a[i][j]);
printf("\n");
}
㈣代码举例
1 #include<stdio.h> 2 3 #define MONTHS 12 4 5 6 7 int main(void) 8 9 { 10 11 int jsl[3][MONTHS]={ 12 13 {1,2,3,4,5,1,3,5,3,5,9,1}, //假设此为第一年每月降水量 14 15 {1,3,5,1,3,2,3,8,9,1,4,7}, //假设此为第二年每月降水量 16 17 {9,5,3,2,9,1,3,7,9,1,2,3} //假设此为第三年每月降水量 18 19 }; 20 21 22 23 int i; //表示二维数组的行 24 25 int j; //表示二维数组的列 26 27 int sum=0; //用于求每年降水量的和 28 29 30 31 for(i=0;i<3;++i) 32 33 { 34 35 for(j=0;j<MONTHS;++j) 36 37 sum=sum+jsl[i][j]; 38 39 sum=sum/MONTHS; 40 41 printf("第%d年的平均降水量:%d\n",i+1,sum); 42 43 sum=0; 44 45 } 46 47 48 49 return 0; 50 51 }
9.多维数组
㈠是否存在多维数组
不存在,因为内存是线性一维的
㈡n维数组可以当做每个元素是n–1维数组的一维数组
例:
①int a[3][4];
该数组是含有3个元素的一维数组,
只不过每个元素都可以再分成4个小元素
②int a[3][4][5];
该数组是含有3个元素的一维数组,
只不过每个元素都是一个4行5列的二维数组