ZKX's LAB

用C语言求正弦值? c语言循环泰勒展开式

2021-04-26知识26

用sinx的泰勒展开式编写C语言程序 #includeinclude计算n的阶乘*/int factor(int n){if(n=1)return 1;elsereturn factor(n-1)*n;}得到分子的值*/double get_numerator(double x,int order){return pow(x,order);求x^order}得到分母的值*/double get_denominator(int n){return factor(n);求n的阶乘}获得第n项的符号,即(-1)^n*/int get_symbol(int n){if(n%2=0)/n是偶数return 1;elsereturn-1;}int main(){int i;double x;double sin_x=0;double tmp=0;printf(\"please input the x:\\n\");scanf(\"%lf\",&x);for(i=0;i+){tmp=sin_x;暂时保存上一步得到的sin值sin_x+get_numerator(x,2*i+1)/get_denominator(2*i+1)*get_symbol(i);if(fabs(sin_x-tmp))/精度满足要求break;}printf(\"sin(%lf)=lf\\n\",x,sin_x);return 0;}/*学好C语言,首先应该把语言的语法学好,这也是基础。尤其是注意指针部分,可以说这是C语言的精髓,也是C语言能够直接操作内存的犀利之处。其次,应该多练代码,并且注意代码的可读性,规范性。最好,能够亲身用C语言参加某个项目实践,毕竟实践出真知。至于之后C++或者Java的学习,要看自己的发展规划了。不过学好C语言,绝对对你今后学习其他语言有很大。

怎么用c语言编正弦函数计算 首先:程序应百该这样改!includeincludemain(){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的话,那就这样改!答includeincludemain(){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;}

求C语言大神,利用泰勒公式计算sin(x)的值,要求输入x(弧度值),当精度小于10的负5次方时程 您好,这个题其实不难,控制好溢出套用泰勒展开式就好:C语言程序如下,VC+6中测试通过:includeincludedefine PI 3.1415926/*定义π的值*/unsigned long fac(unsigned long n)/*计算阶乘*/{unsigned long i,m;for(i=0,m=1;i;i+){if(i。0)/*0的阶乘为1*/m=m*i;}return m;}double fsin(double x)/*计算sin(x)*/{double tmp,t;tmp存储每次计算完的值*/int i;t代表泰勒展开式每一项*/while(x>;=2*PI)/*最多只有2π个弧度*/x=x-2*PI;弧度范围转换*/for(i=1,tmp=0.0;i;i+)/*防止溢出*/{/设置i=6的原因是在VC6中13的阶乘会溢出t=pow(x,2*i-1)/fac(2*i-1);x^n/n。n为从1开始的奇数*/if(t>;=0.00001)/*控制精度不小于10的-5次方*/tmp=tmp+pow(-1,i-1)*t;确定各项的正负*/elsebreak;}return tmp;}int main(){double r,tmp;printf(\"输入弧度值(>;=0),180°对应3.1415926弧度,以此类推.\\n\");printf(\"弧度(rad):\");scanf(\"%lf\",&r);tmp=fsin(r);printf(\"%.5lf\\n\",tmp);} 假如要测试sin(30°),由于30°=π/6=0.523599rad,故测试时需要输入:0.523599:这个题关键是控制好溢出,比如当i=7时,2*i-1=13,而13的阶乘是个很大的数字,(在VC6中)已经。

#c语言循环泰勒展开式

随机阅读

qrcode
访问手机版