一、if、else
float变量与“零值”进行比较:
float fTestVal = 0.0;
if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); // EPSINON为之前定义好的精度
float和double类型的数据都是有精度限制的,这样直接拿来和0.0比,当然不正确
如果一个数落在[0.0- EPSINON,0.0+ EPSINON]这个闭区间内,我们认为在某个精度内他的值和零值相等,否则不相等。
扩展一下,把0.0替换为任何一个你想比较的浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在这个精度范围内。
同时,也不要在很大的浮点数和很小的浮点数之间进行运算
if的其他注意事项:
先处理正常情况,再处理异常情况
在编写代码时要使得正常情况的执行代码清晰,确认那些不常发生的异常情况处理代码不会掩盖正常的执行路径,把正常情况放在if后面而不是else后面
二、switch、case
1、每个switch语句后绝对不要忘了加break,否则会导致多个分枝重叠(除非有意使多分枝重叠)
2、最后必须使用default语句,即使程序真的不需要default处理,但也要应该保留语句:
default:
break;
3、case后面的语句只能是整型或者字符型的常量或者常量表达式
4、排序问题:按字母或者数字顺序排序各条case语句
switch(variable)
{
case 'A':
//program code
break;
case 'B':
//program code
break;
case 'C':
//program code
break;
default:
break;
}
5、如果有多个正常情况或者异常情况,把正常情况放在前面
2、最后必须使用default语句,即使程序真的不需要default处理,但也要应该保留语句:
default:
break;
3、case后面的语句只能是整型或者字符型的常量或者常量表达式
4、排序问题:按字母或者数字顺序排序各条case语句
switch(variable)
{
case 'A':
//program code
break;
case 'B':
//program code
break;
case 'C':
//program code
break;
default:
break;
}
5、如果有多个正常情况或者异常情况,把正常情况放在前面
6、按执行频率排列case语句,把最常执行的情况放在前面,而把最不常执行的情况放在后面
7、将default子句只用于检查真正地默认情况
三、do、while、for
1、break关键字表示终止本层循环,continue表示终止本轮循环,进入下一轮循环
2、在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU切跨循环层的次数
3、把循环嵌套控制放在3层以内