A. c语言 求sin值
首先,你的测试输入和测试输出的数据是对应不上的,你写错信息了!
输入 3.1415026, 3 的时候,输出才是 -0.07522 。
好了,正确的参考代码如下:
#include<stdio.h>
doublepower(doublex,intn);//计算乘方的函数
doublefact(intn);//计算阶乘的函数
intmain(intargc,charconst*argv[])
{
doublex,s;
intn;
intsign=1;//正负号开关变量,初始状态为正
printf("Pleaseinputadecimalnumberx,apostiveintnumbern: ");
scanf("%lf%d",&x,&n);
for(inti=0;i<=n;i++)
{
s+=sign*power(x,2*i+1)/fact(2*i+1);
sign=-sign;
}
printf("x=%g,n=%d,s=%.5lf ",x,n,s);
return0;
}
//计算x^n
doublepower(doublex,intn)
{
doublep=1;
//这样的循环条件,很简洁。因为函数传入的是形参,也不会对main的变量造成影响。
for(;n--;)
{
p*=x;
}
returnp;
}
//计算n!
doublefact(intn)
{
doublef=1;
//这样的循环条件,很简洁。因为函数传入的是形参,也不会对main的变量造成影响。
for(;n;)
{
f*=n--;
}
returnf;
}
测试截图:(分别测试了角度为 180度、90度、45度的弧度值)
B. C语言编写sin函数求教!
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泰勒公式中的每一项拆成了分子,分母以及每一项前的符号这三项,以便于每一项的累加
C. C/C++:sin1+sin2+sin3......+sinn在c语言中如何实现
答:C语言有专门的三角函数库函数,如sin、cos等。使用时要包含头文件math.h,书写格式如sin(x)、cos(x)等;这些函数的形式参数是double型的且必须以弧度计,返回值也是double型。如本题面中的版式写成C语言就是sin(1)、sin(2)、sin(3)、sin(n)等,得用一个循环语句计算。
D. 用C语言求正弦值
1、C语言中要编写sin函数,实质上要利用sin的泰勒公式,然后根据泰勒公式,将其中的每一项进行分解,最后用循环,累加计算出最终结果。
2、下面用for循环实现sin的算法,程序代码如下:
#include<stdio.h>
#include<math.h>
voidmain()
{
inti;
floatx,sum,a,b;//sum代表和,a为分子,b为分母
chars;
printf("pleaseinputx");
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
",sum);
}
3、 关于上述程序的几点说明:上述程序的计算结果精确到小数点后六位;上述程序运用了sin的泰勒展开式 sin x=x-x^3/3!+x^5/5! ...... ,程序中将sin泰勒公式中的每一项拆成了分子,分母以及每一项前的符号这三项,以便于每一项的累加。
E. C语言中,如何把sin(2)这样的三角函数表达式在编译时预处理掉
预处理的概念就是不解析代码。。既然不解析代码又如何计算sin(2)的值?
楼主遇到的问题可以改写代码成
int
a=(int)sin(2.0);如果需要四舍五入可以改成
int
a=(int)(sin(2.0)+0.5);
当然也能用
#define
SIN2
0
不过不推荐
F. C语言用泰勒级数计算sinx,计算sin1,sin2都正确,sin3不正确,不知道哪里错了,求大神指导
#include<stdio.h>
#include<math.h>
main()
{
doublefactorial(intm);
intn=1,i=1;/*i为计数变量*/
doublesum=0,x,term;/*term为每一项*/
printf("pleaseinputxtocaculatesinx:");
scanf("%lf",&x);
for(;pow(x,2*n-1)/factorial(2*n-1)>=1e-5;)/*判断最后一项是否大于1e-5*/
{
term=pow(-1,n-1)*pow(x,2*n-1)/factorial(2*n-1);/*计算每一项*/
sum=sum+term;
i++;
n++;
}
sum=sum+pow(-1,n-1)*pow(x,2*n-1)/factorial(2*n-1);/*补加上最后一个小于1e-5的项*/
printf("sin(x)=%lf time=%d ",sum,i);
return0;
}
doublefactorial(intm)/*计算阶乘改成double类型,不然在超过13之后的数都溢出了!*/
{
doublefact=1;
if(m==0)
return(fact);
else
{
while(m)
{
fact*=m;
m--;
}
return(fact);
}
}
G. C语言中正弦函数
doublesin(doublex);
sin参数为double类型,返回值也为double
#include<stdio.h>
#include<math.h>
intmain()
{
constdoublepi=3.1415926;
doubled,e;
scanf("%f",&d);
e=sin(2*pi*d/63.84);
printf("%lf ",e);
return0;
}
H. C语言sin怎么用
C语言sin()用来计算参数x 的正玄值,然后将结果返回。返回-1 至1 之间的计算结果。
例子:
#include <math.h>
main(){
double answer = sin(0.5);
printf("sin(0.5) = %f ", answer);
}
执行
sin(0.5) = 0.479426
C语言sin():
sin()原型:double sin(double x)
sin()角度与弧度:
π=180°
1°=π/180
1(rad)=180/π
角度转弧度:用角度乘以π/180
弧度转角度:用弧度乘以180/π,或者用rtod()函数
(8)c语言计算sin2扩展阅读:
与sin相似的acos函数
函数名: acos
功 能:计算并返回arccos(x)值、要求-1<=X<=1
函数与形参类型:
double acos(x)
double x;
程序例:
#include <stdio.h>
#include <math.h> int main(void)
{
double result;
double x = 0.5; result = acos(x);
printf("The arc cosine of %lf is %lf ", x, result);
return 0;
}
I. 怎么用c语言编正弦函数计算
楼上的各位已经提到了scanf输入控制与目标数据类型不匹配的问题,即应改为:scanf("%f",&n);
另外三楼有提到说角度与弧度的问题,就是说sin()和cos()输入需要保证为弧度,所以你需要转换一下,比如你这个90度就应该约是1.57。
其实我觉得应该弄清楚的是为什么在输入控制错误的情况下,还会产生这样的结果。
这是因为输入控制错误,导致n的值没有变化,也就是说后边计算正弦余弦的时候也是计算的n的初始值。你可以在先不改正输入控制的前提下,在输入语句前加一个输出语句,看看n值为多少,如果没猜错的话,应该是0,进而计算的结果也当是正确的。也许你要问了,不是说局部变量自动变量未初始化的话值是随机值么,怎么会是0呢?是的,我也很纳闷,也许适合具体的编译环境有关吧,不同的编译环境对这种情况可能处理会有所不同吧,留待自己去探究咯~
希望能帮到你~欢迎交流~