C ++的嵌套循环

时间:2013-08-12 00:07:22

标签: c++ loops nested

我必须编写一个完成算法的程序,每行最多10个术语。我有一个问题1)当它达到1和2时停止循环)如何继续下一个递增数字的循环。这就是我应该做的和我拥有的。我应该得到一个低期,高期和增量。第一个计算从低位开始,并完成,当完成时,它应该循环回到低位+增量并再次进行计算。这应该循环,直到达到高数并完成计算。没有完成所有代码,我遇到了麻烦。

 void ulamCalc(double numOne, double numTwo,
               double increment)
 {
     int countOne, countTwo;
     countTwo = 1;

     do
     {
         for(count = 1; count <= 10; count++)
         {
             cout << setw(7) << numOne;
             if(numOne == 1)
             {
                 cout<< endl;
                 cout << OUTPUT_TERM << countTwo;
                 cout << endl << endl;
             }
                     countTwo++;
             if(static_cast<int>(numOne) % 2 == 0)
                 numOne = numOne / 2;
             else if(static_cast<int>(numOne) % 2 == 1)
                 numOne = (numOne * 3) + 1;         
         }
         cout << endl;
     } while(numOne >= 1);

此循环在1处停止并输出术语数,但随后是其他行将重复最后3次计算。有人可以帮我弄这个吗?

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的任务,但是这里有一些想法可以帮助你更轻松地写这个:

  • 为您的变量提供更好的名称。例如。 lowterm highterm代替numOne numTwo
  • 使用int代替double。由于您显示的输入和示例输出是整数和整数,因此没有真正的理由在此处使用double
  • 将主要步骤分解为单独的功能。

这是一个让你入门的例子:

void ulamCalc(int low, int high, int inc)
{
  for(int term = low; term < high; term += inc)
  {
    process_term(term);
  }
}

int main()
{
  ulamCalc(100, 500, 200);
}

输出:

100 50 25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 
300 150 75 226 113 340 170 85 256 128 64 32 16 8 4 2 

我将process_term作为为读者练习