Unix/Linux环境C编程入门教程(31) 数学函数带你战胜企业面试
1.函数介绍:
abs()acos()asin()atan()atan2()ceil()cos()cosh()exp()frexp()ldexp()log()log10()pow()sin()sinh()sqrt()tan()tanh()
|
|
|
|
abs(计算整型数的绝对值) |
|
|
相关函数 |
labs, fabs |
|
表头文件 |
#include<stdlib.h> |
|
定义函数 |
int abs (int j) |
|
函数说明 |
abs()用来计算参数j的绝对值,然后将结果返回。 |
|
返回值 |
返回参数j的绝对值结果。 |
|
范例 |
#ingclude <stdlib.h> |
|
执行 |
|-12| = 12 |
|
|
|
|
acos(取反余弦函数数值) |
|
|
相关函数 |
asin , atan , atan2 , cos , sin , tan |
|
表头文件 |
#include <math.h> |
|
定义函数 |
double acos (double x); |
|
函数说明 |
acos()用来计算参数x的反余弦值,然后将结果返回。参数x范围为-1至1之间,超过此范围则会失败。 |
|
返回值 |
返回0至PI之间的计算结果,单位为弧度,在函数库中角度均以弧度来表示。 |
|
错误代码 |
EDOM参数x超出范围。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include <math.h> |
|
执行 |
angle = 1.047198 |
|
|
|
|
asin(取反正弦函数值) |
|
|
相关函数 |
acos , atan , atan2 , cos , sin , tan |
|
表头文件 |
#include <math.h> |
|
定义函数 |
double asin (double x) |
|
函数说明 |
asin()用来计算参数x的反正弦值,然后将结果返回。参数x范围为-1至1之间,超过此范围则会失败。 |
|
返回值 |
返回-PI/2之PI/2之间的计算结果。 |
|
错误代码 |
EDOM参数x超出范围 |
|
附加说明 |
使用GCC编译时请加入-lm |
|
范例 |
#include<math.h> |
|
执行 |
angle = 0.523599 |
|
|
|
|
atan(取反正切函数值) |
|
|
相关函数 |
acos,asin,atan2,cos,sin,tan |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double atan(double x); |
|
函数说明 |
atan()用来计算参数x的反正切值,然后将结果返回。 |
|
返回值 |
返回-PI/2至PI/2之间的计算结果。 |
|
附加说明 |
使用GCC编译时请加入-lm |
|
范例 |
#include<math.h> |
|
执行 |
angle = 1.570796 |
|
|
|
|
atan2(取得反正切函数值) |
|
|
相关函数 |
acos,asin,atan,cos,sin,tan |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double atan2(double y,double x); |
|
函数说明 |
atan2()用来计算参数y/x的反正切值,然后将结果返回。 |
|
返回值 |
返回-PI/2 至PI/2 之间的计算结果。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
angle = 0.463648 |
|
|
|
|
ceil(取不小于参数的最小整型数) |
|
|
相关函数 |
fabs |
|
表头文件 |
#include <math.h> |
|
定义函数 |
double ceil (double x); |
|
函数说明 |
ceil()会返回不小于参数x的最小整数值,结果以double形态返回。 |
|
返回值 |
返回不小于参数x的最小整数值。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
4.800000=>5.000000 |
|
|
|
|
cos(取余玄函数值) |
|
|
相关函数 |
acos,asin,atan,atan2,sin,tan |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double cos(double x); |
|
函数说明 |
cos()用来计算参数x 的余玄值,然后将结果返回。 |
|
返回值 |
返回-1至1之间的计算结果。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
cos(0.5) = 0.877583 |
|
|
|
|
cosh(取双曲线余玄函数值) |
|
|
相关函数 |
sinh,tanh |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double cosh(double x); |
|
函数说明 |
cosh()用来计算参数x的双曲线余玄值,然后将结果返回。数学定义式为:(exp(x)+exp(-x))/2。 |
|
返回值 |
返回参数x的双曲线余玄值。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
cosh(0.5) = 1.127626 |
|
|
|
|
exp(计算指数) |
|
|
相关函数 |
log,log10,pow |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double exp(double x); |
|
函数说明 |
exp()用来计算以e为底的x次方值,即ex值,然后将结果返回。 |
|
返回值 |
返回e的x次方计算结果。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
e^10 = 22026.465795 |
|
|
|
|
frexp(将浮点型数分为底数与指数) |
|
|
相关函数 |
ldexp,modf |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double frexp( double x, int *exp); |
|
函数说明 |
frexp()用来将参数x 的浮点型数切割成底数和指数。底数部分直接返回,指数部分则借参数exp 指针返回,将返回值乘以2 的exp次方即为x的值。 |
|
返回值 |
返回参数x的底数部分,指数部分则存于exp指针所指的地址。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include <math.h> |
|
执行 |
exp = 11 |
|
|
|
|
ldexp(计算2的次方值) |
|
|
相关函数 |
frexp |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double ldexp(double x,int exp); |
|
函数说明 |
ldexp()用来将参数x乘上2的exp次方值,即x*2exp。 |
|
返回值 |
返回计算结果。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例: |
/* 计算3*(2^2)=12 */ |
|
执行 |
3*2^(2) = 12.000000 |
|
|
|
|
log(计算以e 为底的对数值) |
|
|
相关函数 |
exp,log10,pow |
|
表头文件 |
#include <math.h> |
|
定义函数 |
double log (double x); |
|
函数说明 |
log()用来计算以e为底的x 对数值,然后将结果返回。 |
|
返回值 |
返回参数x的自然对数值。 |
|
错误代码 |
EDOM 参数x为负数,ERANGE 参数x为零值,零的对数值无定义。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
log(100) = 4.605170 |
|
|
|
|
log10(计算以10 为底的对数值) |
|
|
相关函数 |
exp,log,pow |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double log10(double x); |
|
函数说明 |
log10()用来计算以10为底的x对数值,然后将结果返回。 |
|
返回值 |
返回参数x以10为底的对数值。 |
|
错误代码 |
EDOM参数x为负数。RANGE参数x为零值,零的对数值无定义。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
log10(100) = 2.000000 |
|
|
|
|
pow(计算次方值) |
|
|
相关函数 |
exp,log,log10 |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double pow(double x,double y); |
|
函数说明 |
pow()用来计算以x为底的y次方值,即xy值,然后将结果返回。 |
|
返回值 |
返回x的y次方计算结果。 |
|
错误代码 |
EDOM 参数x为负数且参数y不是整数。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include <math.h> |
|
执行 |
2^10 = 1024.000000 |
|
|
|
|
sin(取正玄函数值) |
|
|
相关函数 |
acos,asin,atan,atan2,cos,tan |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double sin(double x); |
|
函数说明 |
sin()用来计算参数x的正玄值,然后将结果返回。 |
|
返回值 |
返回-1 至1之间的计算结果。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
sin(0.5) = 0.479426 |
|
|
|
|
sinh(取双曲线正玄函数值) |
|
|
相关函数 |
cosh,tanh |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double sinh( double x); |
|
函数说明 |
sinh()用来计算参数x的双曲线正玄值,然后将结果返回。数学定义式为:(exp(x)-exp(-x))/2。 |
|
返回值 |
返回参数x的双曲线正玄值。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
sinh(0.5) = 0.521095 |
|
|
|
|
sqrt(计算平方根值) |
|
|
相关函数 |
hypotq |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double sqrt(double x); |
|
函数说明 |
sqrt()用来计算参数x的平方根,然后将结果返回。参数x必须为正数。 |
|
返回值 |
返回参数x的平方根值。 |
|
错误代码 |
EDOM 参数x为负数。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
/* 计算200的平方根值*/ |
|
执行 |
answer is 14.142136 |
|
|
|
|
tan(取正切函数值) |
|
|
相关函数 |
atan,atan2,cos,sin |
|
表头文件 |
#include <math.h> |
|
定义函数 |
double tan(double x); |
|
函数说明 |
tan()用来计算参数x的正切值,然后将结果返回。 |
|
返回值 |
返回参数x的正切值。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
tan(0.5) = 0.546302 |
|
|
|
|
tanh(取双曲线正切函数值) |
|
|
相关函数 |
cosh,sinh |
|
表头文件 |
#include<math.h> |
|
定义函数 |
double tanh(double x); |
|
函数说明 |
tanh()用来计算参数x的双曲线正切值,然后将结果返回。数学定义式为:sinh(x)/cosh(x)。 |
|
返回值 |
返回参数x的双曲线正切值。 |
|
附加说明 |
使用GCC编译时请加入-lm。 |
|
范例 |
#include<math.h> |
|
执行 |
tanh(0.5) = 0.462117 |
|
|
2.企业面试实战演练
题目如下:
现有1个点和10000个位置半径各不同的圆,为了判断改点被包含在哪些圆内,需要一个函数判断点(px,py)是否于圆心(x,y)半径r的圆内,请尽快优化运行速度。
函数原型:
bool IsPointInCircle(int px,int py,int x,int y,int r);
流程设计如下:
采用模块化的设计思想,我们创建1个函数
int CreateCircle(int n);
CreateCircle函数功能就是接受参数n并创建n个圆圈,圆心坐标随机产生,半径也随机产生
将创建好的圆圈与点(px,py)进行游戏中的 "碰撞检测"
我们加上本专题的第一篇博客测试程序运行时间。经过本人测试发现10000个圆圈根本就测试不出时间,所以我们在项目中改成了1000,000个圆圈。
另外C语言中没有内建类型bool 所以我们需要换成int
项目实现
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
int CreateCircle(int n,int px,int py);
int IsPointInCircle(int px,int py,int x,int y,int r);
clock_t t;
printf ("Begin clock...\n");
t = clock();//第一个clock() t表示从程序启动到现在这个时刻的时间
CreateCircle(1000000,50,25);
t = clock() - t;//第二次调用clock()减去第一次获得的t的差值为两次掐表的间隔
printf ("\nIt took %d clicks (%f seconds) to test.\n",t,((float)t)/CLOCKS_PER_SEC);
return 0;
}
int IsPointInCircle(int px,int py,int x,int y,int r)
{
double distance = sqrt(pow(py-y,2)+pow(px-x,2));
if(distance -r >0.00001) //减去double类型的误差 再比较大小
return 0; //返回0 便是不在圆内
else
return 1; //返回1 在圆内
}
int CreateCircle(int n,int px,int py)
{
int r ; //r用来缓冲临时产生圆圈的半径
int x; //x用来缓冲临时产生圆圈的圆心横坐标
int y; //y用来缓冲临时产生圆圈的圆心纵坐标
int iCount = 0; //计数产生圆圈的个数
srand(time(NULL)); //初始化随即种子
while(iCount < n)
{
x = rand()%1000; // rand()函数就是返回一个随机数
y = rand()%1000;
r = rand()%100;
if(IsPointInCircle(px,py,x,y,r)) //如果在圆内
printf("%din",iCount); //打印出他在圆内
++iCount;
}
}
3.在各个平台的运行的情况
在RHEL7上
在REHL6上
在Solaris11上
在MAC上
Unix/Linux环境C编程入门教程(31) 数学函数带你战胜企业面试的更多相关文章
- Unix/Linux环境C编程入门教程(32) 环境变量那些事儿
1. getenv() putenv()setenv()函数介绍 getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdli ...
- Unix/Linux环境C编程入门教程(19)Red Hat Entetprise Linux 7.0环境搭建
位架构,包括英特尔X-86_64.Power和s390.动态定时能力将降低内核内部中断数量,Open vSwitch 2.0功能可调节虚拟机之间的流量.RHEL 7中默认的文件系统是XFS,包含了一个 ...
- Unix/Linux环境C编程入门教程(5) Red Hat Enterprise Linux(RHEL)环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out执行出结果,证明C++程序编译成功,也就说明li ...
- Unix/Linux环境C编程入门教程(4) Debian Linux环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 1.广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品,由于Deb ...
- Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 2010年9月,Oracle Enterprise Linux发布新版内核--Un ...
- Unix/Linux环境C编程入门教程(2) CentOS环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 本文就带大家来安装CentOS并且配置好C/C++开发环境,这是一款Linux. ...
- Unix/Linux环境C编程入门教程(1) Solaris 11 64bit环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 本文就带大家来安装Solaris 11 64位并且配置好C/C++开发环境 本文所 ...
- Unix/Linux环境C编程入门教程(22) C/C++如何获取程序的运行时间
1.问:知道程序运行时间我们可以做什么? 在<C++应用程序性能优化>一书中,如果大家读过相信大家一定对性能优化这一块非常上心,文中总是对优化前后的时间对比非常直观给我们一个感受. 那么我 ...
- Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
Unix/Linux家族人员众多,我们无法一一讲解如何配置环境. 本文选定我们在前面安装的RHEL6 RHEL7 MAC10.9.3 Solaris11如何跑起来helloworld RHEL 6 上 ...
随机推荐
- Windows通用应用平台
什么是 UWP? 很多程序员都有一个梦想:希望自己开发的软件能够轻而易举的在所有平台上运行,而不是把同样的需求,用不同的技术.工具重新开发才能够运行在所有平台上.这就是跨平台,很多软件从业者都在为这个 ...
- 【剑指offer】面试题34:丑数
题目: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路: 第一 ...
- 【HDU2122】Ice_cream’s world III(MST基础题)
2坑,3次WA. 1.判断重边取小.2.自边舍去. (个人因为vis数组忘记初始化,WA了3次,晕死!!) #include <iostream> #include <cstring ...
- 我的Android进阶之旅------>Android拍照小例子
今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...
- 关于Redis
在同步dump.rdb文件时要执行service redis stop后,再拷贝目标rdb文件过去,然后再start 而不是拷贝目标rdb文件过去后直接执行restart 因为redis在执行sto ...
- JAVA中的正则表达式--待续
1.关于“\”,在JAVA中的正则表达式中的不同: 在其他语言中"\\"表示为:我想要在正则表达式中插入一个普通的反斜杠: 在Java中“\\”表示为:我想要插入一个正则表达式反斜 ...
- VIm变成sublime (转)
sublime在ubuntu下始终支持不是很好, 特别是对中文输入的支持,还有一些插件在ubuntu下也不能用. 在ubuntu下还是用vim吧. 我们一起把vim变成sublime. 只需要三步 ...
- Linux下redis的安装及用法
1.下载源代码包redis-2.8.21.tar.gz,并将其上传到指定文件夹/urs/src,然后对其进行解压: [root@Slave1pc src]# tar -xvf redis-2.8.21 ...
- WEB服务器5--IIS中ISAPI扩展、ISAPI筛选器
在IIS的文档中经常会提到两个术语:ISAPI扩展和ISAPI筛选器. ISAPI扩展 “ISAPI扩展(ISAPI Extension)”是一种可以添加到IIS中以增强Web服务器功能的程序,其载体 ...
- 《JavaScript 闯关记》之 BOM
ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 BOM(浏览器对象模型)则无疑才是真正的核心.BOM 提供了很多对象,用于访问浏览器的功 ...