关系运算、条件运算


数学上有比较的运算,像是大于、等于、小于等,C 中也提供了这些运算符,这些运算符称为关系运算符(Relational operator)或比较运算符(Comparison operator),它们有大于(>)、不小于(>=)、小于(<)、不大于(<=)、等于 (==)以及不等于(!=)。

请看看下面这几行会显示哪些数值:

printf("10 > 5\t\t%d\n", 10 > 5);
printf("10 >= 5\t\t%d\n", 10 >= 5);
printf("10 < 5\t\t%d\n", 10 < 5);
printf("10 <= 5\t\t%d\n", 10 <= 5);
printf("10 == 5\t\t%d\n", 10 == 5);
printf("10 != 5\t\t%d\n", 10 != 5);

程序的执行会显示 0 或 1,分别表示真(成立)或假(不成立),如下所示:

10 > 5          1
10 >= 5         1
10 < 5          0
10 <= 5         0
10 == 5         0
10 != 5         1

在 C 中,所有非零的数值在作为条件式时都被视为真。

关系运算在使用时有个即使是程序设计老手也可能犯的错误,且不容易发现,也就是等于运算符(==),注意它是两个连续的等号(=)所组成,而不是一个等号,一个等号是指定运算符,这点必须相当注意,例如若有两个变量xy要比较是否相等,是写成x == y,而不是x = y,后者的作用是将y的值指定给x,而不是比较运算。

既然谈到了条件式的问题,我们来介绍 C 中的条件运算符(Conditional operator),它的使用方式如下:

条件式 ? 成立返回值 : 失败返回值

条件运算符的返回值依条件式的结果而定,如果条件式的结果为真,则返回冒号前的值,若为假,则返回冒号后的值,下面这个程序可以作个简单的示范:

#include <stdio.h>

int main(void) {
    int score = 0;

    printf("输入学生分数:");
    scanf("%d", &score);

    printf("该生是否及格?%c\n", score >= 60 ? 'Y' : 'N');

    return 0;
}

执行结果:

输入学生分数:59
该生是否及格?N

这个程序会依你所输入的分数来判断学生成绩是否不小于 60 分,以决定其是否及格,如果是则返回字符'Y',否则返回字符'N',下面这个程序可以判断使用者输入是否为奇数:

#include <stdio.h>

int main(void) {
    int input = 0;

    printf("输入整数:");
    scanf("%d", &input);

    printf("该数为奇数?%c\n", input % 2 ? 'Y' : 'N');

    return 0;
}

执行结果:

输入整数:3 
该数为奇数?Y

在 C 中非零数值都可以表示真,而 0 表示假,所以输入的数为奇数时,就不能被 2 整除,所以余数一定不是 0,在条件式中表示真, 因而返回字符'Y',若数值为偶数,则被 2 整除,所以余数为 0,在条件式中表示假,所以返回字符'N'


展开阅读全文