当前位置:嗨网首页>书籍在线阅读

09-逻辑运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.3 逻辑运算符

读者已经很熟悉了, if 语句和 while 语句通常使用关系表达式作为测试条件。有时,把多个关系表达式组合起来会很有用。例如,要编写一个程序,计算输入的一行句子中除单引号和双引号以外其他字符的数量。这种情况下可以使用逻辑运算符,并使用句点( . )标识句子的末尾。程序清单7.6用一个简短的程序进行演示。

程序清单7.6  chcount.c 程序

// chcount.c  -- 使用逻辑与运算符
#include <stdio.h>
#define PERIOD '.'
int main(void)
{
     char ch;
     int charcount = 0;
     while ((ch = getchar()) != PERIOD)
     {
          if (ch != '"' && ch != '\'')
               charcount++;
     }
     printf("There are %d non-quote characters.\n", charcount);
     return 0;
}

下面是该程序的一个输出示例:

I didn't read the "I'm a Programming Fool" best seller.
There are 50 non-quote characters.

程序首先读入一个字符,并检查它是否是一个句点,因为句点标志一个句子的结束。接下来, if 语句的测试条件中使用了逻辑与运算符 && 。该 if 语句翻译成文字是“如果待测试的字符不是双引号,并且它也不是单引号,那么 charcount 递增 1 ”。

逻辑运算符两侧的条件必须都为真,整个表达式才为真。逻辑运算符的优先级比关系运算符低,所以不必在子表达式两侧加圆括号。

C有3种逻辑运算符,见表7.3。

表7.3 3种逻辑运算符

| 逻辑运算符 | 含义 | | :----- | :----- | :----- | :----- | | && | 与 | | || | 或 | | ! | 非 |

假设 exp1exp2 是两个简单的关系表达式(如 car > ratdebt == 1000 ),那么:

  • 当且仅当 exp1exp2 都为真时, exp1 && exp2 才为真;
  • 如果 exp1exp2 为真,则 exp1 || exp2 为真;
  • 如果 exp1 为假,则 !exp1 为真;如果 exp1 为真,则 !exp1 为假。

下面是一些具体的例子:

5 > 2 && 4 > 7为假,因为只有一个子表达式为真;
5 > 2 || 4 > 7为真,因为有一个子表达式为真;
!(4 > 7)为真,因为4不大于7。

顺带一提,最后一个表达式与下面的表达式等价:

4 <= 7

如果不熟悉逻辑运算符或者觉得很别扭,请记住: ( 练习 && 时间 )== 完美。