C语言中的数学函数



C 数学函数

C语言提供各种函数来对数字执行数学运算,例如查找三角函数值、计算对数和指数、舍入数字等。要在C程序中使用这些**数学函数**,您需要包含math.h 头文件

我们将数学函数分为以下几类:

三角函数

math.h 库定义了函数sin()cos() 和 tan() - 返回相应的三角函数值,即给定角度的正弦、余弦和正切。

这些函数返回给定双精度类型(表示以弧度表示的角度)的相应比率。所有函数都返回双精度值。

double sin(double x)
double cos(double x)
double tan(double x)

对于所有上述函数,参数“x”都是以弧度表示的角度。

示例

以下示例演示了如何在C中使用三角函数:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main() {

   double x, sn, cs, tn, val;

   x = 45.0;
   val = PI / 180;

   sn = sin(x*val);
   cs = cos(x*val);
   tn = tan(x*val);

   printf("sin(%f) : %f\n", x, sn);
   printf("cos(%f) : %f\n", x, cs);
   printf("tan(%f) : %f\n", x, tn);

   return(0);
}

输出

运行此代码时,将产生以下输出:

sin(45.000000) : 0.707107
cos(45.000000) : 0.707107
tan(45.000000) : 1.000000

反三角函数

math.h 库还包括反三角函数,也称为反正弦函数或反三角函数。它们是基本三角函数的反函数。例如,asin(x) 等价于 $\mathrm{sin^{-1}(x)}$。其他反函数有 acos()、atan()atan2()

以下asin() 函数 返回“x”在区间 [-pi/2, +pi/2] 弧度内的反正弦值:

double asin(double x)

以下acos() 函数 返回“x”在区间 [0, pi] 弧度内的主值反余弦值:

double acos(double x)

以下atan() 函数 返回“x”在区间 [-pi/2, +pi/2] 弧度内的主值反正切值。

double atan(double x)

示例 1

以下示例演示了如何在C程序中使用反三角函数:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main() {

   double x, asn, acs, atn, val;

   x = 0.9;
   val = 180/PI;

   asn = asin(x);
   acs = acos(x);
   atn = atan(x);

   printf("asin(%f) : %f in radians\n", x, asn);
   printf("acos(%f) : %f in radians\n", x, acs);
   printf("atan(%f) : %f in radians\n", x, atn);

   asn = (asn * 180) / PI;
   acs = (acs * 180) / PI;
   atn = (atn * 180) / PI;

   printf("asin(%f) : %f in degrees\n", x, asn);
   printf("acos(%f) : %f in degrees\n", x, acs);
   printf("atan(%f) : %f in degrees\n", x, atn);

   return(0);
}

输出

运行此代码时,将产生以下输出:

asin(0.900000) : 1.119770 in radians
acos(0.900000) : 0.451027 in radians
atan(0.900000) : 0.732815 in radians
asin(0.900000) : 64.158067 in degrees
acos(0.900000) : 25.841933 in degrees
atan(0.900000) : 41.987213 in degrees

The atan2() function returns the arc tangent in radians of "y/x" based on the signs of both values to determine the correct quadrant.

double atan2(double y, double x)

此函数返回“y / x”在区间 [-pi, +pi] 弧度内的主值反正切值。

示例 2

请查看以下示例:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main() {

   double x, y, ret, val;

   x = -7.0;
   y = 7.0;
   val = 180.0 / PI;

   ret = atan2 (y,x) * val;
   printf("The arc tangent of x = %lf, y = %lf ", x, y);
   printf("is %lf degrees\n", ret);

   return(0);
}

输出

运行代码并检查其输出:

The arc tangent of x = -7.000000, y = 7.000000 is 135.000000 degrees

双曲函数

在数学中,双曲函数类似于三角函数,但使用双曲线而不是圆来定义。math.h 头文件提供sinh()cosh()tanh() 函数。

double sinh(double x)

此函数返回 x 的双曲正弦值。

double cosh(double x)

此函数返回 x 的双曲余弦值。

double tanh(double x)

此函数返回 x 的双曲正切值。

示例

以下示例演示了如何在C程序中使用双曲函数:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main() {

   double x,val, sh, ch, th;

   x = 45;
   val = PI/180.0 ;

   sh = sinh(x*val);
   ch = cosh(x*val);
   th = tanh(x*val);
   
   printf("The sinh(%f) = %lf\n", x, sh);
   printf("The cosh(%f) = %lf\n", x, ch);
   printf("The tanh(%f) = %lf\n", x, th);

   return(0);
}

输出

运行代码并检查其输出:

The sinh(45.000000) = 0.868671
The cosh(45.000000) = 1.324609
The tanh(45.000000) = 0.655794

指数和对数函数

"math.h" 库包含以下与指数和对数相关的函数:

exp() 函数:它返回 e 的 x 次幂的值。(e 的值 - 欧拉数 - 约为 2.718)

double exp(double x)

log() 函数:它返回“x”的自然对数(以 e 为底的对数)。

double log(double x)

请注意,对数函数等价于指数函数的反函数。

log10() 函数:它返回“x”的常用对数(以 10 为底的对数)。

double log10(double x)

示例

以下示例演示了如何在C程序中使用指数和对数函数:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main () {

   double x = 2;
   double e, ln, ls;
   e = exp(2);
   ln = log(e);
   printf("exp(%f): %f log(%f): %f\n",x, e, e, ln);

   ln = log(x);
   printf("log(%f): %f\n",x,ln);
   ls = log10(x);
   printf("log10(%f): %f\n",x,ls);

   return(0);
}

输出

运行此代码时,将产生以下输出:

