zoukankan      html  css  js  c++  java
  • 读书笔记_代码大全_第16章_控制循环

    控制循环

    愿我的读书笔记能带你翻过20页的书 http://www.cnblogs.com/jerry19880126/

    首先复习一下循环的种类,主要分成for循环与while循环。其中for循环在已知执行次数时使用,比如for(int i = 0; i < 10; ++i)就是指针循环10次;while循环多用于执行次数未知的场合,往往要添加一定的条件,比如while(条件){…},当条件满足时会执行循环体内的代码,执行完一次后,再去判断条件是否满足,依此规律执行下去。while还有do…while的变式,即do{…}while(条件),这种情况下循环体是至少执行一次的。

    但在实际编程中,更常用带退出的循环,即while和break组合使用,比如

    1 while(true)
    2 {
    3 …
    4 if(满足某个退出条件) { break;}
    5 …
    6 }

    Soloway展开的一项研究指出,这种带退出的循环结构要比其他循环结构更接近于人类思考方式,学员们在一份理解力测试中的得分提高了25%。

    本章给出了书写循环的一些好的方法:

    (1) 首先是进入循环,应该只从一个位置进入循环,不要像下面这样用goto语句:

    1 goto Start;
    2 while(表达式)
    3 {
    4 …
    5 Start:
    6 …
    7 }

    (2) 用“{”和“}”把循环中的语句括起来,哪怕循环体只有一句话:

    1 while(表达式)
    2 {
    3 cout << “Hello” << endl;
    4 }

    这个方法同样适用于if语句,尽管一条语句加不加大括号都是可以的,但加上后会使可读性提高,而且万一以后要对代码进行扩充,就会显得比较方便。

    (3) 一个循环只做一件事

    循环应跟子程序一样,只做一件事并把它做好,一心两用的结果就是质量差的代码。

    (4) 退出循环时,不要为了终止循环而胡乱改动for循环下标,如:

     1 for(int i = 0; i < 100; ++i)
     2 {
     3     …
     4     if(条件)
     5     {
     6         i = 100;
     7     }
     8     …
     9 }

    这样为了终止循环而在循环体内给下标赋值的事情是非常可怕的,为什么不用一句简单的break呢?

    (5) 避免出现依赖于循环下标最终取值的代码

    这种不好的写法其实我自己也常常这样做,比如:

     1 int i = 0;
     2 for(i = 0; i < 100; ++i)
     3 {
     4     if(entry[i] == valueToFind)
     5     {
     6         break;
     7     }
     8 }
     9 if(i < 100) {cout << “find the value” << endl;}
    10 else {…}

    这样做的代价是把i的作用域由块提升到了函数内,这就不符合作用域越小越好的准则了。我们可以这样来改进代码:

     1 bool found = false;
     2 for(int i = 0; i < 100; ++i)
     3 {
     4     if(entry[i] == valueToFind)
     5     {
     6         found = true;
     7         break;
     8     }
     9 }
    10 if(found) {cout << “find the value” << endl;}
    11 else {…}

    通过添加bool类型的found变量,有效地使i局限到块内,而且提升了程序的可读性。

    (6) 循环次数计数器不要用浮点表示

    有时常常用循环次数来表示循环终止的条件,比如:

    1 int count = 0;
    2 while(count < 10)
    3 {
    4     …
    5     ++ count;
    6 }

    注意count不要用float和double,因为浮点的表示是近似的,99999.0+1的结果很可能还是99999.0!

    (7) 控制循环体的长度

    循环要尽可能地短,这样可以一目了然,一些研究表明,把嵌套控制在3层以内地比较好,另外,把长循环的内容移到子程序里会提升循环的可读性。

    下面列出本章的要点:

    (1)     循环本身是复杂的控制结构,所以保持循环体的简单将有助于别人阅读你的代码;

    (2)     循环的入口要单一,出口也要明确;

    (3)     避免出现依赖于循环下标最终取值的代码;

    (4)     仔细考虑循环,确保在每一种情况下都能运行正常,并且所有可能的条件下都能正常退出。

    <end>

  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/jerry19880126/p/2833155.html
Copyright © 2011-2022 走看看