函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
举例如下:
一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.pos为要插入的位置的下标
则
pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number数组的下标为0的位置。
pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number数组的下标为1的位置(即10所在的位置)。
pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)。
所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!~
返回查找元素的第一个可安插位置,也就是“元素值>=查找值”的第一个元素的位置
三角函数:(所有参数必须为弧度)
1.acos
函数申明:acos (double x);
用途:用来返回给定的 X 的反余弦函数。
2.asin
函数申明:asin (double x);
用途:用来返回给定的 X 的反正弦函数。
3.atan
函数申明:atan (double x);
用途:用来返回给定的 X 的反正切函数。
4.sin
函数声明:sin (double x);
用途:用来返回给定的 X 的正弦值。
5.cos
函数声明:cos (double x);
用途:用来返回给定的 X 的余弦值。
6.tan
函数声明:tan (double x);
用途:用来返回给定的 X 的正切值。
7.atan2
函数声明:atan2 (double y, double x);
用途:返回给定的 X 及 Y 坐标值的反正切值
在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x) 他们返回的值是弧度要转化为角度再自己处理下。
前者接受的是一个正切值(直线的斜率)得到夹角,但是由于正切的规律性本可以有两个角度的但它却只返回一个,因为atan的值域是从-90~90 也就是它只处理一四象限,所以一般不用它。
第二个atan2(double y,double x) 其中y代表已知点的Y坐标 同理x ,返回值是此点与远点连线与x轴正方向的夹角,这样它就可以处理四个象限的任意情况了,它的值域相应的也就是-180~180了
例如:
例1:斜率是1的直线的夹角
cout<<atan(1.0)*180/PI;//45°
cout<<atan2(1.0,1.0)*180/PI;//45° 第一象限
cout<<atan2(-1.0,-1.0)*180/PI;//-135°第三象限
后两个斜率都是1 但是atan只能求出一个45°
例2:斜率是-1的直线的角度
cout<<atan(-1.0)*180/PI;//-45°
cout<<atan2(-1.0,1.0)*180/PI;//-45° y为负 在第四象限
cout<<atan2(1.0,-1.0)*180/PI;//135° x为负 在第二象限
常用的不是求过原点的直线的夹角往往是求一个线段的夹角 这对于atan2就更是如鱼得水了
例如求A(1.0,1.0) B(3.0,3.0)这个线段AB与x轴正方向的夹角
用atan2表示为 atan2(y2-y1,x2-x1) 即 atan2(3.0-1.0,3.0-1.0)
它的原理就相当于把A点平移到原点B点相应变成B'(x2-x1,y2-y1)点 这样就又回到先前了
例三:
A(0.0,5.0) B(5.0,10.0)
线段AB的夹角为
cout<<atan2(5.0,5.0)*180/PI;//45°
其他函数:
8.atof
函数名: atof (const char *s);
功 能: 把字符串转换成浮点数
用 法: double atof(const char *nptr);
程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
floatarg,*point=&arg;
float f;
char *str ="12345.67";
f = atof(str);
printf("string =%s float = %f\n", str, f);
return 0;
}
9. ceil 和 floor
函数名: ceil
floor
功 能: 向上舍入
向下舍入
用 法: double ceil(double x);
double floor(double x);
程序例:
#include<math.h>
int main(void)
{
double number =123.54;
double down, up;
down = floor(number);
up = ceil(number);
printf("originalnumber %5.2lf\n", number);
printf("numberrounded down %5.2lf\n", down);
printf("numberrounded up %5.2lf\n", up);
return 0;
}
该程序运行结果:original number 123.54
number rounded down 123.00
number rounded up 124.00
10.fabs
函数名:fabs
功能:求浮点数x的绝对值.
用法:fabs (double x);
11.fmod
函数名: fmod
功 能: 计算x对y的模, 即x/y的余数
用 法: double fmod(double x, double y);
程序例:
#include <stdio.h>
#include <math.h>
int main(void)
{
double x = 5.0, y =2.0;
double result;
result = fmod(x,y);
printf("Theremainder of (%lf / %lf) is \%lf\n", x, y, result);
return 0;
}
12.abs
函数名:abs
功能:返回整型数的绝对值.
用法:Abs(number)
number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回Null;如果是未初始化变量,则返回 0.
幂指数:
13.exp
函数名:exp
功能:返回 e 的 n 次幂.
用法:exp (double x);
14.frexp
函数名: frexp
功 能: 把一个双精度数分解为尾数的指数
用 法: double frexp(double value, int *eptr);
程序例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double mantissa,number;
int exponent;
number = 8.0;
mantissa =frexp(number, &exponent);
printf("Thenumber %lf is ", number);
printf("%lf timestwo to the ", mantissa);
printf("power of%d\n", exponent);
return 0;
}
15.log
函数名:log
功 能: 自然对数函数ln(x)
用 法: double log(double x);
程序例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double result;
double x = 8.6872;
result = log(x);
printf("Thenatural log of %lf is %lf\n", x, result);
return 0;
}
log(x,y)=ln(y)/ln(x)
16.ldexp
函数名: ldexp
功 能: 计算value*(2的exp幂 ).
用 法: double ldexp(double value, int exp);
程序例:
#include<stdio.h>
#include<math.h>
int main(void)
{
double value;
double x = 2;
value = ldexp(x,3);
printf("The ldexpvalue is: %lf\n", value);
return 0;
}
运行结果为:2*2^3=16.
17.log10
函数名:log10
功能:返回以 10 为底的对数.
用法:log10 (double x);
18.sqrt
函数名:sqrt
功能:返回指定数字的平方根.
用法:sqrt (double x);
19.modf
函数名:modf
功 能: 把数分为指数和尾数
用 法: double modf(double value, double *iptr);
程序例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double fraction,integer;
double number =100000.567;
fraction =modf(number, &integer);
printf("The wholeand fractional parts of %lf are %lf and %lf\n",number, integer, fraction);
return 0;
}
20.pow
函数名:pow
功能:返回指定数字的指定次幂.
用法:pow (double x, double y);(将返回x的y次幂)
双曲函数:
21.cosh
函数名:cosh
功能:返回指定角度的双曲余弦值.
用法:Double Cosh(double x(以弧度计量的角度)) ;
22.sinh
函数名:sinh
功能:返回指定角度的双曲正弦值。
用法:sinh (double x);(其中参数x必须为弧度制)
23.tanh
函数名:tanh
功能:回指定角度的双曲正切值.
用法:tanh (double x);