循环并替换C中循环语句中变量的值?

循环并替换C中循环语句中变量的值?,c,function,loops,C,Function,Loops,我正在编写一个程序,用户在其中输入一些值,并根据这些值,程序继续执行以下算法: 1. Set INITIAL cd=0.34 2. CALCULATE Vt using cd=0.34 3. CALCULATE Re using Vt. 4. CALCULATE new_cd using Re and Vt 5. USING new_cd, REPEAT 2 TO 4 until new_cd=cd 6. IF new_cd=cd THEN: FOR(i=0;i<

我正在编写一个程序,用户在其中输入一些值,并根据这些值,程序继续执行以下算法:

1. Set INITIAL cd=0.34

2. CALCULATE Vt using cd=0.34

3. CALCULATE Re using Vt.

4. CALCULATE new_cd using Re and Vt

5. USING new_cd, REPEAT 2 TO 4 until new_cd=cd

6. IF new_cd=cd THEN:
        FOR(i=0;i<=5;i++):      //Proceeds for 5 times with value of D
                CALCULATE D
            FOR(t=1;t<=4;t++):
                    Calculate H;
                    Calculate L;
                    CALCULATE L/D;
 7. WITH D=D+2 REPEAT Step 6.
1。设置初始cd=0.34
2.使用cd=0.34计算Vt
3.用Vt计算Re。
4.使用Re和Vt计算新的_cd
5.使用新的\u cd,重复2到4次,直到新的\u cd=cd
6.如果new_cd=cd,则:

对于(i=0;i,您可能由于无限递归而遇到堆栈溢出。 请重构函数
计算新cd
,如下所示:

  • 摆脱递归函数调用;它是完全无用的,也是导致问题的主要原因
  • 下定决心:使用全局变量(ugh)或pass
    cd
    作为参数(注意
    temp
    如何被第一条语句覆盖)
    •   if (rounded_cd1 == temp)
      
      这是至关重要的

      比较浮点数是否相等是一个坏主意,正如

    • 特别是
      float
      仅提供7的精度。最好选择
      double
    • 与其做
      f==g
      不如做
      (epsilon>fabs(f-g))
      epsilon
      反射您需要的精度,代码能够达到(见上文1),比如
      const double epsilon=0.00001;

    • 代码不完整。需要添加完整的代码!如果@MFISHERKDX有帮助,则需要将代码重构为单独的函数。目前,这是一个问题。您可能希望阅读以下内容:请不要进行使当前答案无效的编辑。
        if (rounded_cd1 == temp)