关于c语言编程(初级)
发布网友
发布时间:2022-04-28 10:54
我来回答
共1个回答
热心网友
时间:2023-09-30 03:31
你思路有点混乱 用的变量太多而且没有实际意义
看的时候费劲
for(i=0;i<=(2*n+1);i=i+1)//求2n+1的阶乘
c=c*(i+1); //自己想想是不是多乘了一项
改成
for(i=1;i<=(2*n+1);i=i+1)//求2n+1的阶乘
c=c*i;
for(r=0;r<=(2*m+1);r=r+1)//求n的阶乘
d=d*(r+1); //道理同上
改成
for(r=1;r<=2*m+1;r++)//求2*m+1的阶乘
d=d*r;
然后把c=1;d=1;放在 do {}while(); 里面
///////////////明白了么?下面是你的程序 改好了。你自己研究研究怎么能把程序写点好看点吧
//////////////////////////////////////
int main(int argc, char *argv[])
{
/*利用正弦的柯西展开式求正弦值,弧度x,精度y,判断依据:先令a赋n=1的值,然后对b赋n=2时的值,作差,小于精度则输出,大于精度则将n=n+1,重复判断,直到满足精度*/
float c,d,x,y,a,b,S,Q,e,f;
int n,i,r,m;
c=1,d=1,n=0;
scanf("%f%f",&x,&y);//输入弧度x 和精度y
S=x; //对S赋值
Q=x; //对Q赋值
do
{
n=n+1;
c=1;
d=1;
for(i=1;i<=(2*n+1);i++)//求2n+1的阶乘
c=c*i;
S=S+pow(-1,n)*pow(x,(2*n+1))*(1/c);//计算第一个正弦值a
a=S; //赋值给a
m=n+1; //对n加一赋给m
for(r=1;r<=2*m+1;r++)//求2*m+1的阶乘
d=d*r;
Q=Q+pow(-1,m)*pow(x,(2*m+1))*(1/d);//计算第二个正弦值b
b=Q; //对b赋值
e=a-b; //对A B作差
f=fabs(e); //作差结果取绝对值赋值给f
}
while(fabs(a-b)>=y);//比较后输出
printf("%f\n",a);
system("PAUSE");
return 0;
}