有人可以用我的while循环来帮助我吗?

时间:2016-01-28 16:58:29

标签: c++ loops

写一个while循环,打印userNum除以2(整数除法),直到达到1.按空格跟踪每个数字。 userNum = 20的示例输出:

20 10 5 2 1

#include <iostream> 
using namespace std;

int main() 
{    
   int userNum = 0;

   userNum = 20;    
   cout << userNum << " ";
   while (userNum > 1)    
   {
      userNum = userNum/2;
      cout << userNum << " ";    
   }    
   cout << endl;

   return 0; 
}

它正确分割,直到我到0,它给我0而不是终止。我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

您发布的代码的行为就像您期望的那样。

我建议稍微改变一下代码作为一种良好的做法。

而不是:

cout << userNum << " ";
while (userNum > 0)    
{
   userNum = userNum/2;
   cout << userNum << " ";    
}    

使用:

while (userNum > 1)    
{
   cout << userNum << " ";    
   userNum = userNum/2;
}    

一般原则是:

while ( <conditional> )
{
   // Use the data

   // Change the data as the last operation in the loop.
}

for循环为这些提供了自然占位符。

for ( <initialize data>; <conditional>; <update data for next iteration> )
{
   // Use the data
} 

如果你要切换到我推荐的for循环,你的代码将是:

for ( userNum = 20; userNum > 0; userNum /= 2 )
{
   cout << userNum << " ";
}

答案 1 :(得分:0)

http://ideone.com/SvU8z3

#include <iostream> 
using namespace std;

int main() 
{    
   int userNum = 20;

   while (userNum > 0)    
   {
      cout << userNum << " ";    
      userNum = userNum/2;
   }    
   cout << endl;

   return 0;
}

答案 2 :(得分:0)

我尝试了所有这些选项,但没有一个与其他测试一起使用,因此我做了一些修改。这适用于zybooks。

#include <iostream>
using namespace std;

int main() {
   int userNum = 0;

   userNum = 40;

cin>>userNum;
while(userNum>1)
{
   userNum=userNum/2;
   cout<<userNum<<" ";

}
   cout << endl;

   return 0;
}