上一页 下一页

C 语言编程基础

库在 C 语言中非常重要,因为 C 语言只支持其所需的最基本功能。C 语言甚至不包含用于从键盘读取和向屏幕写入的 I/O 函数。任何超出基本语言范畴的功能都必须由程序员编写。生成的代码块通常放置在中,以便于重复使用。我们已经见过标准 I/O(即 stdio)库:标准库涵盖标准 I/O、数学函数、字符串处理、时间操作等等。您可以在自己的程序中使用库,将程序分解成模块。这使得它们更易于理解、测试和调试,也使得您可以重复利用自己编写的其他程序中的代码。

您可以轻松创建自己的库。例如,我们将从本系列之前的一篇文章中提取一些代码,并将其中的两个函数制作成一个库。这是我们将开始使用的代码

广告

#include <stdio.h>

#define MAX 10

int a[MAX];
int rand_seed=10;

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

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

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

    /* 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]);
}

这段代码用随机数填充数组,然后使用冒泡排序对其进行排序,最后显示排序后的列表。

获取冒泡排序代码,并使用您在上一篇文章中学到的知识,从中创建一个函数。由于数组 a 和常量 MAX 都是全局已知的,您创建的函数不需要任何参数,也不需要返回结果。但是,您应该为 x、y 和 t 使用局部变量。

一旦您测试了函数以确保其正常工作,请将元素数量作为参数传入,而不是使用 MAX

#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;
}

void bubble_sort(int m)
{
    int x,y,t;
     for (x=0; x < m-1; x++)
        for (y=0; y < m-x-1; y++)
            if (a[y] > a[y+1])
            {
                t=a[y];
                a[y]=a[y+1];
                a[y+1]=t;
            }
}

void main()
{
    int i,t,x,y;
    /* fill array */
    for (i=0; i < MAX; i++)
    {
        a[i]=rand();
        printf("%d\n",a[i]);
    }
    bubble_sort(MAX);
    /* print sorted array */
    printf("--------------------\n");
    for (i=0; i < MAX; i++)
        printf("%d\n",a[i]);
}

您还可以通过将 a 作为参数传入来进一步泛化 bubble_sort 函数

bubble_sort(int m, int a[])

这行代码表示:“接受任意大小的整数数组 a 作为参数。” bubble_sort 函数的主体不需要任何更改。要调用 bubble_sort,请将调用更改为

bubble_sort(MAX, a);

请注意,尽管排序会改变 a,但在函数调用中并未用到 &a。一旦您理解了指针,其原因就会变得清晰。