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

10-用关系运算符和表达式比较大小

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

6.3 用关系运算符和表达式比较大小

while 循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式(relational expression),出现在关系表达式中间的运算符叫作关系运算符(relational operator)。前面的示例中已经用过一些关系运算符,表6.1列出了C语言的所有关系运算符。该表也涵盖了所有的数值关系(数字之间的关系再复杂也没有人与人之间的关系复杂)。

表6.1 关系运算符

| 运算符 | 含义 | | :----- | :----- | :----- | :----- | | < | 小于 | | <= | 小于或等于 | | == | 等于 | | >= | 大于或等于 | | > | 大于 | | != | 不等于 |

关系运算符常用于构造 while 语句和其他C语句(稍后讨论)中用到的关系表达式。这些语句都会检查关系表达式为真还是为假。下面有3个互不相关的 while 语句,其中都包含关系表达式。

while (number < 6)
{
     printf("Your number is too small.\n");
     scanf("%d", &number);
}
while (ch != '$')
{
     count++;
     scanf("%c", &ch);
}
while (scanf("%f", &num) == 1)
     sum = sum + num;

注意,第2个 while 语句的关系表达式还可用于比较字符。比较时使用的是机器字符码(假定为ASCII)。但是,不能用关系运算符比较字符串。第11章将介绍如何比较字符串。

虽然关系运算符也可用来比较浮点数,但是要注意:比较浮点数时,尽量只使用<和>。因为浮点数的舍入误差会导致在逻辑上应该相等的两数却不相等。例如,3乘以1/3的积是1.0。如果用把1/3表示成小数点后面6位数字,乘积则是.999999,不等于1。使用 fabs() 函数(声明在 math.h 头文件中)可以方便地比较浮点数,该函数返回一个浮点值的绝对值(即,没有代数符号的值)。例如,可以用类似程序清单6.5的方法来判断一个数是否接近预期结果。

程序清单6.5  cmpflt.c 程序

// cmpflt.c -- 浮点数比较
#include <math.h>
#include <stdio.h>
int main(void)
{
     const double ANSWER = 3.14159;
     double response;
     printf("What is the value of pi?\n");
     scanf("%lf", &response);
     while (fabs(response - ANSWER) > 0.0001)
     {
          printf("Try again!\n");
          scanf("%lf", &response);
     }
     printf("Close enough!\n");
     return 0;
}

循环会一直提示用户继续输入,除非用户输入的值与正确值之间相差不大于0.0001:

What is the value of pi?
3.14
Try again!
3.1416
Close enough!