首先,要先对库函数有一个基本的概念,什么是“库函数”。
【来自:百度百科】库函数(Library function)是将函数封装入库,供用户使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的。
这个概念很好理解,C语言的库函数给用户提供了极大的方便。接下来列举一下库函数的分类。
(1)I/O 函数。包括各种控制台I/O、缓冲型文件I/O和UNIX式非缓冲型文件I/O操作。
需要的包含文件:stdio.h
(2)字符串、内存和字符函数。包括对字符串进行各种操作和对字符进行操作的函数。
需要的包含文件:string.h、mem.h、ctype.h或string.h
(3)数学函数。包括各种常用的三角函数、双曲线函数、指数和对数函数等。
需要的包含文件:math.h
(4)时间、日期和与系统有关的函数。对时间、日期的操作和设置计算机系统状态等。
需要的包含文件:time.h
(5)动态存储分配。包括"申请分配"和"释放"内存空间的函数。
需要的包含文件:alloc.h或stdlib.h
(6)目录管理。包括磁盘目录建立、查询、改变等操作的函数。
(7)过程控制。包括最基本的过程控制函数。
(8)字符屏幕和图形功能。包括各种绘制点、线、圆、方和填色等的函数。
(9)其它函数。
初学者在编程过程中基本只涉及到前五种函数,以上库函数的9大分类也只做简单了解即可。
像stdio是一个I/O函数库,包含scanf、printf、getcher、putcher等函数一样,time函数库中也包含一些函数。例如:clock、time、ctime、gmttime、localtime、mktime、asctime、difftime、strftime等。以下是其功能的简单介绍。
clock: 获取程序开始执行后占用的处理器时间,返回值clock_t。
time:获取当前系统时间(UTC时间)的time_t值。
ctime:将time_t值转换为表示本地时间的字符串。
gmttime:将time_t值转换为表示GMT时间的字符串。
localtime:将time_t转换为表示本地时间的strunct tm结构。
mktime:将表示本地时间的struct tm转换为time_t。
asctime:将struct tm转换为字符串形式。
difftime:得到两个日历时之间的差值。
strftime:自定义把结构体tm的日期与时间信息转换为制定的格式。
想再深入了解这些函数功能的使用以及看一些例子可以搜索CSDN博主「大米粒ing」的文章进一步学习。文章链接:https://blog.csdn.net/chenyiming_1990/article/details/8682552
下面我将引入一个计算阶乘的程序展示time函数库中计时函数clock()的功能。
例题:输入正整数n,计算s=1!+2!+3!+......+n!的末了六位(不含前导0)。n≤10^6,n!表示n的阶乘并输出运行时间。
//摘自《算法竞赛 入门经典》(刘汝佳)
#include<stdio.h>
#include<time.h>
int main()
{
const int MOD=1000000;
int n,s=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int factorial=1;
for(int j=1;j<=i;j++)
{
factorial=factorial*j%MOD;
}
s=(s+factorial)%MOD;
}
printf("%d\n",s);
printf("Time used =%.2f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
本例答题很好理解。现在来解释一下涉及到time函数库函数的内容。
引用库函数time时,在程序开头写上引用库函数的声明#include<time.h>即可。
程序最后有printf("Time used =%.2f\n",(double)clock()/CLOCKS_PER_SEC);的语句。
clock()返回值clock_t就是long类型。本程序中使用的强制类型转换的操作。在clock前面加上(double)就将clock的返回转化为double类型,作用就是精确度变高了。
百度中有这样的解释:clock()返回的不是当前的UTC时间,而且返回当前程序占用的CPU时间,用clock()返回的值除于CLOCKS_PER_SEC常量可以得到当前程序的运行时间,单位是秒。CLOCKS_PER_SEC和操作系统相关,尽量不要使用clock()的返回值。
将这个程序放在编程环境中运行,出现两行数字,第一行是s值,第二行是程序运行时间。
程序运行时间的问题需要进一步解释:
输入“9”,按Enter键后能立马得到结果362880,但是输出的Time used不是0。原因在于键盘的输入时间也被计算在内,这是在程序启动之后在进行的。为避免输入数据的时间影响,下面我们介绍一种成为“管道”的小技巧:在Windows命令行下执行echo 20|abc,操作系统会自动把20输入,其中abc是程序名。Linux系统有其他输入方法(作者现在也不太明白)。这里留下一个可供后续继续学习的内容:命令行操作。(也是《算法竞赛 入门经典》一书中介绍的)欢迎读着来和作者共同学习,以及在后续的文章中作者也会更新有关命令行操作的知识内容。
读着可以尝试自己运行此程序并观察输出结果,也可以结合其他程序进一步加深对time库函数的理解。