怎么用c语言编正弦函数计算
#include<math.h>
main()
{
float n;
double b,c;
scanf("%d",&n);
b=sin(n);
c=cos(n);
printf("%.2lf\n%.2lf",b,c);
return 0;
}
输入90 最终的值 是0.00和1.00 正弦余弦刚好反了,是怎么回事? 展开
1、C语言中要编写sin函数,实质上要利用sin的泰勒公式,然后根据泰勒公式,将其中的每一项进行分解,最后用循环,累加计算出最终结果。
2、下面用for循环实现sin的算法,程序代码如下:
#include<stdio.h>
#include<math.h>
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泰勒公式中的每一项拆成了分子,分母以及每一项前的符号这三项,以便于每一项的累加。
楼上的各位已经提到了scanf输入控制与目标数据类型不匹配的问题,即应改为:scanf("%f",&n);
另外三楼有提到说角度与弧度的问题,就是说sin()和cos()输入需要保证为弧度,所以你需要转换一下,比如你这个90度就应该约是1.57。
其实我觉得应该弄清楚的是为什么在输入控制错误的情况下,还会产生这样的结果。
这是因为输入控制错误,导致n的值没有变化,也就是说后边计算正弦余弦的时候也是计算的n的初始值。你可以在先不改正输入控制的前提下,在输入语句前加一个输出语句,看看n值为多少,如果没猜错的话,应该是0,进而计算的结果也当是正确的。也许你要问了,不是说局部变量自动变量未初始化的话值是随机值么,怎么会是0呢?是的,我也很纳闷,也许适合具体的编译环境有关吧,不同的编译环境对这种情况可能处理会有所不同吧,留待自己去探究咯~
希望能帮到你~欢迎交流~
#include<stdio.h>
#include<math.h>
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<stdio.h>
#include<math.h>
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;
}
#include<math.h>
#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
在调用函数时,要注意传递的参数是否正确