C语言初学者请教!编程求sinx近似值,已写程序,求改错!
发布网友
发布时间:2022-05-14 02:40
我来回答
共5个回答
热心网友
时间:2023-11-24 18:17
#include<stdio.h> /*以下代码运行通过*/
#include<math.h>
main()
{
float sum,sinx,x,s;
int i,j; /*j为-1的次方变量*/
printf("Please inter x: \n");
scanf("%f",&x);
i=1;s=1;j=-1;
sum=0;
sinx=sin(x);
printf("%f\n",sinx);
for(i=1;(fabs(sum-sinx))>=0.000001;i=i++) /*你的程序中这句判断有错,应该是大于该精度内的sum值执行for内循环语句。*/
{ s=s*i;
if(i%2!=0) /*当i为奇数时,才执行,把偶数跳过,但s的值仍变化,这样除以的就是阶乘。*/
{ j=-j; /*用j来控制正负号*/
sum+=(double)(pow(x,i)/s)*j;
}
}
printf("sinx=%f\n",sum);
}
热心网友
时间:2023-11-24 18:18
For条件错误改为大于且把精度变大一点,否则永远为真。你那个变号也不能实现总为正,可用J乘负一实现。最后你那阶乘也求错了,最好在加个变量直接不断加一来求阶乘, 手机回答不便写代码,自己好好改下吧,那样效果较好。
热心网友
时间:2023-11-24 18:18
#include<stdio.h>
#include<math.h>
main()
{
double x,sum=0,sinx;
int i,flag=1,s=1,j; //j为-1的次方变量
printf("Please inter x: ");
scanf("%lf",&x);
sinx=(float)sin(x);
for(i=1,j=1;fabs(sum-sinx)>=0.000001;i=i+2)
{
while(j<=i)s*=j++;//求阶乘
sum+=flag*(pow(x,i)/s);
flag*=-1;//符号
}
printf("sin x=%lf\n",sum);
}
热心网友
时间:2023-11-24 18:19
没有改出来,只发现这里有错
for(i=1;fabs(sum-sinx)<=0.000001;i=i+2)
{ s=s*i; // 这里的s并不是接乘
sum+=(float)pow(j,i+1)*(pow(x,i)/s);
}
printf("sin x=%f\n",sum);
}
热心网友
时间:2023-11-24 18:19
#include<stdio.h>
#include<math.h>
void main()
{ float x,sinx,sum,s;
int i,j; //j为-1的次方变量
printf("Please inter x: \n");
scanf("%f",&x);
s=1;j=1;
sum=0;
sinx=(float)sin(x);
for(i=1;fabs(sum-sinx)>=0.000001;i=i+2)
{ s=i==1?1:s*i*(i-1);
sum+=(float)j*(pow(x,i)/s);
j=-j;
}
printf("sinx=%f\n",sum);
}