无论参数如何,答案总是 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",°);
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 种纠正方法,
- 使用
ans *= x;
int facto(int x)
{
int ans = 1;
for(;x>0;x--)
{
ans*=x;
}
return ans;
}
- 在
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",°);
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;
}
在下面的程序中,我尝试分别使用级数公式 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",°);
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 种纠正方法,
- 使用
ans *= x;
int facto(int x)
{
int ans = 1;
for(;x>0;x--)
{
ans*=x;
}
return ans;
}
- 在
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",°);
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;
}