数组基础总结

这里写图片描述

数组总结

定义:数组是有序的并且具有相同类型的数据的集合。

一维数组的定义和引用

1. 一维数组的定义

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

int a[10];  //定义一个有10个整型元素的数组a
char c[200]; //定义一个有200个字符型元素的数组c
float f[5];  //定义一个有5个单精度浮点型元素的数组f

说明:
(1) 数组名的命名规则和变量名相同,遵循标识符命名规则。
(2) 在定义数组时,需要指定数组中的元素个数,即数组长度。例如,a[10],表示数组中有十个元素个数,注意,下标是从0开始的,这十个元素是:a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9],.请特别注意,按上面的定义,不存在数组元素 a[10]。
(3) 常量表达式中可以包括常量和符号常量,不能包含变量。
例如:下面这样定义数组是错误的:

int n;
scanf("%d",&n);
int a[n];

2. 一维数组的引用

数组必须先定义,然后使用。c语言规定只能逐个引用数组元素而不能一次引用整个数组。
数组元素的表示形式为
数组名[下标]
下标可以是整型常量或整型表达式。例如:
a[0] = a[5] + a[7] - a[2*3]
注意: 定义数组时用到的“数组名[常量表达式]” 和引用数组元素时用到的“数组名[下标]” 的区别,例如:

int a[10];  //定义数组长度为10
t = a[6];   //引用a数组中序号为6的元素。此时6不代表数组长度

数组元素的引用,例如:

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

运行结果如下:
9 8 7 6 5 4 3 2 1 0
程序使 a[0] ~ a[10] 的值为 0~9,然后按逆序输出。

3.一维数组初始化

对数组元素初始化可以用以下方法实现。
(1) 在定义数组时对数组元素赋予初值。例如:

int a[10]={0,1,2,3,4,5,6,7,8,9};

将数组元素的初值依次放在花括号内。
(2) 可以只给一部分元素赋值。例如:

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

定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋值,后面五个元素为0.
(3) 如果想使一个数组中全部元素值为0,可以写成:

int a[10]={0,0,0,0,0,0,0,0,0,0};
    或
int a[10]={0};
    不能写成
int a[10]={0*10};

(4) 由于数组元素已经确定,可以不指定数组长度。例如:

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

一维数组举例

#include<stdio.h>
int main()
{
    /*找出数组最小值和它所对应的下标*/
    int i;
    int a[5]={2,5,7,8,1};
    int min = 0;           //假设a[0]是最小值下标
    for(i=0;i<5;i++)
    {
        if(a[i]<a[min])    //如果a[i]比假设的最小值还小
        min = i;           //再假设a[i]是新的最小值
    }
    printf("最小值为:%d\n下标为:%d\n",a[min],i);
    return 0;
}

运行结果
这里写图片描述


二维数组的定义和引用

1.二维数组的定义

一般形式

类型说明符 数组名 [常量表达式][常量表达式];
例如:
float a[3][4] , b[5][10];
定义a为3*4(3行4列)的数组,b为5*10(5行10列)的数组。

2.二维数组的引用

引用二维数组的元素要指定两个下标,即行下标和列下标,形式为:
数组名[行下标][列下标]
二维数组的元素在内存中按行/列方式存放,即先存放第0行的元素,再存放第一行的元素……其中每一行的元素再按照列的顺序存放。

3.二维数组的初始化

在定义二维数组时,也可以对数组元素赋初值,二维数组的初始化两种方法
(1) 分行赋初值
类型名 数组名[行长度][列长度]

int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

初始化数组a,此时a数组中的各元素为:
1   2   3
4   5   6
7   8   9

也可以对部分元素初始化


    int b[3][3] = {{1,2,3},{},{4,5,6}}

省略的元素初值都为0.
(2)顺序赋初值

int a[3][3] = {1,2,3,4,5,6,7,8,9};
    等价于
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

如果支队部分元素赋初值,要注意初值表中数据的书写顺序。例如

int b[3][3] = {1,2,3,0,0,0,4,5,0};
    等价于
int b[3][3] = {{1,2,3},{},{4,5}};

由此可见,分行赋初值的方法直观,不易出错,是二维数组初始化最常用方法。

二维数组举例

#include<stdio.h>
int main()
{
    /*方阵转置*/
    int i,j,tmp;
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

    for(i = 0;i<3;i++)    //行列互换
    {
        for(j = 0;j<3;j++)
        {
            if(i<=j)
            {
            tmp = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = tmp;
            }
        }
    }
    for(i = 0;i<3;i++)    //按矩阵形式输出a
    {
        for(j = 0;j<3;j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

运行结果

这里写图片描述


这里写图片描述

阅读更多

没有更多推荐了,返回首页