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

#include<stdio.h>#include<math.h>main(){floatn;doubleb,c;scanf("%d",&n);b=sin(n);c=co... #include<stdio.h>
#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 正弦余弦刚好反了,是怎么回事?
展开
 我来答
tattackor
推荐于2017-09-08 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:891万
展开全部

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泰勒公式中的每一项拆成了分子,分母以及每一项前的符号这三项,以便于每一项的累加。

无需崇拜
2013-11-28 · TA获得超过254个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:85.3万
展开全部
  1. 楼上的各位已经提到了scanf输入控制与目标数据类型不匹配的问题,即应改为:scanf("%f",&n);

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

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

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dwjchdu
推荐于2017-10-15 · TA获得超过5914个赞
知道大有可为答主
回答量:4576
采纳率:60%
帮助的人:1109万
展开全部
首先:程序应该这样改!
#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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Robby927
2013-11-28 · TA获得超过134个赞
知道答主
回答量:126
采纳率:100%
帮助的人:34.6万
展开全部
哥们 你的这个不对啊 不管n输入多少结果多是一样的 因为你输入n 的时候时候按照整形输入的 %d这就错了 而且sin cos的形参都是double 这个是弧度 不是角度 你要转化成弧度才能计算的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
timelvzhn
2013-11-28 · 超过14用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:32.9万
展开全部
#include<stdio.h>
#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
在调用函数时,要注意传递的参数是否正确
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式