函数库
c语言本身具备最基本功能,所以c函数库就显得十分重要了。c语言本身甚至不提供从键盘读入和向屏幕输出的i/o函数。所有对基本语言功能的扩展都必须由程序员编写。由此而产生的大量代码常常组织在一些函数库中,以方便重复使用。我们前面已经用到标准i/o(stdio)函数库了。标准库包括标准i/o、数学函数、字符串处理、时间操作等等。您可以在自己的程序中使用函数库的概念将代码划分为多个模块。这样更有利于代码的理解、测试和调试,也使重复使用其他程序的代码成为可能。
创建自己的函数库很容易。作为例子,我们将使用本教程前文中的部分代码,用其中的两个函数创建一个函数库。我们从下面的代码开始:
#include
#define max 10
int a[max];
int rand_seed=10;
int rand()
/* 摘自 k&r - 产生一个0至32767之间的随机数。*/
{rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;}
void main()
{int i,t,x,y;/* 填充数组元素 */
for (i=0; i < max; i++)
{a[i]=rand();printf(%d\n,a[i]);}
/* 将数组用冒泡法排序 */
for (x=0; x < max-1; x++)
for (y=0; y a[y+1])
{t=a[y];a[y]=a[y+1];a[y+1]=t;}
/* 打印排序后的数组 */
printf(--------------------\n
);for (i=0; i < max; i++)
printf(%d\n,a[i]);}
这段代码先用随机数填充一个数组,然后用冒泡法对这些数排序,最后打印排序后的数组。
用您所学的知识,把冒泡排序的代码提出来建立一个函数。因为数组a和常数max都是全局的,所以您建立这个函数不需要参数,也不用返回结果。但是应该将x、y和t修改为局部变量。
经测试确认函数可以正常工作后,再将数组元素个数作为函数的参数传入而不使用max:
#include
#define max 10
int a[max];
int rand_seed=10;/* 摘自 k&r
- 产生一个0至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 a[y+1])
{t=a[y];a[y]=a[y+1];a[y+1]=t;}
}
void main()
{int i,t,x,y; /* 填充数组元素 */for (i=0; i < max; i++)
{a[i]=rand();printf(%d\n,a[i]);}bubble_sort(max);/* 打印排序后的数组 */
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。这样做的原因,当您了解指针后会很清楚。
印度两大顶级港口正寻求让特斯拉在当地建厂
5G产业发展现状与三种网络类型
新型环保导热塑料相对金属材料生产所消耗的能源更少!
采用S3C6410处理器及多种移动终端设计智能家居系统
东芝TransMemory USB3.0 U363闪存盘上市:全金属外壳一体成型,日常使用中更加便捷
C语言入门教程-函数库
简单易懂的图解方式来进一步阐述轮毂电机技术
光伏黑硅技术的概念
汽车电气化:你想要的功能安全电源管理产品,恩智浦准备好啦!
STM32:SPI总线、W25Q64(FLASH)的详细介绍
索尼PS5的最新信息曝光,其性能将远超PS4
连续周期信号的傅里叶分解
华为和柬埔寨就5G网络发展开展合作,助于柬埔寨改善电信基础设施
区块链有能力在无需可信第三方的情况下进行交易
2000元内高屏占比手机,荣耀X20 SE今日正式开售
一位网络工程师的从业经验
曝苹果计划9月7日举办秋季产品发布会
TI C2000微控制器的EtherCAT包如何为每个阶段提供支持
先进的电力线监测需要一个高性能,同时采样模数转换器-Adva
电力电子业突破技术瓶颈任重道远