博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记_代码大全_第16章_控制循环
阅读量:4709 次
发布时间:2019-06-10

本文共 1898 字,大约阅读时间需要 6 分钟。

控制循环

愿我的读书笔记能带你翻过20页的书 

首先复习一下循环的种类,主要分成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>

转载于:https://www.cnblogs.com/jerry19880126/archive/2012/12/25/2833155.html

你可能感兴趣的文章
做衡八的日子(转自VFleaking)
查看>>
day7.条件和循环
查看>>
(转)log4j(二)——如何控制日志信息的输出?
查看>>
JavaScript简介
查看>>
php.ini中safe_mode开启对PHP系统函数的影响
查看>>
gdb
查看>>
ubuntu清理旧内核
查看>>
Node之安装篇
查看>>
Android的Animation之LayoutAnimation使用方法
查看>>
二分图最大匹配算法-Hopcroft-Karp模板
查看>>
发布和订阅的删除
查看>>
使用LinQ进行增删改查
查看>>
关于iOS适配问题
查看>>
C语言博客作业--嵌套循环
查看>>
内部类 ( Inner Class )
查看>>
Linux 使用者 群组 权限
查看>>
【PAT】B1047 编程团体赛(20 分)
查看>>
iPad软件提交注意事项
查看>>
约束和异常处理
查看>>
css 布局
查看>>