该程序将编译,但在运行时我没有从我的输入中得到正确的值,我已经找到了制作正弦公式的方法,并找到了这个,但我不相信它是正确的。< / p>
我的配方是否正确? 我认为在c中运行sin函数也会给我错误的值。
* 如果我输入1.5和4 im得到0.000和随机整数
,这些更改仍会得到错误的值 /*
* Function mySin is using a sin formula to get the sin of x
* the function then returns the sin value computed
* Parameters -for function mySin are "x" is the value for sin
* -"n"is the number of series to run
*
*The program also uses the sin(x) function to get the real sin
*
*/
#include <stdio.h>
#include <math.h>
int mySin(double x, int n){
int i=0;
double sinx=0;
for(i=1; i<=n; i+=2){
sinx=(pow(x,i)+sinx); //
}
return sinx;
}
int main(double sinx){
double realSin=0;
double x=0;
int n=0;
printf("Please input x and n:");
scanf("%lf",&x);
scanf("%d",&n);
mySin(x,n);
realSin=sin(x);
printf("mySin= %f\n sin=%d\n",sinx,realSin);
}
答案 0 :(得分:5)
您的mySin
功能至少有5种不同的方式。使用**
表示取幂(以避免与xor混淆),正确的公式是
sin(x) = x - x**3/3! + x**5/5! - x**7/7! + x**9/9! ...
您的实施失败,因为
此外,main
在更多方面有误。 mySin
的返回值完全被忽略。相反,sinx
是main
的第一个参数,它是程序收到的命令行参数的数量(包括它运行的名称)。此外,%d
用于格式字符串中的所有数字,无论其类型如何,仅适用于int
。
要修复mySin
,请让i
仅查看奇数值,并让循环的每次迭代计算x**i/i!
并将其添加到当前值sinx
中。
要修复main
,请在sinx
中声明一个本地main
变量并指定sinx = mySin(x, n)
,而不是声明sinx
作为参数。另外,使用%lf
来阅读scanf
和%f
的双打,以便用printf
写双打。
答案 1 :(得分:1)
mySin
应该返回double
。您将返回int
。
sin
值可以使用傅立叶级数计算。
答案 2 :(得分:1)
x是双倍因此你必须在scanf中使用%,在printf中使用%
double x;
scanf("%lf", &x);
printf ("%f", x);
答案 3 :(得分:1)
代码中的另一个错误点是您通过**
C中没有幂运算符。编译器将x**i
视为x * (*i)
。但由于i
不是指针,它会返回您看到的错误。您必须使用pow()
代替