上一页 下一页

C语言编程基础

数组

在本节中,我们将创建一个小型 C 程序,它能生成 10 个随机数并对其进行排序。为此,我们将使用一种新的变量排列方式,称为数组

数组允许你声明并处理同一类型的多个值集合。例如,你可能想创建一个包含五个整数的集合。一种方法是直接声明五个整数

广告

int a, b, c, d, e;

这没问题,但如果你需要一千个整数呢?一个更简单的方法是声明一个包含五个整数的数组

int a[5];

此数组中的五个独立整数通过索引进行访问。在 C 语言中,所有数组都从索引零开始,到 n-1 结束。因此,int a[5]; 包含五个元素。例如

int a[5];

a[0] = 12;
a[1] = 9;
a[2] = 14;
a[3] = 5;
a[4] = 1;

数组索引的一个优点是你可以使用循环来操作索引。例如,以下代码将数组中的所有值初始化为 0

int a[5];
int i;

for (i=0; i<5; i++)
    a[i] = 0;

以下代码按顺序初始化数组中的值,然后将其打印出来

#include <stdio.h>

int main()
{
    int a[5];
    int i;

    for (i=0; i<5; i++)
        a[i] = i;
    for (i=0; i<5; i++)
        printf("a[%d] = %d\n", i, a[i]);
}

数组在 C 语言中一直被使用。要了解其常见用法,请启动编辑器并输入以下代码

#include <stdio.h>

#define MAX 10

int a[MAX];
int rand_seed=10;

/* from K&R
   - returns random number between 0 and 32767.*/
int rand()
{
    rand_seed = rand_seed * 1103515245 +12345;
    return (unsigned int)(rand_seed / 65536) % 32768;
}

int main()
{
    int i,t,x,y;

    /* fill array */
    for (i=0; i < MAX; i++)
    {
        a[i]=rand();
        printf("%d\n",a[i]);
    }

    /* more stuff will go here in a minute */

    return 0;
}

此代码包含几个新概念。#define 行声明了一个名为 MAX 的常量,并将其设置为 10。常量名称通常以全大写形式书写,以使其在代码中显而易见。行 int a[MAX]; 展示了如何在 C 语言中声明一个整数数组。请注意,由于数组声明的位置,它对整个程序是全局的。

int rand_seed=10 也声明了一个全局变量,这次名为 rand_seed,每次程序启动时都会将其初始化为 10。此值是后面随机数代码的起始种子。在真实的随机数生成器中,种子应初始化为一个随机值,例如系统时间。在这里,rand 函数每次运行程序时都会产生相同的值。

int rand() 是一个函数声明。rand 函数不接受任何参数并返回一个整数值。我们将在稍后学习更多关于函数的内容。接下来的四行实现了 rand 函数。我们现在将忽略它们。

main 函数是正常的。声明了四个局部整数,并使用 for 循环将数组填充了 10 个随机值。请注意,数组 a 包含 10 个独立整数。你可以使用方括号指向数组中的特定整数。因此,a[0] 指的是数组中的第一个整数,a[1] 指的是第二个,依此类推。以 /* 开头并以 */ 结尾的行称为注释。编译器完全忽略该行。你可以在注释中放置给自己或其他程序员的备注。

现在,将以下代码添加到 more stuff ... 注释的位置

/* bubble sort the array */
for (x=0; x < MAX-1; x++)
    for (y=0; y < MAX-x-1; y++)
        if (a[y] > a[y+1])
        {
            t=a[y];
            a[y]=a[y+1];
            a[y+1]=t;
        }
/* print sorted array */
printf("--------------------\n");
for (i=0; i < MAX; i++)
printf("%d\n",a[i]);

此代码会排序随机值并按排序顺序打印它们。每次运行它时,你都将获得相同的值。如果你想更改排序的值,请每次运行程序时更改 rand_seed 的值。

真正理解这段代码在做什么的唯一简单方法是“手动”执行它。也就是说,假设 MAX 为 4 以使其更易于管理,拿出一张纸,假装你是计算机。在纸上画出数组,并放入四个随机的、未排序的值。执行代码排序部分的每一行,并准确画出发生的情况。你会发现,每次内循环运行时,数组中较大的值会被推向数组底部,而较小的值会冒泡到顶部。