库
库在 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。一旦您理解了指针,其原因就会变得清晰。