c语言函数库
第五章(数学函数)
1.
abs、labs、fabs:求绝对值函数
2.
acos: 反余弦函数
3.
asin: 反正弦函数
4.
atan:反正切函数
5.
atan2:反正切函数
6.
ceil:向上舍入函数
7.
cos :余弦函数
8.
cosh: 双曲余弦函数
9.
div、ldiv:除法函数
10.
exp:求e的x次幂函数
11.
floor:向下舍入函数
12.
fmod:求模函数
13.
frexp:分解浮点数函数
14.
hypot:求直角三角形斜边长函数
15.
ldexp:装载浮点数函数
16.
log、log10:对数函数
17.
modf:分解双精度数函数
18.
pow、pow10:指数函数
19.
rand:产生随机整数函数
20.
sin:正弦函数
21.
sinh: 双曲正弦函数
22.
sqrt:开平方函数
23.
srand:设置随机时间的种子函数
24.
tan: 正切函数
25.
tanh:双曲正切函数
1. abs、labs、fabs:求绝对值函数
函数原型:int abs(int x);
long labs(long x);
double fabs(double x);
头文件:#include
是否是标准函数:是
函数功能:函数int abs(int x);是求整数x的绝对值;函数long labs(long n);是求长整型数x的绝对值;函数double fabs(double x); 是求浮点数x的绝对值。
返回值:返回计算结果。
例程如下: 计算整数的绝对值。
#include
int main(void)
{
int x = -56;
printf("number: %d absolute value: %d\n",x, abs(x));
return 0;
}
例程说明:
本例程通过abs函数计算出整型数-56的绝对值56,并在屏幕上显示结果。本例程的运行结果为:
number: -56 absolute value: 56
例程如下:计算长整数的绝对值。
#include
int main(void)
{
long x = -12345678L;
printf("number: %ld absolute value: %ld\n", x,labs(x));
return 0;
}
例程说明:
本例程通过labs函数计算出长整型数-12345678的绝对值12345678,并在屏幕上显示结果。本例程的运行结果为:
number: -12345678 absolute value: 12345678
例程如下:计算浮点数的绝对值。
#include
int main(void)
{
float x = -128.0;
printf("number: %f absolute value: %f\n", x, fabs(x));
return 0;
}
例程说明:
本例程通过fabs函数计算出浮点数-128.0的绝对值128.0,并在屏幕上显示结果。本例程的运行结果为:
number: -128.000000 absolute value: 128.000000
2. acos: 反余弦函数
函数原型:double acos(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的反余弦值,这里,x为弧度,x的定义域为[-1.0,1.0],arccosx的值域为[0,π]。
返回值:计算结果的双精度值。
例程如下: 求arccosx。
#include
#include
int main(void)
{
double result;
double x = 1.0;
result = acos(x);
printf("arccos %lf=%lf\n", x, result);
return 0;
}
例程说明:
本例程应用函数acos计算1.0的反余弦值,即:arccos1。返回计算结果的双精度值。本例程的运行结果是:
arccos 1.000000=0.000000
3. asin: 反正弦函数
函数原型:double asin(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的反正弦值,这里,x为弧度,x的定义域为[-1.0,1.0],arcsinx值域为[-π/2,+π/2]。
返回值:计算结果的双精度值。
例程如下:求arcsinx。
#include
#include
int main(void)
{
double result;
double x = 1.0;
result = asin(x);
printf("arcsin %lf is %lf\n", x, result);
return(0);
}
例程说明:
本例程应用函数asin计算1.0的反正弦值,即:arcsin1。返回计算结果的双精度值。本例程的运行结果是:
arcsin 1.000000 is 1.570796
4. atan:反正切函数
函数原型:double atan(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的反正切值,这里,x为弧度,x的定义域为(-∞,+∞),arctanx的值域为(-π/2,+π/2)。
返回值:计算结果的双精度值。
例程如下: 求arctanx。
#include
#include
int main(void)
{
double result;
double x = 1.0;
result = atan(x);
printf("arctan %lf = %lf\n", x, result);
return(0);
}
例程说明:
本例程应用函数atan计算1.0的反正切值,即:arctan1。并返回计算结果的双精度值。本例程的运行结果是:
arctan 1.000000 = 0.785398
5. atan2:反正切函数2
函数原型:double atan2(double y, double x);
头文件:#include
是否是标准函数:是
函数功能:求y/x的反正切值。
返回值:计算结果的双精度值。
例程如下: 求arctan(x/y)。
#include
#include
int main(void)
{
double result;
double x = 10.0, y = 5.0;
result = atan2(y, x);
printf("arctan%lf = %lf\n", (y / x), result);
return 0;
}
例程说明:
本例程应用函数atan2计算10.0/5.0的反正切值,即:arctan0.5。并返回计算结果的双精度值。本例程的运行结果是:
arctan0.500000 = 0.463648
6. ceil:向上舍入函数
函数原型:double ceil(double x);
头文件:#include
是否是标准函数:是
函数功能:将双精度数x向上舍入,即:取它的最大整数。例如:ceil(123.400000)=124.000000。
返回值:返回计算结果。
例程如下: 数值的向上舍入。
#include
#include
int main(void)
{
double num = 123.400000;
double up;
up = ceil(num);
printf("The original number %lf\n", num);
printf("The num rounded up %lf\n", up);
return 0;
}
例程说明:
本例程通过函数ceil将双精度数123.400000向上舍入,得到的结果为124.000000,并在屏幕上显示运算结果。本例程的运行结果为:
The original number 123.400000
The num rounded up 124.000000
7. cos :余弦函数
函数原型:double cos(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的余弦值,这里,x为弧度。
返回值:计算结果的双精度值。
例程如下: 求cosx。
#include
#include
int main(void)
{
double result;
double x = M_PI;
result = cos(x);
printf("cos(PI) is %lf\n", result);
return 0;
}
例程说明:
本例程应用cos函数计算π的余弦值,即:cosπ,再返回计算结果的双精度值。本例程的运行结果是:
cos(PI) is -1.000000
8. cosh: 双曲余弦函数
函数原型:dluble cosh(double x);
头文件:#include
是否是标准函数:是
函数功能:计算x的双曲余弦值。其中ch(x)=(ex+e-x)/2。
返回值:计算结果的双精度值。
例程如下: 求x的双曲余弦值ch(x)。
#include
#include
int main(void)
{
double result;
double x = 0.5;
result = cosh(x);
printf("ch(%lf) = %lf\n", x, result);
return 0;
}
例程说明:
本例程应用函数cosh计算0.5的双曲余弦值,即:ch(0.5),并返回计算结果的双精度值。本例程的运行结果是:
ch(0.500000) = 1.127626
9. div、ldiv:除法函数
函数原型:div_t div(int number, int denom);
ldiv_t ldiv(long lnumer, long ldenom);
头文件:#include
是否是标准函数:是
函数功能:函数div是将两个整数numbe和denom相除, 返回商和余数。函数ldiv是将两个长整数lnumbe和ldenom相除, 返回商和余数。
返回值:函数div返回div_t类型的值;函数ldiv返回ldiv_t类型的值。
例程如下:两整数相除,求其商和余数。
#include
#include
div_t x;
int main(void)
{
x = div(11,5);
printf("11 div 5 = %d remainder %d\n", x.quot, x.rem);
return 0;
}
例程说明:
本例程通过div函数将11和5相除,返回其商和余数。
注意:div函数并不是中的函数,而是中的函数。中包含存储分配函数和一些杂项函数。但由于div函数具有数学计算的功能,因此将其归类到数学函数中。
div_t是中定义的数据类型,它是一个结构体,定义如下:
typedef struct
{
int quot; /*商*/
int rem; /*余数*/
}div_t;
其中包含两个域:商和余数。div函数将两个整数相除, 返回一个div_t类型的值。
该函数的运行结果是:
11 div 2 = 5 remainder 1
例程如下:两长整数相除,求其商和余数。
#include
#include
ldiv_t lx;
int main(void)
{
lx = ldiv(200000L, 70000L);
printf("200000 div 70000 = %ld remainder %ld\n", lx.quot, lx.rem);
return 0;
}
例程说明:
本例程通过ldiv函数将长整数200000与70000相除,并返回其商和余数。
注意:同函数div一样,函数ldiv是中的函数。
ldiv_t是中定义的数据类型,它是一个结构体,定义如下:
typedef struct {
long quot;
long rem;
} ldiv_t;
其中包含两个域:商和余数。ldiv函数将两个长整数相除, 返回一个ldiv_t类型的值。
该函数的运行结果是:
200000 div 70000 = 2 remainder 60000
10. exp:求e的x次幂函数
函数原型:double exp(double x);
头文件:#include
是否是标准函数:是
函数功能:计算自然常数e的x幂。
返回值:返回计算结果的双精度值。
例程如下: 计算ex(说明:e=2.718281828...)。
#include
#include
int main(void)
{
double result;
double x = 3.0;
result = exp(x);
printf("'e' raised to the power of %lf (e ^ %lf) = %lf\n", x, x, result);
return 0;
}
例程说明:
本例程应用函数exp计算e3,该函数返回计算结果的双精度值。本例程的运行结果为:
'e' raised to the power of 3.000000 (e ^ 3.000000) = 20.085537
11. floor:向下舍入函数
函数原型:double floor(double x);
头文件:#include
是否是标准函数:是
函数功能:将双精度数x向下舍入,即:取它的最小整数。例如:floor(123.400000)=123.000000。
返回值:返回计算结果。
例程如下:数值的向下舍入。
#include
#include
int main(void)
{
double num = 123.400000;
double up;
up = floor(num);
printf("The original number %lf\n", num);
printf("The num rounded down %lf\n", up);
return 0;
}
例程说明:
本例程通过函数floor将双精度数123.400000向下舍入,得到的结果为123.000000,并在屏幕上显示运算结果。本例程的运行结果为:
The original number 123.400000
The num rounded down 123.000000
12. fmod:求模函数
函数原型:double fmod(double x, double y);
头文件:#include
是否是标准函数:是
函数功能:计算x对y的模, 即x/y的余数。
返回值:返回计算结果,即余数的双精度。
例程如下: 计算两数的余数。
#include
#include
int main(void)
{
float x,y;
x=12.580000;
y=2.600000;
printf("12.580000/2.600000: %f\n",fmod(x,y));
getchar();
return 0;
}
例程说明:
本例程通过函数fmod求双精度数12.580000和2.600000的模,其结果为:2.180000。
本例程的运行结果为:
12.580000/2.600000: 2.180000
13. frexp:分解浮点数函数
函数原型:double frexp(double val, int *exp);
头文件:#include
是否是标准函数:是
函数功能:把浮点数或双精度数val分解为数字部分(尾数部分)x和以2为底的指数部分n。即val=x*2n,其中n存放在exp指向的变量中。
返回值:返回尾数部分x的双精度值,且0.5≤x<1。
例程如下: 应用函数frexp分解浮点数。
#include
#include
int main(void)
{
float x;
int exp;
x=frexp(64.0,&exp);
printf("64.0=%.2f*2^%d",x,exp);
getchar();
return 0;
}
例程说明:
本例程通过函数frexp将浮点数64.0分解为尾数0.5和以2为底的指数7。该函数将指数7存放在变量exp 中,并返回一个双精度的尾数0.500000。本例程的运行结果为:
64.0=0.50*2^7
14. hypot:求直角三角形斜边长函数
函数原型:double hypot(double x, double y);
头文件:#include
是否是标准函数:是
函数功能:x,y为给定的直角三角形两直角边,求该直角三角形的斜边。
返回值:返回计算结果的双精度值。
例程如下: 根据两直角边求斜边的长。
#include
#include
int main(void)
{
double result;
double x = 3.0;
double y = 4.0;
result = hypot(x, y);
printf("The hypotenuse is: %lf\n", result);
return 0;
}
例程说明:
本例程中,已知两直角边长度:x = 3.0; y = 4.0,应用函数hypot求出其斜边长度。本例程的运行结果为:
The hypotenuse is: 5.000000
15. ldexp:装载浮点数函数
函数原型:double ldexp(double val, int exp);
头文件:#include
是否是标准函数:是
函数功能:功能与函数frexp相反,将给定的尾数,指数装载成相应的双精度数或浮点数。即计算val*2n,其中n为参数exp 的值。
返回值:返回val*2n的计算结果。
例程如下:应用函数frexp装载浮点数。
#include
#include
int main(void)
{
double value;
double x = 3.000000;
value = ldexp(x,3);
printf("The ldexp value is: %lf\n", value);
getchar();
return 0;
}
例程说明:
本例程通过函数ldexp将尾数3.000000与指数3装载成相应的双精度数。即:3.000000*23= 24.000000。该函数返回一个双精度数。本例程的运行结果为:
The ldexp value is: 24.000000
16. log、log10:对数函数
函数原型:double log(double x);
double log10(double x);
头文件:#include
是否是标准函数:是
函数功能:求对数。函数log是求以e为底的x的对数(自然对数)即:lnx;函数log10是求以10为底的x的对数,即:log10x。
返回值:返回计算结果的双精度值。
例程如下: 计算lnx。
#include
#include
int main(void)
{
double result;
double x = M_E;
result = log(x);
printf("The natural log of %lf is %lf\n", x, result);
return 0;
}
例程说明:
本例程应用函数log计算双精度数M_E的自然对数,其中M_E为中定义的常数#define M_E 2.71828182845904523536就等于e,因此,本例程的运行结果为:
The natural log of 2.718282 is 1.000000
例程如下: 计算log10x。
#include
#include
int main(void)
{
double result;
double x = 1000.0 ;
result = log10(x);
printf("The common log of %lf is %lf\n", x, result);
return 0;
}
例程说明:
本例程应用函数log10计算双精度数1000.0的以10为底的对数,该函数返回的结果仍是双精度数。本例程的运行结果为:
The common log of 1000.000000 is 3.000000
17. modf:分解双精度数函数
函数原型:double modf(double num, double *i);
头文件:#include
是否是标准函数:是
函数功能:把双精度数num分解为整数部分和小数部分,并把整数部分存到i指向的单元中。
返回值:返回num的小数部分的双精度值。
例程如下: 应用函数modf分解双精度数。
#include
#include
int main(void)
{
double fraction, integer;
double number = 12345.6789;
fraction = modf(number, &integer);
printf("The integer and the fraction of %lf are %lf and %lf\n",
number, integer, fraction);
return 0;
}
例程说明:
本例程将双精度数12345.6789分解为整数部分和小数部分,并将整数部分存入变量integer中,返回小数部分。最后在屏幕上显示结果。本例程的运行结果为:
The integer and the fraction of 12345.678900 are 12345.000000 and 0.678900
18. pow、pow10:指数函数
函数原型:double pow(double x, double y);
double pow10(int x);
头文件:#include
是否是标准函数:是
函数功能:指数函数。函数pow是求x的y次方;函数pow10相当于pow(10.0,x),是求10的x次方。
返回值:返回计算结果的双精度值。
例程如下: 计算xy 。
#include
#include
int main(void)
{
double x = 2.0, y = 10.0;
printf("The result of %lf raised to %lf is %lf\n", x, y, pow(x, y));
return 0;
}
例程说明:
本例程中,应用函数pow计算210,并将结果的双精度值返回。本例程的运行结果为:
The result of 2.000000 raised to 10.000000 is 1024.000000
例程如下: 计算10x。
#include
#include
int main(void)
{
double x = 2.0;
printf("The result of 10 raised to %lf is %lf\n", x, pow10(x));
return 0;
}
本例程中,应用函数pow10计算102,并将结果的双精度值返回。本例程的运行结果为:
The result of 10 raised to 2.000000 is 100.000000
19. rand:产生随机整数函数
函数原型:int rand(void);
头文件:#include
是否是标准函数:是
函数功能:产生-90到32767之间的随机整数。
返回值:产生的随机整数。
例程如下: 利用函数rand产生处于0~99之间的5个随机整数。
#include
#include
int main(void)
{
int i;
printf("Random numbers from 0 to 99\n");
for(i=0; i<5; i++)
printf("%d ", rand() % 100);
return 0;
}
例程说明:
循环地应用函数rand产生随机整数,并利用rand() % 100将范围控制在0~99之间。共产生5个0~99之间的随机整数。本例程的运行结果为:
Random numbers from 0 to 99
46 30 82 90 56
注意:rand不是中定义的函数,而是中定义的函数。因此要在源程序中包含头文件。
20. sin:正弦函数
函数原型:double sin(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的正弦值,这里,x为弧度。
返回值:计算结果的双精度值。
例程如下: 求sinx。
#include
#include
int main(void)
{
float x;
x=M_PI/2;
printf("sin(PI/2)=%f",sin(x));
getchar();
return 0;
}
例程说明:
本例程应用sin函数计算π/2的正弦值,即:sin(π/2)。返回计算结果的双精度值。
注意:M_PI是中定义的π值常量。本例程的运行结果为:
sin(PI/2)=1.00000
21. sinh: 双曲正弦函数
函数原型:double sinh(double x);
头文件:#include
是否是标准函数:是
函数功能:计算x的双曲正弦值。其中sh(x)=(ex-e-x)/2。
返回值:计算结果的双精度值。
例程如下: 求x的双曲正弦值sh(x)。
#include
#include
int main(void)
{
double result, x = 0.5;
result = sinh(x);
printf("sh( %lf )=%lf\n", x, result);
return 0;
}
例程说明:
本例程应用函数sinh计算0.5的双曲正弦值,即:sh(0.5),并返回计算结果的双精度值。本例程的运行结果是:
sh( 0.500000 )=0.521095
22. sqrt:开平方函数
函数原型:double sqrt(double x);
头文件:#include
是否是标准函数:是
函数功能:求双精度数x的算术平方根,这里,x≥0。
返回值:返回计算结果的双精度值。
例程如下: 计算双精度数的平方根。
#include
#include
int main(void)
{
double result,x = 4.0;
result = sqrt(x);
printf("The square root of %lf is %lf\n", x, result);
return 0;
}
例程说明:
本例程中,应用函数sqrt计算出4.0的平方根,并将结果的双精度值返回。本例程的运行结果为:
The square root of 4.000000 is 2.000000
23. srand:设置随机时间的种子函数
函数原型:int srand (unsigned int seed);
头文件:#include
是否是标准函数:是
函数功能:设置随机时间的种子,常与rand()结合使用。否则如果直接用rand函数产生随机数,每次运行程序的结果都相同。
返回值:
例程如下: 产生不同的随机整数序列。
#include
#include
#include
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Random numbers from 0 to 99\n");
for(i=0; i<5; i++)
printf("%d ", rand() % 100);
return 0;
}
例程说明:
(1)首先,程序应用函数time获取系统时间作为种子,并强制转换为unsigned型变量,作为函数srand的参数。
(2)再利用rand函数产生5个0~99之间的随机整数。这样,每次运行该程序,都以当时的系统时间作为随机时间的种子,产生的随机数就不会重复了。
注意:time_t是中定义的数据类型,用以描述时间。而函数time可以获取当前的系统时间。运行两次本例程,可得到两组不同的随机数序列:
Random numbers from 0 to 99
23 16 92 26 99
Random numbers from 0 to 99
60 72 77 40 45
24. tan: 正切函数
函数原型:double tan(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的正切值,这里,x为弧度,其中x≠k(π/2),k为整数。
返回值:计算结果的双精度值。
例程如下: 求tanx。
#include
#include
int main(void)
{
double result, x;
x = M_PI/4;
result = tan(x);
printf("tan (PI/4)=%lf\n", result);
return 0;
}
例程说明:
本例程应用tan函数计算π/4的正切值,即:tan(π/4)。并返回计算结果的双精度值。本例程的运行结果是:
tan (PI/4)=1.00000
25. tanh:双曲正切函数
函数原型:double tanh(double x);
头文件:#include
是否是标准函数:是
函数功能:求x的双曲正切值。其中th(x)=sh(x)/ch(x)= (ex-e-x)/ (ex+e-x)。
返回值:计算结果的双精度值。
例程如下: 求x的双曲正切值th(x)。
#include
#include
int main(void)
{
double result, x;
x = 0.5;
result = tanh(x);
printf("th(%lf) = %lf\n", x, result);
return 0;
}
例程说明:
本例程应用函数tanh计算0.5的双曲正切值,即:th(0.5),并返回计算结果的双精度值。本例程的运行结果是:
th(0.500000) = 0.462117