C语言标准库函数由15个头文件组成。
数学计算是计算机最擅长的运算,计算机大部分运算方法都是基于数学计算执行的。C语言提供了很多用于数学计算的库函数,合理利用这些库函数,将对程序的编写和运行起到事半功倍的作用。要使用这些函数,在程序文件头必须加入头文件包含#include<math.h>。
数学上,绝对值称为模,主要用于表示距离和数量的大小。绝对值的定义也存在于复数、有序数等数学计算领域。一个数的绝对值永远为非负。通常,数值x主要有两类表示绝对值的函数,分别是abs()和fabs()。
函数功能:用于求一个int型数值的绝对值
函数原型:int abs(int x);
说明:函数abs()的输入参数必须为int型,函数返回值为int型,因此必须使用int型变量作为接收返回值的数据。
函数功能:用于求一个double型数值的绝对值
函数原型:double fabs(double x);
说明:函数fabs()的输入参数必须是double型,函数返回值为double型。因此,必须使用double型变量作为接收返回值的数据。
函数功能:用于计算输入参数的平方根。
函数原型:double sqrt(double x);
说明:函数sqrt()的输入参数必须为double型,函数返回值为double型。因此,必须使用double型变量作为接收返回值的数据。另外,sqrt()函数的输入参数不允许为负值,若输入负值作为函数参数,将得不到正确的结果。因此,在调用函数前,应检查函数的输入参数。
函数功能:用于计算输入参数的次方结果
函数原型:double pow(double x,double y);
说明:函数pow()的输入参数必须为double型,函数返回值为double型。因此,必须使用double型变量作为接收返回值的数据。
指数函数和对数函数互为逆函数
功能:计算e的双精度实数x次幂
功能:计算以e为底的双精度实数x的对数ln(x)
功能:计算以10为底的双精度实数x的对数lg(x)
使用指数函数和对数函数时,e是自然对数的底,值是无理数2.718281828
三角函数常用正弦、余弦和正切函数等
功能:计算双精度实数x的正弦值
功能:计算双精度实数x的余弦值
功能:计算双精度实数x的正切值
功能:计算双精度实数x的反正弦值
功能:计算双精度实数x的反余弦值
功能:计算双精度实数x的反正切值
功能:计算双精度实数x的双曲正弦值
功能:计算双精度实数x的双曲余弦值
功能:计算双精度实数x的双曲正切值
要正确使用三角函数,需要注意参数范围:sin()和cos()函数的参数定义域为[-1,1];asin()函数的参数x的定义域为[-1.0,1.0],值域为[-π/2,+π/2];acos()函数的参数x的定义域为[-1.0,1.0],值域为[0,π];atan()函数值域为[-π/2,+π/2]。
取整函数用于获取实数的整数部分,取余函数用于获取实数的余数部分。
功能:计算不小于双精度实数x的最小整数。
功能:就算不大于双精度实数x的最大整数
功能:计算双精度实数x/y的余数,余数使用x的符号
功能:把x分解为整数和小数部分,x为双精度浮点数,ip为整数部分指针,返回结果为小数部分。
C语言中,字符串异常频繁,经常需要对字符串进行输入、输出、合并、修改、比较、转换等操作。为了高效、统一地进行字符串处理,C语言提供了丰富的字符串处理函数,使用这些函数大大减轻编程的负担。用于字符串处理的库函数,在使用之前应包含头文件string.h。
字符串长度函数的函数原型为:
int strlen(char *d)
其主要功能是计算字符串d的长度值,终止符(’\0’)不计入
功能:连接字符串s到字符串d,返回字符串d
功能:连接字符串s中至多n个字符到字符串d,返回字符串d
注:strncat()函数把s所指字符串的前n个字符添加到d结尾处(覆盖d结尾处的’\0’),并在字符串结尾处添加’\0’,s和d所指内存区域不可以重叠,且d必须有足够的空间来容纳s的字符串,最后返回指向d的指针。
字符串复制函数用于把一个字符串复制到另一个字符串中。
功能:复制字符串s到字符串d,返回字符串d
功能:复制字符串s中至多n个字符到字符串d;如果s小于n个字符,用’\0’补上,返回字符串d
功能:从s复制n个字符到d,返回字符串d
功能:和memcpy()相同,即使d和s部分相同也运行
注:strcpy()函数中的s和d所指内存区域不可以重叠,且d必须有足够的空间来容纳s的字符串,最后返回指向d的指针。
如果strcnpy()函数中s的前n个字节不含NULL字符,则结果不会以NULL结尾。如果s的长度小于n个字节,则以NULL填充d,直至复制完n个字节。s和d所指内存区域不可以重叠,且d必须有足够的空间来容纳s的字符串,最后返回指向d的指针。
字符串比较函数的功能是按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果,其函数原型如下:
strcmp(字符数组名1,字符数组名2)
其中,如果字符串1等于字符串2,则返回值为0;如果字符串1大于字符串2,则返回值为正数,如果字符串1小于字符串2,返回值为负数。
字符串查找函数用于在一个字符串中查找子串出现的位置。
功能:返回一个指向字符串d中字符c第一次出现的指针;或者如果没有找到c,则返回指向NULL的指针
功能:返回一个指向字符串d中字符s第一次出现的指针;或者如果没有找到s,则返回指向NULl的指针。
功能:返回一个指向d所指向的n个字符中c第一次出现的指针;或者如果没有找到c,则返回指向NULL的指针。
字符串填充函数用于快速为一个字符到一个字符串赋值
void memset(void *d;char c,int n)
功能:使用n个字符c填充void*类型变量d
转换函数主要用来把字符串转换为其它类型,而动态存储管理函数可以用来动态分配或者释放存储空间,这些函数的原型都包含在头文件stdlib.h里,使用这些函数时必须包含这个头文件。
1.int atoi(string)
功能:转换一个ACSCII字符串为一个整数,在第一个非整数字符处停止。
2.double atof(string)
功能:转换一个ACSCII字符串为一个双精度数,在第一个不能被解释为一个双精度数的字符处停止
3.string itoa(int ,char*,int)
功能:转换一个整数为一个ASCII字符串。为返回的字符串分配的空间必须足够大于被转换的数值。
功能:为一个大小为n的对象分配存储空间
功能:为n个对象的数组分配存储空间,每个的大小为n,初始化所有被分配的内存为0
功能:重新分配空间大小为n,内容保持与旧的相同,等于新的大小。
功能:释放指向的空间
尽管在实际中,malloc()和calloc()函数能够经常互换使用,还是更推荐使用malloc()函数,因为它在这个函数中的用途更普遍。在使用malloc()函数请求分配一个新的存储空间分配时,必须给函数提供一个 所需的存储数量的指示。这可以提供请求一个指定的字节数或者通过为一个特殊数据类型请求足够的空间来完成。
被malloc()函数分配的空间来自计算机空闲存储区,这个存储区形成在堆上,堆是由未分配的存储区组成的,这个存储区能够在程序执行时根据请求分配给一个程序。程序中如果使用了free()函数,可以把使用malloc()函数分配的存储区返回给这个堆。
为了提供访问这些位置的能力,malloc()函数返回已经被保存的第一个位置。当然,这个地址必须赋值给一个指针。通过malloc()函数返回一个指针,对创建数组或一组数据的结果是很有帮助的。需要注意,返回的指针类型是void类型,这样不管请求的数据类型是什么类型,返回的地址必须使用强制类型转换成希望得到的类型,这就需要使用强制类型转换。
需要注意,程序是在使用malloc()函数分配的存储空间后,检查空间是否被正常分配,确保正常执行了分配指令。如果此时分配失败,malloc()函数将返回NULL指针,程序中断执行。所以动态分配存储空间时,一定要检查返回值,这是非常重要的。
字符类型判断函数用于判断字符的类型,如是整数、字母还是标点符号等。
1.int isalnum(int c)
如果整数c是文字或者数字,返回非零,否则返回零
2.int isalpha(int c)
如果整数c是一个字母,返回非零,否则返回零
3.int iscntrl(int c)
如果整数c是一个控制符,返回非零,否则返回零
4.int isdigit(int c)
如果整数c是一个数字,返回非零,否则返回零
5.int isgraph(int c)
如果整数c是可打印的(排除空格),返回非零,否则返回零
6.int islower(int c)
如果整数c是小写字母,返回非零,否则返回零
7.int isprint(int c)
如果整数c是可打印的(包括空格),返回非零,否则返回零
8.int ispunct(int c)
如果整数c是可打印的(包括空格、字母或数字之外),返回非零,否则返回零
9.int isspace(int c)
如果整数c是一个空格,返回非零,否则返回零
10.int isupper(int c)
如果整数c是大写字母,返回非零,否则返回零
11.int isxidigit(int c)
如果整数c是十六进制数字,返回非零,否则返回零
(2)字符大小写转换函数
字符大小转换函数主要用于字母大小写互换
功能:转换整数c为小写字母。当c为大写字母时,则返回对应的小写字母,否则返回原来的值。
功能:转换整数c为大写字母。当c为小写英文字母时,则返回对应的大写字母,否则返回原来的值。
C语言的标准函数库提供有一个随机函数,即rand()函数,它返回[0,MAX]均匀分布的伪随机整数。rand()函数不接受参数,默认以1为种子(即起始值),它总是以相同的种子开始,所以形成的伪随机数列也相同,不是真正的随机。这是有意设计的,目的是为了便于程序的调试。
另一个函数是srand(),可以使用该函数指定不同的数(无符号整数)为种子。但是如果种子相同,那么伪随机数列也相同。有两种方法可以采用:一种是让用户输入种子,但效果不是很理想;另一种比较理想的采用变化的数,常用时间来作为随机数生成的种子。这样种子不同,产生的随机数也就不同。
rand()函数没有参数,它返回一个从0到最大值之间的随机数。例如要产生0~10的随机整数,可以表示为:int n=rand()%11;
要产生1~10,则是这样的:int n=1+rand()%10;
总的来说,要生成一个[a,b]范围内的一个随机整数,可以表示为:int n=a+rand()%(b-a+1)
srand()函数的参数是一个带NULL参数的time()函数。NULL参数使time()函数以秒为单位读取计算机内部时钟的时间,然后srand()函数使这个时间初始化,rand()函数设定随机函数范围,也就是常说的产生一个以当前时间开始的随机种子。
MAX为随机数范围的上限值,rand()%MAX产生的随机数范围是[0,MAX-1]。
C语言的标准库函数包括一系列日期和时间处理函数。
功能:将参数timeptr所指的它们结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
功能:将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回
功能:将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
功能:将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示,然后将结果由结构tm返回。
标准C语言允许主函数main()由或没有参数列表,所以可以在主函数中使用一个或多个参数,下面主函数的形式:
int main(int argc,char *argv[])
这是main()函数通常的写法,其中第一个函数argv是英文argument counter的简写,表示传递给主函数main()函数有多少个参数,第二个参数argv[]以字符串数组的形式接收真正的参数,它是英文argument valua的简写。
main()函数本身是索引为0的参数,所以argc至少为1.在控制台环境中,用户在程序路径和名称的后面输入参数,将传递给argv[1]、argv[2]等。
exit()函数表示结束程序,它的返回值将被忽略。如果使用exit()函数,需要包含stdlib.h头文件。函数原型为:void exit(int retval)
qsort()函数包含在stdlib.h头文件里面,此函数根据给出的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。使用qsort()函数必须自己写一个比较函数。
函数原型:void qsort(void *base,int n,int size,int (*fcmp)(const void *,const void *));