C 语言编程教程

C 语言首页

C 语言基础

C 语言概述 C 语言特性 C 语言发展历史 C 语言下载安装和环境配置 C 语言程序结构 C 语言 Hello World C 编译过程 C 注释 C 标记 C 关键字 C 标识符 C 用户输入 C 基本语法 C 数据类型 C 变量 C 整数提升 C 类型转换 C 类型转换 C 布尔值

C 语言中的常量和文字

C 常量 C 字面量 C 转义序列 C 格式说明符

C 语言中的运算符

C 运算符 C 算术运算符 C 关系运算符 C 逻辑运算符 C 位运算符 C 赋值运算符 C 一元运算符 C 递增和递减运算符 C 三元运算符 C sizeof 运算符 C 运算符优先级 C 其他运算符

C 语言中的决策

C 决策 C if 语句 C if...else 语句 C 嵌套 if 语句 C switch 语句 C 嵌套 switch 语句

C 语言中的循环

C 循环 C While 循环 C For 循环 C Do...while 循环 C 嵌套循环 C 无限循环 C Break 语句 C Continue 语句 C goto 语句

C 语言中的函数

C 函数 C Main 函数 C 按值调用函数 C 按引用调用函数 C 嵌套函数 C 可变参数函数 C 用户定义函数 C 回调函数 C return 语句 C 递归

C 语言中的作用域规则

C 作用域规则 C 静态变量 C 全局变量

C 语言中的数组

C 数组 C 数组的属性 C 多维数组 C 将数组传递给函数 C 从函数返回数组 C 可变长度数组

C 语言中的指针

C 指针 C 指针和数组 C 指针的应用 C 指针运算 C 指针数组 C 指向指针的指针 C 将指针传递给函数 C 从函数返回指针 C 函数指针 C 指向数组的指针 C 指向结构体的指针 C 指针链 C 指针 vs 数组 C 字符指针和函数 C NULL 指针 C void 指针 C 悬垂指针 C 解引用指针 C Near、Far 和 Huge 指针 C 指针数组的初始化 C 指针与多维数组

C 语言中的字符串

C 字符串 C 字符串数组 C 特殊字符

C 语言的结构体和联合

C 结构体 C 结构体和函数 C 结构体数组 C 自引用结构 C 查找表 C 点 (.) 运算符 C 枚举(或 enum) C 结构填充和打包 C 嵌套结构 C 匿名结构和联合 C 联合 C Bit 位字段 C Typedef

C 语言中的文件处理

C 输入和输出 C 文件 I/O(文件处理)

C 语言中的预处理器

C 预处理器 C #pragma 编译指示 C 预处理器操作符 C 宏 C 头文件

C 语言中的内存管理

C 内存管理 C 内存地址 C 存储类

C 其他主题

C 错误处理 C 可变参数 C 命令执行 C 数学函数 C static 静态关键字 C 随机数生成 C 命令行参数

C 语言编程资源

C 语言问题与解答答案 C 语言快速指南 C 语言速查表 C 语言实用资源 C 语言讨论


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
", x, sn);
   printf("cos(%f) : %f
", x, cs);
   printf("tan(%f) : %f
", x, tn);

   return(0);
}

输出

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

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

反三角函数

math.h 库还包含反三角函数,也称为弧函数或反三角函数。它们是基本三角函数的反函数。例如,asin(x) 等价于 $&bsol;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() 函数 返回区间 [-pi/2, +pi/2] 弧度内 x 的主反正切值。

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
", x, asn);
   printf("acos(%f) : %f in radians
", x, acs);
   printf("atan(%f) : %f in radians
", x, atn);

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

   printf("asin(%f) : %f in degrees
", x, asn);
   printf("acos(%f) : %f in degrees
", x, acs);
   printf("atan(%f) : %f in degrees
", 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

atan2() 函数根据两个值的符号,返回"y/x"的反正切值(以弧度为单位),以确定正确的象限。

double atan2(double y, double x)

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

示例 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
", 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
", x, sh);
   printf("The cosh(%f) = %lf
", x, ch);
   printf("The tanh(%f) = %lf
", 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
",x, e, e, ln);

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

   return(0);
}

输出

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

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

浮点函数

frexp() 和 ldexp() 函数用于浮点运算。

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
", x, fraction, e);

   return(0);
}

Output

运行代码并检查其输出 −

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
", x, n, ret);

   return(0);
}

Output

运行代码并检查其输出 −

0.650000 * 2^3 = 5.200000

幂函数和平方根函数

pow() 和 sqrt() 函数用于计算给定数字的幂和平方根。

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
", x, sqrt(x));
   printf("Square root of %lf is %lf
", x, pow(x, 0.5) );
   printf("%lf raised to power %lf
", 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、float 或 long double 值四舍五入为最接近的整数值。

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
", val1, ceil(val1));
   printf ("floor(%lf) = %.1lf
", val2, floor(val2));
   printf ("ceil(%lf) = %.1lf
", val3, ceil(val3));
   printf ("floor(%lf) = %.1lf
", val4, floor(val4));

   printf("round(%lf) = %.1lf
", 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() 函数

modf() 函数返回小数部分(小数点后的部分),并将整数部分设置为整数部分。

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
", intpart);
   printf("Fraction Part = %lf 
", fractpart);

   return(0);
}
输出

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

Integral part = 8.000000
Fraction Part = 0.123456

fmod() 函数

fmod() 函数返回 x 除以 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
", a, c, fmod(a,c));
   printf("Remainder of %f / %f is %lf
", a, b, fmod(a,b));

   return(0);
}
输出

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

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

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