一维数组

1.一维数组的定义与引用

由于在编写程序的时候无法输入下表,所以在C语言中用数字加方括号表示下标。如下即是对一个一维数组的定义:

int  a[10];

它表示定义了一个一维数组,数组名为a,这个数组有10个整形元素。定义一个一维数组的一般形式为:

类型标识符  数组名[常量表达式]

需要注意的是,按照int a[10]定义后这个数组中有十个元素,从a[0]开始,到a[9]结束,并没有a[10]这个元素。“常量表达式”可以为常量与符号常量,如a[3 + 5],但不可以是a[n],也就是说,不允许对数组做动态定义。例如:

int  x;
scanf(“%d”,&x);
int  a[x];

这种定义在C语言中是不允许的。 经过int a[10]的定义,内存中为数组a划分出一片存储空间,这片存储空间是连续的,可以存放10个整形元素。定义10个元素的数组的时候相当于定义了10个整形变量,显然比章首提到的方法方便。 当我们想要使用数组中的元素时,可以用:

数组名[下标]

的形式来引用数组中的任意一个元素。例如我们想要对10个元素依次进行赋值,然后按倒序输出:

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

2.一维数组的初始化

在定义变量的同时,对数组元素赋值,称为数组的初始化。对一维数组初始化的方法有以下几种:

a.定义数组时给全部元素赋值

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

此外,由于给全部元素赋值时长度已经确定,可以不指定数组长度。上面的代码等价于下面这句代码:

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

使用这种方法定义数组时,需要格外注意的是数组名后面的一对方括号不能省略,方括号是数组的标识符。

b.定义数组时给部分元素赋值

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

这样的话,数组a前五个元素这样赋值,其余元素初值为0。

c.使数组元素全部为0

用下面的方法可以将数组元素全部赋初值为0:

int  a[10] = {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};

或者是:

int  a[10] = {0};

定义数组时应当指定数组长度并进行初始化,如果没有进行初始化,系统会自动将其初始化为0。如果是字符型数组则初始化为’\0’,如果是指针数组则初始化为NULL。

3.应用举例

将数组中的元素按顺序重新存放。 在这里介绍“起泡排序法”,这种方法的基本思路是,将相邻的两个数比较,将较小的数放在前面。例如有6个数字:9、8、5、4、2、0,要求按从小到大的顺序排好。最开始数字是这样排序的:

        9  8  5  4  2  0

我们第一趟将最顶端的数字9依次与后面的数字比较,比9大的放在右面,比9小的就与9交换位置。第一次~第六次的比较过程如下:(下划线表示交换位置)

        9  8  5  4  2  0
        8  9  5  4  2  0 
        8  5  9  4  2  0 
        8  5  4  9  2  0
        8  5  4  2  9  0
        8  5  4  2  0  9

可以看到,经过6次比较,原本在最顶端的数字9已经沉底,第二趟我们进行如下过程的比较:

        8  5  4  2  0  9
        5  8  4  2  0  9
        5  4  8  2  0  9
        5  4  2  8  0  9
        5  4  2  0  8  9

第二趟中,原本沉底的数字9是不动的,在9沉底后在顶端的数字8经过第二趟比较,也沉在了仅次于9的低端。以此来推,经过5趟比较,就可以将原本的6个数字按照升序排好。可以分析出来,当有n个数时,需要进行n – 1趟比较。上述算法我们称作“气泡排序法”,算法的程序如下:(假设有10个数据)

#include<stdio.h>
int  main()
{
    int  a[10];
    int  i , j , t;
    printf(“Input  10  numbers:\n”);
    for(i = 0 ; i < 10 ; i ++)
        scanf(“%d” , &a[i]);
    printf(“\n”);
    //起泡排序开始
    for(j = 0 ; j < 9 ; j ++)
        for(i = 0 ; i < 9 – j ; i ++)
        {
            t = a[i];
            a[i] = a[i + 1];
            a[i + 1] = t;
        }
    //起泡排序结束
    printf(“The sorted numbers are:\n”);
    for(i = 0 ; i < 10 ; i ++)
        printf(“%d\t” , a[i]);
    printf(“\n”);
    return  0;
}
这本书是xt写的上次修改: 2019-04-18 15:24:43

results matching ""

    No results matching ""