这个流程图对吗?

我开发了一个C程序,可以使用泰勒级数展开计算sin函数的值。 我还绘制了该程序的流程图。 源代码如下:

#include #include 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",&deg); 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; } 

以下是该程序的流程图:
流程图页面:1
流程图页面:2

那么该流程图适用于该程序吗? 有什么错误吗? 我是一个更新鲜的编程,并且在绘制流程图方面没有很好的知识。

使用阶乘函数的风险在于它很快就会超出int范围。 不需要具有幂函数或因子函数,因为泰勒级数的每个项可以通过使用乘法和除法从前一项导出。

乘数是不言而喻的,只是角度的平方。

除数是i * (i - 1) ,是因子的下两个项。

您将看到我已删除了您的符号更改因子t ,因为要将前一项的符号从neg更改为pos,或将pos更改为neg,您只需乘以-1 。 但我甚至通过使用(1 - i)反转(i - 1)的符号来删除它。

该系列的第一个术语就是rad所以我rad开始。

 #include  #include  int main() { int n, i; // don't use `l` for a variable name float deg, rad, radsq, val, term; printf("Enter degree of sin: "); if(scanf("%f", &deg) != 1) { return 1; // or other error handling } printf("Enter limit of Taylor series: "); if(scanf("%d", &n) != 1) { return 1; // or other error handling } rad = deg * 3.14159265f / 180; // proper value for pi radsq = rad * rad; term = rad; // first term is rad val = term; // so is series sum for(i = 3; i <= n; i += 2) // we've done the first term { term *= radsq / (i * (1 - i)); // see explanation val += term; // sum the series } 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)); return 0; } 

两种情况下的流程图都没有错误,因为1)for循环在main函数体中,而不在fact函数体中。 2)对于事实递归函数,正确的流聊聊将在这里: http : //improvec.blogspot.in/2010/12/flow-chart-for-recursive-function-of.html

现在,我知道你知道for循环连接的基本流程图再次尝试主函数并连接两个流程图。