求高手指点c语言的题

帮我看看这个程序哪里错了,运行怎么不对啊!编sinx=x-x^3/3!+x^5/5!-x^7/7!+……算到第十项我是这样想的#include"stdio.h"voidm... 帮我看看这个程序哪里错了,运行怎么不对啊!
编sinx=x-x^3/3!+x^5/5!-x^7/7!+…… 算到第十项
我是这样想的
#include "stdio.h"
void main()
{
double x,sum;
int y,n,z,i;
y=1;z=1;n=1;
printf("input the number:\n");
scanf("%lf",&x);
sum=x;
for(i=2;i<=10;i++)
{
n+=2;y=n*(n-1);
x*=x*x;
z*=-1;
sum+=x*z/y;
}
printf("the result is%lf",sum);
}
为什么不对呢????
x*=x*x这个的确不对,但是后面算阶乘的应该没问题!而且就算改过来再试,用3.14做试验得到的居然是-0.9几!
我问老师,老师说是公式有问题!但是我的确不知道泰勒展开式有什么问题,希望各位大哥大姐指导一下!
展开
 我来答
无大智有大勇
2008-04-04 · TA获得超过441个赞
知道小有建树答主
回答量:502
采纳率:0%
帮助的人:333万
展开全部
你算阶乘和x的n次幂的算法都有问题。
先说阶乘,应该是
y*=n*(n-1)
当n为3时y=3*2
当n为5时y=5*4*刚才的y.这样就没错了。要不你那个只是y=n*(n-1)

而x*=x*x就更不是算n次幂的方法了。
当x为5时,计算为x*=x*x是没问题的。这时x=125
但到了下一步,x=125*125*125=5^9,显然不对。应该定义一个m,一开始让m=x,然后m*=x*x才对。
最后程序应该是这样(只写了主要部分的)
double m = x;
for(i=2;i<=10;i++)
{
n+=2;
y*=n*(n-1);
m*=x*x;
z*=-1;
sum+=x*z/y;
}
你试一下吧
L_o_o_n_i_e
2008-04-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5150万
展开全部
循环步长是2,递推 t = t * x * x

void main()
{
double t=1.0;
double y = 1.0;
double x;
double sum=0;
int i;

x= 3.1416 / 4.0; // 用45度做试验
t = x;
sum = t;
for (i=3;i<10;i=i+2)
{
t = t * x * x * (-1.0);
y = y /(double) i / (double) (i-1) ;
sum = sum + t * y;
};

printf("%lf ",sum);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式