C语言_数组 笔记

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个元素的一维数组,

只不过每个元素都是一个45列的二维数组

猜你喜欢

转载自www.cnblogs.com/qinenxi/p/11107614.html