文档章节

第16章 C预处理器和C库 16.9 数学库

idreamo
 idreamo
发布于 2017/07/27 07:05
字数 525
阅读 13
收藏 0

数学库包含许多有用的数学函数。头文件math.h提供这些函数的函数声明或原型。

ANSI C 标准数学函数描述
原型 描述
double acos(double x) 返回余弦值为x的角度值
double asin(double x) 返回正弦值为x的角度值
double atan(double x) 返回正切值为x的角度值
double atan2(double y,double x) 返回正切值为y/x的角度值
double cos(double x) 返回x的余弦值,x的单位为弧度
double sin(double x) 返回x的正弦值,x的单位为弧度
double tan(double x) 返回x的正切值,x的单位为弧度
double exp(double x) 返回x的指数函数的值(e的x次方)
double log(double x) 返回x的自然对数值
double log10(double x) 返回x的以10为底的对数值
double pow(double x ,double y) 返回x的y次幂的值
double sqrt(double x) 返回x的平方根
double ceil(double x) 返回不小于x的最小整数值
double fabs(double x) 返回x的绝对值
double floor(double x) 返回不大于x的最大整数值

程序清单  16.13  rect_pol.c程序

/*rect_pol.c  --把直角坐标转换为极坐标*/

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

#define RAD_TO_DEG(180/(4*atan(1)))

typedef struct polar_v {
    double magnitude;
    double angle;
} POLAR_V;

typedef struct rect_v {
    double x;
    double y;
} RECT_V;

POLAR_V rect_to_polar(RECT_V);

int main(void)
{
    RECT_V input;
    POLAR_V result;

    puts("Enter x , y coordinates;enter q to quit: ");
    while(scanf("%lf %lf",&input.x,&input.y)==2)
    {
        result = rect_to_polar(input);
        printf("magnitude = %0.2f, angle = %0.2f\n",
                result.magnitude,result.angle);
    }
puts("Bye.");
return 0;
}

POLAR_V rect_to_polar(RECT_V rv)
{
    POLAR_V pv;
    pv.magnitude = sqrt(rv.x * rv.x + rv.y * rv.y);
    if(pv.magnitude == 0)
        pv.angle = 0.0;
    else 
        pv.angle = RAD_TO_DEG * atan2(rv.y,rv.x);
    return pv;
}

下面是一个运行示例:

Enter x , y coordinates; enter q to quit: 
10 10 
magnitude = 14.14, angle = 45.00
-12 -5
magnitude = 13.00, angle = -157.38
q
Bye.

如果在编译时得到类似下面的消息:

Undefined: _sqrt

'sqrt': unresolved external

或其他类似的消息,这表明编译器的链接器没有找到数学库。UNIX系统要求使用-lm标记以指示连接器搜索数学库:

cc rect_pol.c -lm

Linux 的gnu编译器也使用相同的形式:

gcc rect_pol.c -lm

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
29
0
[编程语言]C陷阱与缺陷

内容摘要 作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过...

21gprs
2014/05/23
0
0
#define 中的“ # 运算符”和“ ## 运算符”

利用宏参数创建字符串:# 运算符 在类函数宏(function-like macro)的替换部分中,“#”符号用作一个预处理运算符,它可以把语言符号(token)转化为字符串。例如,如果 x 是一个宏参量,那...

TMDJoJo
2012/07/07
0
0
简单而小型的单通道 C 编译器--SmallerC

SmallerC 是一个简单而小型的单程 C 编译器,目前支持 C89/ANSI C 和 C99 之间的大部分 C 语言(去掉了一些 C89 功能,加上一些 C99 功能) 目前,它为 NASM 生成 16 位和 32 位 80386+ 汇编...

匿名
2017/10/15
81
0
C Primer Plus 第12章 12.3 存储类和函数

函数也具有存储类。函数可以是外部的(默认情况下)或者静态的(C99增加了第三种可能性,即在第16章“C预处理器和C库"中将讨论的内联函数)。外部函数可以被其他文件中的函数调用,而静态函数...

idreamo
2016/11/19
15
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Aware 到底是什么?

通过如下前序两篇文章: Spring Bean 生命周期之“我从哪里来”? Spring Bean 生命周期之“我要到哪里去”? 我们了解了 Spring Bean 的生命周期核心内容,bean 是如何被初始化变为 Ready fo...

tan日拱一兵
32分钟前
4
0
Android 调用第三方浏览器打开网址或下载文件

/** * 调用第三方浏览器打开 * @param context * @param url 要浏览的资源地址 */ public static void openBrowser(Context context,String url){ final Intent intent = new Intent(); int......

丁佳辉
37分钟前
2
0
PostgreSQL系统表及其TOAST是如何定义的

本文只是讲PG怎样定义系统表,而不是修改系统表甚至是定义自己的系统表。 PG系统表,比如:pg_class、pg_attribute、pg_type 等等 这几个表相互关联,后两者要在pg_class记录自己的表定义,而...

有理想的猪
46分钟前
4
0
总结无线AP与AC之间的各种问题

无线网络搭建中,都说AP+AC的组网模式最现在最先进的,但是在使用过程中还是存在一些问题,下面这些有没有大家碰到的呢? 无线网络搭建中,都说AP+AC的组网模式最现在最先进的,但是在使用过程...

xiangyunyan
50分钟前
3
0
IT兄弟连 Java语法教程 流程控制语句 循环结构语句4

do-while循环 Java还有一种循环是do-while。与for、while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查。这意味着do-while循环至少要执行一次循环体。...

老码农的一亩三分地
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部