【发布时间】:2016-07-08 10:01:44
【问题描述】:
我开发了一个 C 程序,可以使用泰勒级数展开计算 sin 函数的值。我还为该程序绘制了流程图。源码如下:
#include<stdio.h>
#include<math.h>
int fact(int n)
{
if(n==0)
{
return 1;
}
else
return n*fact(n-1);
}
int main()
{
int l,i,t=1;
float deg,rad,val=0;
printf("Enter degree of sin: ");
scanf("%f",°);
printf("Enter limit of Taylor series: ");
scanf("%d",&l);
rad = (deg*3.142857)/180;
for(i=1;i<=l;i+=2)
{
val = val + (t*pow(rad,i)/fact(i));
t = t*(-1);
}
printf("\nValue calculated by program, using Taylor Series:\n");
printf("Sin(%f) = %f\n",deg,val);
printf("\nValue calculated using library function:\n");
printf("Sin(%f) = %f\n",deg,sin(rad));
getch();
return 0;
}
这是程序的流程图:
那么这个流程图适合这个程序吗?有没有错误?我是编程新手,对绘制流程图没有很好的了解。
【问题讨论】:
-
3.142857是一个奇怪的 PI,如果n大于 7,您的fact函数可能会溢出int。 -
您既不需要幂函数也不需要阶乘函数。每一项都可以从前一项推导出来,只需简单的乘法、除法和符号更改。
-
我明白了。对于在我的系统上大于 13 的数字的阶乘值形成的大量数字,事实函数可能会溢出。因此,我总是确保泰勒级数的极限不超过 13。那么 PI 呢,我应该使用 3.141592 来代替吗?
-
你的 pi 是
22/7。 -
如果您的程序正在运行,您可能需要通过Code Review 寻求批评。请务必先阅读A guide to Code Review for Stack Overflow users,因为那里有些事情的做法不同!