C语言之数组

[TOC]文章目录

目录

前言

一、数组

二、一维数组

·一维数组的初始化

·一维数组的引用

·一维数组的下标

·一维数组的输入输出

·一维数组的遍历

三、二维数组

·二维数组的存储

·二维数组的初始化

·二维数组的引用

·二维数组的输入输出

·二维数组的遍历

总结


前言

本篇主要是针对网上学习C语言的数组部分的总结。如何储存学生的成绩?一行文字?一个矩阵?这就用到了数组。在运用数组时,我们要分清是对整个数组进行操作,还是对数组中的单个元素进行操作。

一、数组

数组的概念:一组具有相同数据类型的数据的有序集合。

数组中数据的特点:具有相同的数据类型;使用过程中需要保留原始数据  

作用:数组是程序设计中最常用的数据结构,属于构造类型。它将相同类型的数据连续组合在一起,简化了命名和赋值过程。相较于单一的数据类型,能够更快更方便的处理更多的数据。

二、一维数组

一维数组的定义格式:类型说明符 数组名 [常量表达式] ;

说明:

  • 类型说明符:数组的类型。
  • 数组名命名规则和变量名相同,遵循标识符命名规则。
  • 常量表达式可以包括常量和符号常量,但不能包含变量。

      例如:int a[10];float b[10];char c[10];

      例如: #define N 10

                int  a[N];                //数组的大小a为符号常量,通过宏定义的方式来实现。

  • 常量表达式指明数组中元素的个数,必须大于零。
  • 数组名后是用方括号而不是圆括号。

在这里可以回答前言中的问题,如:

存储学生成绩用实型数组  float score[31];

存储一行文字用字符数组  char str[50];

存储一个矩阵用实型数组  float a[3][4];     //这为二维数组,文章下面会讲到

其中: score、str、a为数组名

            方括号内的数值为数组长度

            下标个数为数组维数

·一维数组的初始化

在数组定义时为数组元素赋初值称为数组初始化

1、在定义数组时对数组元素赋以初值。

      方法:将数组元素的初值依次放在一对花括号内。也可以单独赋值(繁琐)

      例如:int a[2];

                 a[0] =1;

                 a[1]=2;

             或   int a [10]={1,2,3,4,5,6,7,8,9,10};      //定义一个有十个元素的一维数组,花括号内的值为它的初值 。这些值按下标的顺序 存储形式如下:

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
12345678910

  2、可以只给一部分元素赋值,其他按零来处理。

       例如:int a [10]={0,1,2,3,4};    //表示只给前面5个元素赋初值,后5个元素值为0。

3、对全部数组元素赋初值时,可以不指定数组长度。

     例如:int a [5]={1,2,3,4,5};  也可以写成 int a [ ]={1,2,3,4,5};

               char name[ ]="Alan";  也可以写成char name[ ]={'A','l','a','n'};

4、一维数组赋初值的个数不能超过数组总元素的个数。

·一维数组的引用

C语言规定,只能引用单个数组元素,不能一次引用整个数组

数组元素的引用形式:     数组名[下标]

说明:

  • 下标是指在数组中第几个元素

        例如:a[3]就是数组中序号为3的元素,它和简单变量低位和作用相似。

  • 下标可以是整型常量、整型变量和整型表达式。

        例如:a[4]=a[o]+a[i+1];

  • 下标的值是数组元素序号,从0开始,到n-1结束。

        例如:int a[10];说明数组a有十个元素,分别为a[0],a[1],...,a[9]。

  • 注意区分数组定义和数组元素引用

       数组定义时有类型说明符

·一维数组的下标

数组的下标实际上是关于数组第一个元素的偏移量

比如,定义一个数组 a[5],它的第一个元素跟数组的第一个元素的偏移量为0.所以,数组的第一个元素应该是a[0]

数组的第二个元素跟数组的第一个元素偏移量为1,所以数组的第二个元素应该是a[1]

