1.1 布尔变量与零值比较
假设布尔变量名字为flag,它与灵值比较的标注if语句如下:
if (flag ) //表示flag为真
if (!flag) //表示 flag 为假
不要将布尔变量flag直接与TRUE 或者1 、-1、0 等进行比较。
1.2 浮点变量与零值比较
计算机表示浮点数(float 或double 类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分,例如
本来不相等的两个浮点数在计算机中可能就变成相等的了。例如
float a = 10.2222222225,b=10.222222229;
if ( a = b)
cout<<"a = b" <<endl; //结果为真
在数学上a和b是不相等的,但是在32位计算机中它们就是相等的。正确的比较方式:
const double EPSILON = 1e-6;
if( abs(x-y) < = EPSILON) //x等于y
从数学意义上讲,两个不同的数字之间存在无数个实数。计算机只能区分至少1 bit 位不同的数字。浮点数表示只是一种近似的结果。
1.3 指针变量与零值比较
指针变量的零值是“空值”(记为NULL) , 即不指向任何队形,尽管NULL的值与0 相同。但是意义不同。
//假设p是空值的指针,p与零值比较标准写法
if ( p = NULL)
1.4 for 语句的循环控制
不要使用浮点数做计数器来控制循环,因为它可能是不精确地。
不要在循环体内修改循环变量,除了循环控制变量的递增或者递减。防止循环失去控制。
如果计数器从0开始计数,建议for语句循环变量的控制采用“前闭后开区间” 写法,防止出现“差1”错误。
for( int i=0;i<=N-1;i++)//N个数
{
............
}