C_数组 笔记

1.​数组由数据类型相同的一系列元素组成(单个的变量叫变量,数组中定义的多个变量叫元素)

需要使用数组时,通过声明数组告诉编译器数组中内含多少元素和这些元素的类型。编译器根据这些信息正确地创建数组。(普通变量可以使用的类型,数组元素都可以用)

 

2.格式举例

int  a[5]={1,2,3,4,5};

a是数组的名字,5指该数组有五个元素,并且这五个元素分别用a[0],a[1]…a[4]表示

 

3.代码举例

#include<stdio.h>

 

#define MONTHS 12

 

int main(void)

{

    int days[MONTHS]={31,28,31,30,31,30,31,31,30,31,30,31};

    int i;

    for(i=0;i<MONTHS;i++)

      printf("%2d 月有 %2d \n",i+1,days[i]);  //通过循环将数组依次输出

    return 0;

}

 

 

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]);

 

㈤一维数组程序举例

 1 //数组_倒置
 2 
 3 ​#include<stdio.h>
 4 
 5 int main(void)
 6 {
 7  int a[7]={1,2,3,4,5,6,7};
 8  
 9  int i;
10  int j=6;
11  int t;
12  
13  for(i=0;i<j;++i)
14  {
15   t=a[i];
16   a[i]=a[j];
17   a[j]=t;
18   
19   --j;
20  }

 

 

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");

}

㈣代码举例

#include<stdio.h>

#define MONTHS 12

 

int main(void)

{

    int jsl[3][MONTHS]={

    {1,2,3,4,5,1,3,5,3,5,9,1},    //假设此为第一年每月降水量

    {1,3,5,1,3,2,3,8,9,1,4,7},    //假设此为第二年每月降水量

    {9,5,3,2,9,1,3,7,9,1,2,3}    //假设此为第三年每月降水量

    };

    

    int i;   //表示二维数组的行

    int j;    //表示二维数组的列

    int sum=0;    //用于求每年降水量的和

 

    for(i=0;i<3;++i)

    {

        for(j=0;j<MONTHS;++j)

            sum=sum+jsl[i][j];

 

        sum=sum/MONTHS;

        printf("%d年的平均降水量:%d\n",i+1,sum);

        sum=0;  

    }

    

        return 0;

}

 

 

9.多维数组

㈠是否存在多维数组

不存在,因为内存是线性一维的

n维数组可以当做每个元素是n–1维数组的一维数组

例:

①int a[3][4];

该数组是含有3个元素的一维数组,

只不过每个元素都可以再分成4个小元素

②int a[3][4][5];

该数组是含有3个元素的一维数组,

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

posted @ 2019-06-29 19:24  Logic_Q  阅读(391)  评论(0)    收藏  举报