"); //-->
函数库
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 < MAX-x-1; y++)
if (a[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&Rint rand()- 产生一个0至32767之间的随机数。*/
{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; /* 填充数组元素 */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。这样做的原因,当您了解指针后会很清楚。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
一个dsk6711申请空间的问题
555组成带“看门狗\"的延时电路
美版苹果iPad 11搭载A16芯片:美国工厂生产 可减免关税
利用WinDriver开发PCI设备驱动程序
Keil MDK开发环境生成Bin格式文件全攻略
关于程序的优化,或提高运算速度的建议
连铸中间包等离子体加热装置控制系统
客户案例分享 | ATA-4014C高压功率放大器在电流传感器性能测试实验中的应用
利用PCI2040将TMS320VC5420桥接到PCI总线上
轻量级日志库 EasyLogger:为嵌入式开发量身打造的日志神器!
三菱FX系列PLC教程 18 —— FX系列的接点并联指令(OR、ORI)
程序进中断
光传感器
列车总线控制系统的CAN—485总线网关设计
外部扩展的RAM出了问题,求救
555声控继电器电路
三菱FX系列PLC教程 19 —— FX系列的取反指令(INV)
国芯科技:首颗RSIC-V架构车规MCU有望实现国产化替代
三菱FX系列PLC教程 21 —— FX系列的微分输出指令(PLS PLF)
555触模式开关电路
三菱FX系列PLC教程 17 —— FX系列的多重输出指令(MPS、MRD、MPP)
556组成的4h定时电路
三菱FX系列PLC教程 20 —— FX系列的取脉冲指令(LDP、LDF、ANDP、ANDF、ORP、ORF)
三星电子正开发下一代封装材料“玻璃中介层”:计划2027年量产
利用全局及外部变量实现C51无参数化调用A51函数
DeepSeek能否爆改EDA?那些改变的与不变的
美国欲对中国成熟制程芯片加征关税引热议:欧美企业感叹自作孽
如何利用4200A-SCS参数分析仪研究光伏材料和太阳能电池的电学特性
555D/A变换双相互补频率产生器电路
外部ram的读写