- 6.5.6 数学函数库
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
- include<math.h>//头文件
- include<stdio.h>
- include<reg51.h>
6.5.6 数学函数库
数学函数库提供了多个数学计算的函数,其原型声明包含在头文件math.h中,数学函数库的函数如表6.11所示。下面分别对这些函数进行介绍。
1.绝对值函数abs、cabs、fabs和labs
绝对值函数abs、cabs、fabs和labs的函数原型如下。
int abs(int val);
char cabs(char val);
float fabs(float val);
long labs(long val)
绝对值函数abs、cabs、fabs和labs分别用于计算整型、字符型、浮点型以及长整型数据的绝对值。程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
int a=-17;//声明并初始化变量
char b=-45;
float c=-14.26;
long d=-2345678;
//初始化串口
printf(“abs(%d)=%d\n”,a,abs(a));//调用abs函数
printf(“cabs(%bd)=%bd\n”,b,cabs(b));//调用cabs函数
printf(“fabs(%f)=%f\n”,c,fabs(c));//调用fabs函数
printf(“labs(%ld)=%ld\n”,d,labs(d));//调用labs函数
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
abs(-17)=17
cabs(-45)=45
fabs(-14.260000)=14.260000
labs(-2345678)=2345678
在该程序中,首先定义并初始化变量,接着分别调用abs、cabs、fabs和labs函数求绝对值,并使用printf函数输出结果。
2.指数函数exp
指数函数exp的函数原型如下。
float exp(float x);
指数函数exp用于计算并返回输出浮点数x的指数。程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
float x=1.5;//声明并初始化变量
//初始化串口
printf(“exp(%f)=%f\n”,x,exp(x));//调用exp函数
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
exp(1.500000)=4.481689
在该程序中,首先定义并初始化变量,接着调用exp函数求值,并打印输出结果。
3.对数函数log和log10
对数函数log和log10的函数原型如下。
float log(float x);
float log10(float x);
其中,log函数用于计算并返回浮点数x的自然对数(自然对数以e为底,e=2.718282),log10函数用于计算并返回浮点数x的以10为底的对数值。程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
float y=2.718282;
float z=100;
//初始化串口
printf(“log(%f)=%f\n”,y,log(y));//调用log函数
printf(“log10(%f)=%f\n”,z,log10(z));//调用log10函数
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
log(2.718282)=1.000000
log10(100.000000)=2.000000
在该程序中,首先定义并初始化变量,接着分别调用log和log10函数求值,并打印输出结果。
4.平方根函数sqrt
平方根函数sqrt的函数原型如下。
float sqrt(float x);
平方根函数sqrt用于计算并返回浮点数x的平方根。程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
float z=100;
//初始化串口
printf(“sqrt(%f)=%f\n”,z,sqrt(z));//调用sqrt函数
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
sqrt(100.000000)=10.000000
在该程序中,首先定义并初始化变量,接着调用aqrt函数求值,并打印输出结果。
5.三角函数
在C51语言中,各个三角函数的原型如下。
float cos(float x);
float sin(float x);
float tan(float x);
float acos(float x);
float asin(float x);
float atan(float x);
float atan2(float y,float x);
float cosh(float x);
float sinh(float x);
float tanh(float x);
三角函数用于计算数学中三角函数的值,介绍如下。
❑cos函数用于计算并返回余弦值,变量x的取值范围是-π/2~+π/2。
❑sin函数用于计算并返回正弦值,变量x的取值范围是-π/2~+π/2。
❑tan函数用于计算并返回正切值,变量x的取值范围是-π/2~+π/2。
❑acos函数用于计算并返回反余弦值,其值域为-π/2~+π/2。
❑asin函数用于计算并返回反正弦值,其值域为-π/2~+π/2。
❑atan函数用于计算并返回反正切值,其值域为-π/2~+π/2。
❑atan2函数用于计算并返回y/x的反正切值。
❑cosh函数用于计算并返回双曲余弦值。
❑sinh函数用于计算并返回双曲正弦值。
❑tanh函数用于计算并返回双曲正切值。
这些三角函数的用法类似,这里仅举其中几个进行说明,程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
const double PI=3.1415926;
void main(void)//主函数
{
float x=PI/4;//声明并初始化变量
float y=0.5;
float z=2;
//初始化串口
printf(“sin(%f)=%f\n”,x,sin(x));//调用sin函数
printf(“asin(%f)=%f\n”,y,asin(y));//调用asin函数
printf(“atan2(%f,%f)=%f\n”,y,z,atan2(y,z));//调用atan2函数
printf(“sinh(%f)=%f\n”,x,sinh(x));//调用sinh函数
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
sin(0.785398)=0.707107
asin(0.500000)=0.523599
atan2(0.500000,2.000000)=0.244979
sinh(0.785398)=0.868671
在该程序中,首先定义并初始化变量,接着分别调用sin、asin、atan2和sinh函数求值,并打印输出结果。
6.取整函数ceil和floor
取整函数ceil和floor的函数原型如下。
float ceil(float x);
float floor(float x);
取整函数用于取输入数据的整数。其中,ceil函数用于计算并返回一个不小于x的最小正整数,而floor函数用于计算并返回一个不大于x的最小正整数。最后的结果为浮点型数据。程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
float x=12.7;//声明并初始化变量
//初始化串口
printf(“ceil(%f)=%f\n”,x,ceil(x));//调用ceil函数取整
printf(“floor(%f)=%f\n”,x,floor(x));//调用floor函数取整
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
ceil(12.700000)=13.000000
floor(12.700000)=12.000000
在该程序中,首先定义并初始化变量,接着分别调用ceil和floor函数求值并打印输出结果。
7.浮点型分离函数modf
浮点型分离函数modf的函数原型如下。
float modf(float x,float*ip);
浮点型分离函数modf用于将浮点型数据x的整数和小数部分分开,整数部分放入*ip,小数部分作为返回值。分离后的整数部分和小数都含有与x相同的正负符号,程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
float x=-3.5,y,z;//声明变量
float y,z;//声明变量
//初始化串口
y=modf(x,&z);//调用modf函数
printf(“%f=%f+%f\n”,x,y,z);//输出结果
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
-3.500000=-0.500000+-3.000000
在该程序中,首先定义并初始化变量,接着调用modf函数求解该浮点型数据的整数和小数部分,并打印输出分离后的结果。
8.幂函数pow
幂函数pow函数的原型如下。
float pow(float x,floaty);
幂函数pow用于进行幂指数运算,该函数用于计算并返回xy的值。如果x不等于0而y=0,则返回1;如果x=0且y≤0或x<0且y不是整数时,返回NaN。程序示例如下。
include<math.h>//头文件
include<stdio.h>
include<reg51.h>
void main(void)//主函数
{
float x=2.0;//声明并初始化变量
float y=4.0;
//初始化串口
printf(“%f^%f=%f\n”,x,y,pow(x,y));//调用pow函数
x=-2;
y=0.12;
printf(“%f^%f=%f\n”,x,y,pow(x,y));//调用pow函数
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
2.000000^4.000000=16.000000
-2.000000^0.120000=NaN
在该程序中,首先定义并初始化变量,接着调用pow函数求解幂运算,并打印输出结果。最后,修改变量x和y的值,再次调用pow函数进行运算。