因为int型的范围与机器和版本有关,是-32768~32767或-21亿~21亿,超过范围,数值就变为负值,从而引发错误。a/s虽然都是double类型,但是当s是int类型时,就会由于超过范围引发错误,而s记录的是阶乘值,随n变大增长的速度很快,超过范围是可能的。当x取不同值时,为了满足精度,需要取的项数不同,所以如果把s定为int型,会有时正确,有时错误。把s定为double型,就一直正确。
西充网站建设公司成都创新互联公司,西充网站设计制作,有大型网站制作公司丰富经验。已为西充成百上千提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的西充做网站的公司定做!
#includestdio.h
#includemath.h
int
main(void)
{
double
x,
e,cosx;
double
funcos(double
e,int
x);
printf("e:
");
scanf("%lf",e);
printf("x:
");
scanf("%lf",x);
//这里是%lf
cosx=funcos(e,x);
printf("cos(x)=%.3f\n",cosx);
return
0;
}
double
funcos(double
e,int
x)
{
int
flag,a,i;
double
sum,item;
double
fact(int
n);
item=1;
//这个初始化要大于e,否则不执行下面
flag=1;
a=0;
i=0;
sum=0;
while(fabs(item)=e){
item=(flag*pow(x,a))/fact(i);
sum=sum+item;
flag=-flag;
a=a+2;
i=i+2;
}
return
sum;
}
double
fact(int
n)
{
int
i;
double
result;
result=1;
for(i=1;i=n;i++){
result=result*i;
}
return
result;
}
唉,程序写得相当不规范,看着好头疼;函数应该放在main外面……
#includestdio.h
#includemath.h
double jiecheng(int n)
{
int i;
double sum=1;
for(i=1;i=n;i++)
{
sum=sum*i;
}
return sum;
}
double fang(int x,int n)
{
double sum;
sum=pow(x,n);
return sum;
}
int main(void)
{
int j=1;
double x,e,count=0;
printf("e: ");
scanf("%lf",e);
printf("x: ");
scanf("%lf",x);
do{
count=count+(pow(-1,j-1))*fang(x,2*(j-1))/jiecheng(2*(j-1));
}while (fang(x,2*(j-1))/jiecheng(2*(j-1))e);
printf("%lf",count);
}
//可以运行了,但是答案输出来还是有问题……自己查查你的算法,我就不看了,晕的慌
头文件包含。math.h
cos
:余弦函数
函数原型:double
cos(double
x);
头文件:#includemath.h
是否是标准函数:是
函数功能:求x的余弦值,这里,x为弧度。
返回值:计算结果的双精度值。
例程如下:
求cosx。
#include
stdio.h
#include
math.h
int
main(void)
{
double
result;
double
x
=
M_PI;
result
=
cos(x);
printf("cos(PI)
is
%lf\n",
result);
return
0;
}
sin:正弦函数
函数原型:double
sin(double
x);
头文件:#includemath.h
是否是标准函数:是
函数功能:求x的正弦值,这里,x为弧度。
返回值:计算结果的双精度值。
例程如下:
求sinx。
#include
stdio.h
#include
math.h
int
main(void)
{
float
x;
x=M_PI/2;
printf("sin(PI/2)=%f",sin(x));
getchar();
return
0;
}
double funcos(double e, double x)
{
if(e0)
{
int i=0;
double item=1;
double cosx=0;
while(fabs(item)=e)
{
cosx+=item;
i++;
item*=-1*x*x/(2*i*(2*i-1))
}
return cosx;
}
else
return -2;
}