exp(2.000000): 7.389056 log(7.389056): 2.000000
log(2.000000): 0.693147
log10(2.000000): 0.301030

浮点数函数

The frexp() and ldexp() functions are used for floating-point manipulation.

frexp() 函数

"math.h" 头文件还包含 frexp() 函数。它将浮点数分解为其有效数和指数。

double frexp(double x, int *exponent)

这里,“x”是要计算的浮点值,而“exponent”是指向 int 对象的指针,其中要存储指数的值。

此函数返回归一化分数。

示例

请查看以下示例:

#include <stdio.h>
#include <math.h>

int main () {

   double x = 1024, fraction;
   int e;

   fraction = frexp(x, &e);
   printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e);

   return(0);
}

输出

运行代码并检查其输出:

x = 1024.00 = 0.50 * 2^11

ldexp() 函数

ldexp() 函数将有效数和指数组合起来形成一个浮点数。其语法如下:

double ldexp(double x, int exponent)

这里,“x”是表示有效数的浮点值,“exponent”是指数的值。此函数返回 (x * 2 exp)

示例

以下示例演示了如何在C程序中使用此 ldexp() 函数:

#include <stdio.h>
#include <math.h>

int main () {

   double x, ret;
   int n;

   x = 0.65;
   n = 3;
   ret = ldexp(x ,n);
   printf("%f * 2 %d = %f\n", x, n, ret);

   return(0);
}

输出

运行代码并检查其输出:

0.650000 * 2^3 = 5.200000

幂和平方根函数

The pow() and sqrt() functions are used to calculate the power and square root of the given number.

pow() 函数

此函数返回 x 的 y 次幂,即 xy。

double pow(double x, double y)

sqrt() 函数

返回 x 的平方根。

double sqrt(double x)

sqrt(x) 函数返回的值与 pow(x, 0.5) 相同

示例

以下示例演示了如何在C程序中使用 pow() 和 sqrt() 函数:

#include <stdio.h>
#include <math.h>

int main() {

   double x = 9, y=2;

   printf("Square root of %lf is %lf\n", x, sqrt(x));
   printf("Square root of %lf is %lf\n", x, pow(x, 0.5) );
   printf("%lf raised to power %lf\n", x, pow(x, y));

   return(0);
}

输出

运行此代码时,将产生以下输出:

Square root of 9.000000 is 3.000000
Square root of 9.000000 is 3.000000
9.000000 raised to power 81.000000

舍入函数

math.h 库包含ceil()floor() 和 round() 函数,这些函数对给定的浮点数进行舍入。

ceil() 函数

它返回大于或等于 x 的最小整数。

double ceil(double x)

此函数返回不小于 x 的最小整数值。

floor() 函数

此函数返回小于或等于 x 的最大整数。

double floor(double x)

参数 x:这是浮点值。此函数返回不大于 x 的最大整数值。

round() 函数

此函数用于将作为参数传递给它的双精度、浮点或长双精度值舍入到最接近的整数值。

double round( double x )

返回值是以浮点数表示的最接近的整数。

示例

以下示例演示了如何在C程序中使用舍入函数:

#include <stdio.h>
#include <math.h>

int main() {

   float val1, val2, val3, val4;

   val1 = 1.2;
   val2 = 1.6;
   val3 = 2.8;
   val4 = -2.3;

   printf ("ceil(%lf) = %.1lf\n", val1, ceil(val1));
   printf ("floor(%lf) = %.1lf\n", val2, floor(val2));
   printf ("ceil(%lf) = %.1lf\n", val3, ceil(val3));
   printf ("floor(%lf) = %.1lf\n", val4, floor(val4));

   printf("round(%lf) = %.1lf\n", val1, round(val1));
   printf("round(%lf) = %.1lf", val4, round(val4));

   return(0);
}
输出

运行此代码时,将产生以下输出:

ceil(1.200000) = 2.0
floor(1.600000) = 1.0
ceil(2.800000) = 3.0
floor(-2.300000) = -3.0
round(1.200000) = 1.0
round(-2.300000) = -2.0

模函数

此类别中"math.h" 库包含以下函数

modf() 函数

The modf() function returns the fraction component (part after the decimal), and sets integer to the integer component.

double modf(double x, double *integer)

这里,“x”是浮点值,“integer”是指向一个对象的指针,其中存储整数部分。

此函数返回“x”的小数部分,符号相同。

示例

请查看以下示例:

#include <stdio.h>
#include <math.h>

int main () {

   double x, fractpart, intpart;

   x = 8.123456;
   fractpart = modf(x, &intpart);

   printf("Integral part = %lf\n", intpart);
   printf("Fraction Part = %lf \n", fractpart);

   return(0);
}
输出

运行此代码时,将产生以下输出:

Integral part = 8.000000
Fraction Part = 0.123456

fmod() 函数

The fmod() function returns the remainder of x divided by y.

double fmod(double x, double y)

这里,“x”是分子,“y”是分母。该函数返回“x / y”的余数。

示例

请查看以下示例:

#include <stdio.h>
#include <math.h>

int main () {

   float a, b;
   int c;
   a = 9.2;
   b = 3.7;
   c = 2;
   
   printf("Remainder of %f / %d is %lf\n", a, c, fmod(a,c));
   printf("Remainder of %f / %f is %lf\n", a, b, fmod(a,b));

   return(0);
}
输出

运行此代码时,将产生以下输出:

Remainder of 9.200000 / 2 is 1.200000
Remainder of 9.200000 / 3.700000 is 1.800000

请注意,模运算符 (%) 仅适用于整数操作数。

广告