2.4.8 陷阱:无限循环

2013-10-07 14:57:39 · 作者: · 浏览: 69

2.4.8  陷阱:无限循环

只要while之后的布尔表达式为true,while或do-while循环就不会终止。布尔表达式通常包含一个将由循环主体更改的变量。变量应不断更改,最终使布尔表达式求值为false,从而终止循环。然而,假如不小心让布尔表达式始终为true,循环就会一直运行。这种循环称为无限循环。

首先描述一个能终止的循环。以下C++(www.cppentry.com)代码输出小于12的所有正偶数。也就是说,它将逐行输出数字2,4,6,8和10,然后循环终止:

  1. x = 2;  
  2. while (x != 12)  
  3. {  
  4.     cout << x << endl;  
  5.     xx = x + 2;  
  6. }  
  7.  

每次循环迭代,x的值都递增2,直到变成12。此时,单词while之后的布尔表达式不再为true,所以循环结束。

现在假设要输出小于12的奇数,而不是偶数。你可能错误地认为只需这样修改初始化语句:

  1. x = 1

但这是错误的,它会导致无限循环。因为x的值会从11变成13,永远不等于12,所以循环永远不会终止。

用==或!=检查一个数来终止循环,很容易出现无限循环问题。处理数字时,更安全的做法始终是测试它是否已超过了一个值。例如,将前面while循环的第一行改为以下语句,就可将x初始化为任意数字,循环始终都能正常终止:

  1. while (x < 12

无限循环的程序不能自动停止,除非强行终止。初学编程(www.cppentry.com)的读者可能写出含有无限循环的程序,所以最好学会怎样强行终止程序。强行终止程序的方法因系统而异。在很多系统上,按住键盘上的Control+C(按Ctrl键的同时按C键)就可以终止程序。

自测题

28.以下代码的输出是什么(假定它们已嵌入一个正确的程序,而且x已声明为int类型)?

  1. x = 10;   
  2. while (x > 0)  
  3. {  
  4.     cout << x << endl;  
  5.     xx = x - 3;  
  6. }  

29.在上一题中,如果将>替换为<,会输出什么?

30.以下代码的输出是什么(假定它们已嵌入一个正确的程序,而且x已声明为int类型)?

  1. x = 10;   
  2. do  
  3. {  
  4.     cout << x << endl;  
  5.     xx = x - 3;  
  6. } while (x > 0);  

31.以下代码的输出是什么(假定它们已嵌入一个正确的程序,而且x已声明为int类型)?
  1. x = -42;   
  2. do  
  3. {  
  4.     cout << x << endl;  
  5.     xx = x - 3;  
  6. } while (x > 0);  

32.while语句和do-while语句有何重要区别?

33.以下代码的输出是什么(假定它们已嵌入一个正确的程序,而且x已声明为int类型)?

  1. x =10;   
  2. while (x > 0)  
  3. {  
  4.     cout << x << endl;  
  5.     xx = x + 3;  
  6. }  

34.写一个完整的C++(www.cppentry.com)程序,使其逐行输出1~20的整数。该程序不执行别的任务。