以此类推,数组的第五个元素与第一个元素的偏移量为4,所以数组a的第五个元素应该是a[4]

·一维数组的输入输出

可以对数组中任何一个元素进行单独的输入输出,每个元素等同于一个普通变量。

数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。

数组的输入

#include<stdio.h>
int main()
{
    int a[10];
    int i;
    for(i=0;i<10;i++)
        scanf("%d ",&a[i]);
    .......
    return 0;   
}

数组的输出

#include<stdio.h>
int main()
{
    int a[10];
    int i;
    for(i=0;i<10;i++)
       printf("%d“,a[i]);
    ......
    return 0;
}

·一维数组的遍历

将一维数组中的元素依次输出

#include<stdio.h>
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int i;
    for(i=0;i<10;i++)
    {
        printf(%d,a[i]);
    }
}

三、二维数组

二维数组的一般形式为: 类型说明符  数组名[常量表达式1][常量表达式2];

       其中:常量表达式1位行数;常量表达式2为列数。

注意:

  • 一对方括号内不能写两个下标
  • 数组元素个数必须是常量表达式,不能使用变量 

       例如: int i=4,j=5;

                   int a=[i][j];   //错误

  • 用于定义数组长度的常量表达式必须为大于零的正整数

对于二维数组的理解:

二维数组可被看作一种特殊的一维数组:它的元素又是一个一维数组。

例如, float a[3][4];可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组:

a[0]包含-----a[0][0]  a[0][1]  a[0][2]  a[0][3]

a[1]包含-----a[1][0]  a[1][1]  a[1][2]  a[1][3]

a[2]包含-----a[2][0]  a[2][1]  a[2][2]  a[2][3]

·二维数组的存储

C语言中,二维数组中元素在内存中排列顺序是按行存放的。

                                                     float a[3][4]
2000a[0][0]第一行元素
2004a[0][1]
2008a[0][2]
2012a[0][3]
2016a[1][0]第二行元素
2020a[1][1]
2024a[1][2]
2028a[1][3]
2032a[2][0]第三行元素
2036a[2][1]
2040a[2][2]
2044a[2][3]

注意:用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。

·二维数组的初始化

<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}};          //对应

1000
5000
9000

     也可以对各行中的某一元素赋初值。

      int a[3][4]={{1},{0,0,7},{0,0,0,12}};       //对应

1000
0070
00012

      还可以只对某几行元素赋初值。

      int a[3][4]={{1},{5,6}};         //对应

1000
5600
0000

<4>   如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};   

        它等价于:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};                                                                     //试想一下,如果是这个样子:int a[3][ ]={1,2,3,4,5,6,7,8,9,10,11,12};    因为没有规定列数,那么便可以第一行1个数,第2行8个数,第3行3个数,也是成立的。所以不可省略第二维的长度。

在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。

例如: int a[ ][4]={{1,2},{0,5,6},{0,0,11}};

·二维数组的引用

二维数组元素引用与一维数组元素引用一样,也要采用下标法

二维数组元素的引用形式:     数组名[下标1][下标2]

其中下标1和下标2可以是整型常量,整型变量和整型表达式。其编号从0开始。下标不要越界

 例如:若 int a[2*4][3*3],i=10;

          则使用 a[4][0],a[2][i-2]都是合法的

说明:数组名a代表的是数组a在内存中的首地址,可以用数组名a来代表数组元素a[0][0]的地址。

           数组名是常量,不可对它赋值。

·二维数组的输入输出

二维数组的输入输出:采用双重循环方式进行。

二维数组的输入

#include<stdio.h>
int main()
{
    int a[2][3],i,j;   //变量i控制行下标,变量j控制列下标
    for(i=0;i<2;i++)    //当i等于0时,内循环实现的是对数组中第一行元素赋初值;当i=1时,....
       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;
}

·二维数组的遍历

#include<stdio,h>
int main()
{
    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"); 
       }
       return 0;
}

总结

本篇主要针对一维数组和二维数组的知识点进行了总结。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值