函数调用
本帖最后由 n0noper 于 2016-5-18 11:31 编辑输入一个正整数n和一个实数x(x范围在0~1.57之间),计算cos(x)=x^0/0!-x^2/2!+x^4/4!+x^6/6!+...的前n项和
为什么我输5 1.57 的时候,输出的值为负而且不等于0.0008,我哪里写错了??请指出并帮忙改正,谢谢
#include <stdio.h>
void main(){
int i,n,flag;
double x,item,sum;
double fact(int n); //声明下面的fact函数
double power(double x,int n); //声明下面的power函数
printf("输入一个正整数n和一个实数x:");
scanf("%d%lf",&n,&x);
flag=-1;
if(n==1){
sum=1;
}
else{
sum=1;
for(i=2;i<=n;i++){ // 函数调用
item=flag*power(x,i)/fact(i);
sum=sum+item;
flag=-flag;
}
}
printf("cos(x)的近似值=%0.4f\n",sum);
}
double fact(int n)//函数定义
{
double product;
int i;
product=1;
for(i=1;i<=(2*n-2);i++) //计算分母的变量
product=product*i;
return product; //返回结果
}
double power(double x,int n)//函数定义
{
double pow=1;
int i;
for(i=1;i<=n;i++) //计算分子的变量
{
pow=pow*x;
}
return pow; //返回结果
} 我运行了结果是0.0794 = =不是负值啊 神之间 发表于 2016-5-7 22:35
我运行了结果是0.0794 = =不是负值啊
可为什么我得到的结果是-0.0974,我现在再运行 还是负的 而且,它本来的值是0.0008的,能看出来我哪里错了吗?? 不知道你解决没有,恩,还是说一下我发现的问题吧
我水平也不怎么样,一眼看不出问题,用了三个输出分别测试你的两个函数和运算值
if(n==1)
{
sum=1;
}
else
{ sum=1;
for(i=2;i<=n;i++) //控制项
{ // 函数调用
item=flag*power(x,i)/fact(i);
// printf("%10f,%10f",power(x,i),fact(i));
// printf("%10f",item);
sum=sum+item;
// printf("%10f\n",sum);
flag=-flag;
}
}
运行结果如下
注意:第二行第一列,此时应该是计算1.57的4次方,用计算机算,1.57^4=6.07573201但是这里的值是3.869893=1.57^3
说到这里你应该也就明白了,是你函数出错了
double power(double x,int n)//函数定义
{
double pow=1;
int i;
//原代码 for(i=1;i<=n;i++)
for(i=1;i<=(2*n-2);i++) //计算分子的变量
{
pow=pow*x;
}
return pow; //返回结果
}
运行结果:
卤煮,既然你fact中的for循环中计算分母的平方是(2*n-2),为什么power里边的for就不是了?
是不是看不起power啊?平方和阶乘,同步啊~~~不要有了小三就忘了原配啊! n0noper 发表于 2016-5-8 14:17
卤煮,既然你fact中的for循环中计算分母的平方是(2*n-2),为什么power里边的for就不是了?
是不是看不 ...
对对对,你指出的对,我还是个新手,还不太会理解,希望能谅解。我会努力改正这些毛病,多谢指出。 留恋流年 发表于 2016-5-8 13:57
不知道你解决没有,恩,还是说一下我发现的问题吧
我水平也不怎么样,一眼看不出问题,用了三个输出分 ...
谢谢,非常感谢。我现在终于解决这个问题了。感谢你的帮助 寻123 发表于 2016-5-8 18:13
谢谢,非常感谢。我现在终于解决这个问题了。感谢你的帮助
没事,互帮互助嘛!共同进步{:5_110:}
页:
[1]