我是编程的新手,我无法弄清楚我的代码有什么问题。如果有人能帮我理解我的程序有什么问题,我会非常感激。我已经在这个问题上工作了两个小时,我知道我正在努力使它变得更难。这是我的新代码。我的新输出是0.000000476837158。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main() {
double x, sinx, z, factorial, term;
int j, n, i;
x=0.5;
n=10;
i=0;
z=sin(0.5);
for(int i=0; i<=n; i++){
factorial = 1;
for(j=2*i +1; j<=i; j++)
{
factorial = factorial * j;
}
term=(pow(-1,i)*pow(x,2*i+1))/(factorial);
sinx=term++;
i=i++;
}
printf("sin(0.5) is approximately %.15lf\n", sinx);
printf("sin(0.5) by default function is %.15lf\n", z);
system("pause");
return 0;
}
答案 0 :(得分:0)
此声明的第一次出现
sinx=sinx+term;
将是您的问题之一,因为当您第一次使用它们时, rhs 上的任何变量都没有被初始化。循环内的同一行的后续执行将在整个计算过程中传播sinx
的垃圾值。
我预计还有其他问题,但没有仔细检查过代码。
答案 1 :(得分:0)
这个循环没有意义。
for(j=0; j<=i; j++){
factorial=2*j+1;
}
它与
没有任何不同factorial = 2*i+1;
如果你想计算一个阶乘(比如i!
)而不是我做以下
// initialize `factorial`
factorial = 1;
for(j=1; j<=i; j++)
{
//multiply `factorial` by `j`.
factorial = factorial * j;
}
您继续使用sinx
和term
,但它们从未初始化。这意味着它们将包含垃圾值。
i++
在它自己的实施,你不应该使用任何额外的赋值运算符。
更改
i=i++;
简单地
i++;
或者更好的是,使用for
循环而不是while
循环
for(int i=0; i<=n; i++)
答案 2 :(得分:0)
你的 th 项是-1 i x 2i + 1 / i,它增长 fast 。您应该打印出前几个术语来发现问题。
(还有其他问题,比如i=i++;
,但他们可以等。)