c语言中的 math.h 数学函数库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中的 math.h 数学函数库相关的知识,希望对你有一定的参考价值。

参考技术A 一些数学计算的公式的具体实现是放在math.h里,具体有:

double sin (double x); x的正弦值

double cos (double x); x的余弦值

double tan (double x); x的正切值

double asin (double x); 结果介于[-PI/2, PI/2],x值域为[-1,1]

double acos (double x); 结果介于[0, PI],x值域为[-1,1]

double atan (double x); 反正切(主值), 结果介于[-PI/2, PI/2]

double atan2 (double y, double x); 反正切(整圆值), 结果介于[-PI, PI]

double sinh (double x); x的双曲正弦值

double cosh (double x); x的双曲余弦值

double tanh (double x); x的双曲正切值

double exp (double x); 幂函数e^x

double pow (double x, double y); x^y,如果x=0且y<=0,或者x<0且y不是整型数,将产生定义域错误

double sqrt (double x); x的平方根,其中x>=0

double log (double x); 以e为底的对数,自然对数,x>0

double log10 (double x); 以10为底的对数,x>0

double ceil (double x); 取上整

double floor (double x); 取下整

double fabs (double x); x的绝对值

double frexp (double x, int *exp); 标准化浮点数, x = f * 2^exp, 已知x求f, exp ( x介于[0.5, 1] )并返回f值

double ldexp (double x, int exp); 与frexp相反, 已知x, exp求x*2^exp

double modf (double x, double *ip); 将参数的整数部分通过指针回传, 返回小数部分,整数部分保存在*ip中

double fmod (double x, double y); 返回两参数相除x/y的余数,符号与x相同。如果y为0,则结果与具体的额实现有关

c语言 用库函数计算两日期相差的天数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>

int  get_days(const char* from, const char* to);
time_t convert(int year,int month,int day);

int main()

    const char* from="2013-3-15";
const char* to="2015-8-14";
int days=get_days(from,to);

printf("From:%s\\nTo:%s\\n",from,to);
printf("%d\\n",days);

return 0;


time_t convert(int year,int month,int day)

struct tm info=0;
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
return mktime(&info);


int  get_days(const char* from, const char* to)

int year,month,day,fromSecond,toSecond;
sscanf(from,"%d-%d-%d",&year,&month,&day);
fromSecond=(int)convert(year,month,day);
sscanf(to,"%d-%d-%d",&year,&month,&day);
toSecond=(int)convert(year,month,day);
return (toSecond-fromSecond)/24/3600;


From:2013-3-15
To:2015-8-14
882
Press any key to continue
   
 这才算是用了库函数了···

参考技术A 给你写了一个程序,应该能看懂的:

#include <stdio.h>
#include <time.h>
#include <memory.h>

int main(void)

time_t t1;
time_t t2;

struct tm OldTime;
struct tm NewTime;

memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示为 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;

memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示为 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;

t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6

printf("%d",(t1-t2)/(24*3600));

return 0;
本回答被提问者采纳
参考技术B

提供网上代码供参考,该代码引入 time.h 头文件:

#include <stdio.h>
#include <time.h>

int datediff(int y1,int m1,int d1,int y2,int m2,int d2)
struct tm ptr1;
ptr1.tm_sec=10;
ptr1.tm_min=10;
ptr1.tm_hour=10;
ptr1.tm_mday=d1;
ptr1.tm_mon=m1-1;
ptr1.tm_year=y1-1900;   
time_t st1=mktime(&ptr1);
struct tm ptr2;
ptr2.tm_sec=10;
ptr2.tm_min=10;
ptr2.tm_hour=10;
ptr2.tm_mday=d2;
ptr2.tm_mon=m2-1;
ptr2.tm_year=y2-1900;   
time_t st2=mktime(&ptr2);
return (int)((st2-st1)/3600/24);


int main (void)
int t=datediff(2015,1,9,2015,2,18);
printf("%d",t);
return 0;

参考技术C #include <stdio.h>
struct date

int year;
int month;
int day;
;
int main(void)

int isPrime(int year);
int dateDiff(struct date mindate,struct date maxdate);
struct date mindate,maxdate;
int days;

printf("please input the one date:");
scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindate.day);
printf("please input other day:");
scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdate.day);

days=dateDiff(mindate,maxdate);
printf("the day is:%d\n",days);
return 0;


/************************************************************************/
/* 判断闰年函数(4年一润,100年不润,400年再润) */
/************************************************************************/
int isPrime(int year)

if ((year%4==0&&year%100!=0)||(year%400==0))

return 1;

else

return 0;




int dateDiff(struct date mindate,struct date maxdate)

int days=0, flag=1;
const int primeMonth[12]=31,29,31,30,31,30,31,31,30,31,30,31;
const int notPrimeMonth[12]=31,28,31,30,31,30,31,31,30,31,30,31;

/************************************************************************/
/* 交换两个日期函数,将小的日期给mindate,将大的日期给maxdate */
/************************************************************************/
struct date tmp;
if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.month)||(mindate.year==maxdate.year&&mindate.month==maxdate.month&&mindate.day>maxdate.day))

tmp=mindate;
mindate=maxdate;
maxdate=tmp;


int maxmonth,minmonth;
/************************************************************************/
/* 主要思路:拿2002-8-8 2005-2-22来说 */
/* 将2004-8-8---2005-2-22----2005-7-8 */
/*一前一后刚好N年,算出2005-2-22到2005-7-8的天数,然后用总年*36(5|6)减掉) */
/* 2002-9-8 2005-11-22 */
/* 2002-9-8-----2005-9-8-----2005-11-22(这次是加上后面天数) */
/*如何判断是加还是减呢?年大而月小的,则是减,程序中用flag标示 */
/************************************************************************/
if (maxdate.month<mindate.month)

maxmonth=mindate.month;
minmonth=maxdate.month;
flag=-1;

else

maxmonth=maxdate.month;
minmonth=mindate.month;
flag=1;


/************************************************************************/
/* 从mindate.year开始累加到maxdate.year */
/************************************************************************/
for(int j=mindate.year;j<maxdate.year;++j)

if (isPrime(j)==1)

days+=366;

else
days+=365;


/************************************************************************/
/* 从minmonth累加到maxmonth,分闰年和平年 */
/************************************************************************/
int day;
if(isPrime(maxdate.year)==1)


for(int i=minmonth;i<maxmonth;i++)

day=primeMonth[i-1]*flag;
days=days+day;

days=days+maxdate.day-mindate.day;

else

for (int i=minmonth;i<maxmonth;i++)

day=notPrimeMonth[i-1]*flag;
days=days+day;

days=days+maxdate.day-mindate.day;

return days;
参考技术D 思路。
1.计算两个日期相隔的年数。
判断相隔年数里,出现了几个闰年,几个平年,然后计算跨年的天数。要小心,不要多算了一年哦。
2.计算不足一年,另外再相隔的月数。
注意,看是否其中有2月
3.不足一月,相隔的天数。
三者都换算成天数,相加!

以上是关于c语言中的 math.h 数学函数库的主要内容,如果未能解决你的问题,请参考以下文章

c语言中,函数类型有几种?

c语言中math.h和dos.h是干啥的

C语言中常用的数学公式

在c++语言#include<math.h>当中包含有啥函数

怎样用C语言编写数学公式

c语言 练习使用math.h中包含的常用数学函数 绝对值和开平方