大神们能不能看看我这个为啥不对,谢谢
#include <stdio.h>
#include<math.h>
int main()
{
int i,j;//循环变量
int flag=1; //符号位
double term; //分数
long n=1,counter=0; // n为 次数 ,counter为次数
double sin=0; //有符号的分数
double x; //x为输入量
double s=1,f;//s为分数的分子,f为分母
f=1;
printf("Input x:\n");
scanf("%lf",&x);
do
{
for(j = 1;j <= n;j++)
s*= x;
for(i=1;i<n;i++)
f=f*(f+1);
term=s/f;
sin+=flag*term;
n+=2;
flag=-flag;
counter++;
}while(term<1e-5);
printf("sin(x)=%.3f,count=%d\n",sin,counter);
return 0;
}
(1)do{}中,需要把s和f重置为1
(2)求阶乘写错了
(3)while()中应该是while(term>1e-5); 应该是大于,你写成小于了
代码修改如下:
#include <stdio.h>
#include<math.h>
int main()
{
int i,j;//循环变量
int flag=1; //符号位
double term; //分数
long n=1,counter=0; // n为 次数 ,counter为次数
double sin=0; //有符号的分数
double x; //x为输入量
double s=1,f;//s为分数的分子,f为分母
f=1;
printf("Input x:\n");
scanf("%lf",&x);
do
{
s=1; //添加
f=1; //添加
for(j = 1;j <= n;j++)
s*= x;
for(i=1;i<=n;i++) //修改
f*=i;//f*(f+1);
term=s/f;
sin+=flag*term;
n+=2;
flag=-flag;
counter++;
}while(term>1e-5); //修改
printf("sin(x)=%.3f,count=%d\n",sin,counter);
return 0;
}
#include <stdio.h>
#include<math.h>
double fact(int n)
{
if (n == 0)
return 1;
return fact(n - 1)*n;//求1-(2*n-1)的阶层
}
double fact_2(int n)
{
long sum = 1;
while (n > 1)
{
sum *= n;
n--;
}
return sum;
} //第二种计算阶层的方法
int main()
{
int n = 1, j = 1;//n是项数,j是正负
double x, sinx = 0, order = 1;//x是项,sinx是结果,order是项值
scanf("%lf", &x);
while (order >= 1e-5) //精度
{
order = pow(x, 2 * n - 1) / fact(2 * n - 1);
sinx += j * order;
j = -j;
n++;
}
printf("sinx=%lf,次数%d", sinx,n-1 );
getchar();
getchar();
return 0;
}