1月14日 C Primer Plus学习
6.3 用关系运算符和表达式比较大小
while循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中间的运算符叫做关系运算符。

虽然关系运算符也可用来比较浮点数,但是要注意:比较浮点数时,尽量只使用<和>。
因为浮点数的舍入误差会导致在逻辑上应该相等的两数却不相等。
6.3.1 什么是真
对C而言,表达式为真的值是1,表达式为假的值是0。
一些 C程序使用下面的循环结构,由于1为真,所以循环会一直进行。
while(1)//之前C# 用习惯了,把while (true)放进C 里出毛病,终于知道怎么写了。
{
}
6.3.2 其它真值
一般而言,所有的非零值都视为真,只有0被视为假。
也可以说,只要测试条件的值为非零,就会执行 while 循环。这是从数值方面而不是从真/假方面来看测试条件。要牢记:关系表达式为真,求值得1;关系表达式为假,求值得0。因此,这些表达式实际上相当于数值。
6.3.3 真值的问题
不要在本应使用==的地方使用=。一些计算机语言(如,BASIC)用相同的符号表示赋值运算符和关系相等运算符,但是这两个运算符完全不同。
赋值运算符把一个值赋给它左侧的变量;而关系相等运算符检查它左侧和右侧的值是否相等,不会改变左侧变量的值(如果左侧是一个变量)。
6.3.4 新的_Bool 类型
C99专门针对表示真/假值的变量新增了_Bool类型。
C99提供了stdbool.h头文件,该头文件让bool成为_Bool的别名,而且还把true和false分别定义为1和0的符号常量。包含该头文件后,写出的代码可以与C++兼容,因为C++把bool、true和false定义为关键字。
如果系统不支持_Bool类型,导致无法运行该程序,可以把_Bool替换成 int即可。
6.3.5 优先级和关系运算符
关系运算符的优先级比算术运算符(包括+和-)低,比赋值运算符高。
关系运算符之间有两种不同的优先级。
高优先级组: <<= >>=
低优先级组: == !=
与其他大多数运算符一样,关系运算符的结合律也是从左往右。

6.4 不确定循环和计数循环
不确定循环,是指在测试表达式为假之前,预先不知道要执行多少次循环。
计数循环,这类循环在执行循环之前就知道要重复执行多少次。
在创建一个重复执行固定次数的循环中涉及了3个行为:
1.必须初始化计数器;
2.计数器与有限的值作比较;
3.每次循环时递增计数器。
6.5 for 循环
for循环把上述3个行为(初始化、测试和更新)组合在一处。
关键字for 后面的圆括号中有3个表达式,分别用两个分号隔开。
第1个表达式是初始化,只会在for循环开始时执行一次。
第 2 个表达式是测试条件,在执行循环之前对表达式求值。
for 循环的结构:

6.5.1 利用for 的灵活性
可以用字符代替数字计数。
可以自己决定如何使用for循环头中的表达式,这使得在执行固定次数的循环外,还可以做更多的事情。
浙公网安备 33010602011771号