C程序计算x的正弦值

时间:2016-12-11 18:42:30

标签: c series sine

这是我到目前为止所做的。我不知道代码有什么问题。理论上它应该运行得很好(或者我可能是错的),但它只是没有,它让我发疯。我是初学者BTW。

任何人都可以指出代码有什么问题吗?

# include <stdio.h>
# include <conio.h>
# include <math.h>

main()
{
   int i , sum = 0 , n;
   float x;
   printf("Please enter the desired values for x and n (n>0): ");
   scanf("%f %d",&x,&n);
   for(i=1;i<=n;i++)
   {
       sum = sum +((pow(-1,i+1)*pow(x,2*i-1))/(factorial(2*i-1)));
   }
   printf("%f",sum);
}

int factorial(int n)
{
   int c;
   int result = 1;

   for( c = 1 ; c <= n ; c++ )
         result = result*c;

   return ( result );
}

2 个答案:

答案 0 :(得分:1)

主要问题:

  • float类型应为doubleint,而不是factorial(int n);
  • double必须能够返回非常大的数字,因此其返回类型也应为# include <stdio.h> # include <math.h> double factorial(int n) { if (n == 0) return 1; return n * factorial(n-1); } main() { int n; double x, sum = 0; printf("Please enter the desired values for x and n (n>0): "); scanf("%lf %d", &x, &n); for(int i = 0; i <= n; i++) { sum += pow(-1, i) * pow(x, 2 * i + 1) / (factorial(2 * i + 1)); } printf("%f", sum); }

可能的解决方案:

x

为了使您的正弦计算器具有防弹功能,您应该添加一些行来检查输入{{1}}的值,并在评估之前至少将其减少到域 [ - pi,pi] 系列。 查看我的答案herehere以了解原因。

答案 1 :(得分:1)

@Busy Beaver好的答案指出了OP代码中的一些失误。

但是要深入挖掘OP如何在没有 Stack Overflow 的情况下解决这个问题。

  

任何人都可以指出代码有什么问题吗?

不是寻求某人协助,而是首先使用您的编译器。启用所有编译器警告。一个好的编译器会抱怨下面的内容。这比在SO上发布的反馈更快。

// return type defaults to 'int' 
main()
// this should be as below  (amongst other possibilities)
int main(void)

// implicit declaration of function 'factorial'
sum = sum +((pow(-1,i+1)*pow(x,2*i-1))/(factorial(2*i-1)));
// factorial should be declared/defined before it it used

// conversion to 'int' from 'double' may alter its value
sum = sum +((pow(-1,i+1)*pow(x,2*i-1))/(factorial(2*i-1)));
// This is the hint that `sum` should also be a floating point.

// format '%f' expects argument of type 'double', but argument 2 has type 'int'
printf("%f",sum);
// sum is type `int`, the matching specifier is "%d"`.

通过修复这些警告,代码“工作”而无需其他更改。 factorial()计算中仍然存在精度,范围有限,效率和溢出等问题。需要学习的经验:使用编译器来帮助解决基本问题。

Please enter the desired values for x and n (n>0): 1 5
0.841471

我现在看到这是一个旧帖子,OP可能有left the building