怎么用c语言编正弦函数计算

2024-12-01 08:39:53
推荐回答(5个)
回答1:

1、C语言中要编写sin函数,实质上要利用sin的泰勒公式,然后根据泰勒公式,将其中的每一项进行分解,最后用循环,累加计算出最终结果。

2、下面用for循环实现sin的算法,程序代码如下:

#include
#include
void main()
{
 int  i;
 float  x,sum,a,b;  //sum代表和,a为分子,b为分母
 char s;
 printf("please input x");
 scanf("%f",&x);
 s=1;
 sum=0;
 a=x;     //分母赋初值
 b=1;     //分子赋初值
 for(i=1;a/b>=1e-6;i++)
 {
  sum=sum+s*a/b;    //累加一项
  a=a*x*x;     //求下一项分子
  b=b*2*i*(2*i+1);   //求下一项分母
  s*=-1;
 }
  printf("sum=%f\n",sum);
}

 3、  关于上述程序的几点说明:上述程序的计算结果精确到小数点后六位;上述程序运用了sin的泰勒展开式 sin x=x-x^3/3!+x^5/5! ...... ,程序中将sin泰勒公式中的每一项拆成了分子,分母以及每一项前的符号这三项,以便于每一项的累加。

回答2:

  1. 楼上的各位已经提到了scanf输入控制与目标数据类型不匹配的问题,即应改为:scanf("%f",&n);

  2. 另外三楼有提到说角度与弧度的问题,就是说sin()和cos()输入需要保证为弧度,所以你需要转换一下,比如你这个90度就应该约是1.57。

  3. 其实我觉得应该弄清楚的是为什么在输入控制错误的情况下,还会产生这样的结果。

    这是因为输入控制错误,导致n的值没有变化,也就是说后边计算正弦余弦的时候也是计算的n的初始值。你可以在先不改正输入控制的前提下,在输入语句前加一个输出语句,看看n值为多少,如果没猜错的话,应该是0,进而计算的结果也当是正确的。也许你要问了,不是说局部变量自动变量未初始化的话值是随机值么,怎么会是0呢?是的,我也很纳闷,也许适合具体的编译环境有关吧,不同的编译环境对这种情况可能处理会有所不同吧,留待自己去探究咯~

    希望能帮到你~欢迎交流~

回答3:

首先:程序应该这样改!
#include
#include
main()
{
double n;
double b,c;
scanf("%lf",&n);
b=sin(n);
c=cos(n);
printf("%.2lf\n%.2lf",b,c);
return 0;
}

其次,这里的n是弧度值,你说的90度应该输入的是pi/2,而不是90,如果希望输入90的话,那就这样改!
#include
#include
main()
{
int s;
double n,b,c;
scanf("%d",&s);
n=3.1415926*(s/180.0);
b=sin(n);
c=cos(n);
printf("%.2lf\n%.2lf",b,c);
return 0;
}

回答4:

哥们 你的这个不对啊 不管n输入多少结果多是一样的 因为你输入n 的时候时候按照整形输入的 %d这就错了 而且sin cos的形参都是double 这个是弧度 不是角度 你要转化成弧度才能计算的

回答5:

#include
#include
#define K (0.017453292519943295769236907684886l)
main()
{
float n;
double b,c;
scanf("%d",&n);

b=sin(n*K);

c=cos(n*K);
printf("%.2lf\n%.2lf",b,c);
return 0;
}

sin,cos函数的参数是弧度
给个好评吧,lz
在调用函数时,要注意传递的参数是否正确