无论参数如何,答案总是 0

Answer is always coming 0 regardless of parameters

在下面的程序中,我尝试分别使用级数公式 Sin(x),Cos(x) series 来计算 Sin(x) 和 Cos(x) 的值。但答案总是 0。我试图在不使用指针的情况下解决它。如果你能详细解释一下,因为我是编码的初学者。

#include <stdio.h>

int facto(int x)
{
    int i,ans;
  for(i=x;x>0;x--)
  {
      ans*=i;
  }
    return ans;
}
/***********************************************************************************************************************************************************/
float pow(float x,int c)
{
    int o=0;
    float ans;
    while(o<c)
    {
        ans*=x;
        o++;
    }
    return ans;
}
/***********************************************************************************************************************************************************/
float Sin(float x,int n)
{
  int i=1,j;
  float ans;
  while(i<=n)
  {
      if((j%2)==0)
      {
          ans+=(pow(x,i)/facto(i));
      }
      else
      {
          ans-=(pow(x,i)/facto(i));
      }
     i+=2;
     j++;
  }
  return ans;
}
/***********************************************************************************************************************************************************/
float Cos(float x,int n)
{
  int i=0,j;
  float ans;
  while(i<=n)
  {
      if((j%2)==0)
      {
          ans+=(pow(x,i)/facto(i));
      }
      else
      {
          ans-=(pow(x,i)/facto(i));
      }
     i+=2;
     j++;
  }
  return ans;
}
/***********************************************************************************************************************************************************/
int main ()
{
    int deg,cntr;
    float rad,ans;
    char s;
    printf("To calculate the value of sine function press  (s)  and for cosine function press  (c)  : ");
    scanf("%c",&s);
    printf("\nPlease provide value of angle in degree : ");
    scanf("%d",&deg);
    rad=(0.01745*deg);
    printf("\nPlease provide value for number of terms in series(more terms=more accuracy) : ");
    scanf("%d",&cntr);
    if((s=='S')||(s=='s'))
    {
      ans= Sin(rad,cntr);
      printf("\n\nThe value is %.5f \n\n",ans);
    }
    else if((s=='C')||(s=='c'))
    {
      ans= Cos(rad,cntr);
      printf("\n\nThe value is %.5f \n\n",ans);
    }
    return 0;
}

代码有点混乱,但如果您打算使用 facto 方法计算阶乘,那是错误的。

int facto(int x)
{
    int i,ans;
  for(i=x;x>0;x--)
  {
      ans*=i;
  }
    return ans;
}

错误:

  • 代码正在 for 循环中更新 x,而您正在执行 ans *= i,其中 i 永远不会改变。这最终会计算出 x^x 而不是 x!。
  • 变量 ans 被定义为未初始化,这会导致 ans 变量中出现一些垃圾值,但它应该被初始化为 1

2 种纠正方法,

  1. 使用ans *= x;
int facto(int x)
{
    int ans = 1;
  for(;x>0;x--)
  {
      ans*=x;
  }
    return ans;
}
  1. for 循环中更新 i 而不是 x
int facto(int x)
{
    int i,ans = 1;
  for(i=x;i>0;i--)
  {
      ans*=i;
  }
    return ans;
}

即使我也看到了其他一些错误,请告诉我这是否有效。 下次尝试测试函数和 post 有错误的函数而不是整个代码。

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

int facto(int x)   // Calculates factorial
{
    int i,ans=1;
    for(i=1;i<=x;i++)
    {
        ans*=i;
    }
    return ans;
}
/***********************************************************************************************************************************************************/
double powr(double x,int c) // Calculates x to the power c
{
    int o=0;
    double ans=1.00;
    for(o=0;o<c;o++)
    {
      ans*=x;
    }
    return ans;
}
/***********************************************************************************************************************************************************/
double Sine(double x,int n) // Calculates sin(x)
{
  int i=1,j=0;
  double ans=0.0;
  while(i<=n)
  {
      if((j%2)==0)
      {
          ans+=(powr(x,i)/facto(i));
      }
      else
      {
          ans-=(powr(x,i)/facto(i));
      }
     i+=2;
     j++;
  }
  return ans;
}
/***********************************************************************************************************************************************************/
double Cosine(double x,int n) // Calculate cos(x)
{
  int i=0,j=0;
  double ans=0.0;
  while(i<=n)
  {
      if((j%2)==0)
      {
          ans+=(powr(x,i)/facto(i));
      }
      else
      {
          ans-=(powr(x,i)/facto(i));
      }
     i+=2;
     j++;
  }
  return ans;
}
/***********************************************************************************************************************************************************/
int main()
{
    char d;
    int cntr;
    double deg;
    printf("Please provide value of angle in degree : ");
    scanf("%lf",&deg);
    double rad=deg*((22.0/7.0)*(1.0/180.0));
    printf("\nPlease provide value for number of terms in series (more terms=more accuracy) : ");
    scanf("%d",&cntr);
    printf("\nWrite \'c\' for cosine and \'s\' for sine : ");
    scanf(" %c",&d);
    if((d!='s')&&(d!='S')&&(d!='c')&&(d!='C'))

    {
        printf("\n\nNot a valid input, Please try again.\n\n");
        return 1;
    }
    else
      {
          if((d=='s')||(d=='S'))
          {
              printf("\n\nThe value is %.3f \n\n",Sine(rad,cntr));
          }
          else
            {
              printf("\n\nThe value is %.3f \n\n",Cosine(rad,cntr));
            }
      }
    return 0;
}