浪子荡秋千

数组

为什么需要数组

为了解决大量同类型数据的存储和使用问题

为了模拟现实世界 

 1 # include <stdio.h>
 2  3  int main()
 4  {
 5      int a[5] = {1, 2, 3, 4, 5};//a是数组的名字,5表示数组元素的个数,并且这5个元素分别用a[0] ,a[1],a[2],a[3],a[4]表示 
 6      int i;
 7      
 8      for(i=0; i<5; ++i)
 9          printf("%d\n",a[i]);//a[i]表示数组a中第i+1个元素
10          
11      printf("%d\n",a[100]);//数组a中没有第101个元素,所以输出的值为0,这是因为a[100]不属于数组a,使用了一个不属于它的空间,正好空间内有一个值,用十进制表示正好是0(或者是其它数字,编译器规定为0) 
12      
13      return 0;
14   } 
15  /*
16  在Dev-C++ 5.11中的输出结果是:
17  ================
18  1
19  2
20  3
21  4
22  5
23  0
24  ================
25  */ 

数组的分类

一维数组

怎样定义一维数组

  • 为n个变量连续分配存储空间

  • 所有的变量数据类型必须相同

  • 所有变量所占的字节大小必须相等

有关一维数组的操作

初始化
  • 完全初始化

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

     

  • 不完全初始化(未被初始化的元素自动为零)

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

     

  • 不初始化 (所有元素都是垃圾值)

    int a [5];

     

  • 清零

    int a [5] = {0};//数组a中5个元素都为0

     

  • 错误写法

    • int a[5];

      a[5] = {1, 2, 3, 4, 5};//这样写是错误的,因为a[5]只有在定义数组的时候表示定义了一个数组a,元素是5个,其它情况下a[5]只表示数组a中第6个元素

       

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

      a[5] =100;//因为数组a中没有a[5] 这个元素,最大是a[4]

       

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

      int b[5];

      如果要把a数组中的值全部复制给b数组,

      错误的写法:

      b = a;//错误,因为数组名a不代表数组a内的所有元素,而是代表数组a内第一个元素的地址

      正确的写法:

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

      b[i] = a[i];

       

赋值 
 1 # include <stdio.h>
 2  3  int main()
 4  {
 5      int a[5];
 6      int i;
 7      
 8      scanf("%d",&a[0]);
 9      printf("a[0]=%d\n",a[0]);
10      
11      scanf("%d",&a[3]);
12      printf("a[3]=%d\n",a[3]);
13      
14      for(i=0; i<5; ++i)
15          printf("%d\n",a[i]);
16      
17      return 0;
18  }
19  /*
20  在Dev-C++ 5.11中的输出结果是:
21  ================
22  1
23  a[0]=1
24  2
25  a[3]=2
26  1
27  0
28  34
29  2
30  44766064
31  ================
32  键盘输入1,2,输出结果如上所示,for循环输出之所以有垃圾值,是因为数组a未初始化,所以输出为垃圾值
33  */

排序

求最大值/最小值
倒置 
 1 # include <stdio.h>
 2  3  int main()
 4  {
 5      int a[8] = {1, 2, 3, 4, 5, 6, 7, 8}; 
 6      int i, j;
 7      int tem;
 8      
 9      i = 0;
10      j = 7;
11      while(i<j)
12      {
13          tem = a[j];
14          a[j] = a[i];
15          a[i] = tem;
16          
17          ++i;
18          j--;    
19      }
20      
21      for(i=0; i<8; ++i)
22          printf("%d\n",a[i]);
23          
24      return 0;
25   } 
26   /*
27  在Dev-C++ 5.11中的输出结果是:
28  ================
29  8
30  7
31  6
32  5
33  4
34  3
35  2
36  1
37  ================
38  */
查找
插入
删除

二维数组

int a[3] [4]

总共是12个元素,可以当做3行4列看待,这12个元素依次是

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 [3] [4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

int [3] [4] = {

{1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 11, 12}

};

操作

输出二维数组的内容 

 1 #include <stdio.h>
 2  3  int main()
 4  {
 5      int i, j;
 6      int a[3][4] = {
 7                      {1, 2, 3, 4},
 8                      {5, 6, 7, 8},
 9                      {9,10,11,12}
10      };
11      
12      for(i=0; i<3; ++i)
13      {
14          for(j=0; j<4; ++j)
15              printf("%-5d ",a[i][j]);//对了让打印数字对齐,在打印输出时,输出控制符设置为"%-5d ",其负号表示左对齐,5表示占5个光标的位置,空格表示输出后面加一个空格 
16          printf("\n");
17      }
18      
19      return 0;
20  }
21  /*
22  在Dev-C++ 5.11中的输出结果是:
23  ================
24  1     2     3     4
25  5     6     7     8
26  9     10    11    12
27  ================
28  */

对二维数组排序

求每一行的最大值

判断矩阵是否对称

矩阵的相

多维数组

是否存在多维数组

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

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

int [3] [4]

该数组是含有3个元素的一维数组,只不过每个元素都可以在分成4个小元素

int [3] [4] [5]

该数组是含有3个元素的一维数组,只不过每个元素都是4行5列的二维数组

posted on 2021-04-12 11:33  浪子荡秋千  阅读(91)  评论(0编辑  收藏  举报

导航