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循环头中的表达式,这使得在执行固定次数的循环外,还可以做更多的事情。

posted @ 2022-02-07 10:37  shucharjer  阅读(28)  评论(0)    收藏  举报