天天看点

关系运算符的妙用

由关系运算符的性质我们知道

(a==b),(a!=b),(a>=b),(a<=b)的返回值有两种

分别是 1 或 0

因此我们可以利用这个性质编写一些简易美观的代码

例:判断是否为闰年

通常情况下,我们使用if-else语句来判断:

--------------------------------------

#include <stdio.h>

int f1(int year)

{

    if(year<4){

        return 0;

    }else if(year<100){

        if(year%4==0){

            return 1;

        }

    }else if(year<400){

        if(year%4==0 && year%100!=0){

    }else{

        if(year%400==0){

        }else if(year%4==0 && year%100!=0){

    }

}

int main()

{  

    int year;//要判断的年份

    scanf("%d",&year);

    if(year>0){

        if( f1(year) ){

            printf("Yes");

        }else{

            printf("No");

    return 0;

我们可以明显看到,代码十分冗长难读,写起来费时费力

但是我们可以利用关系运算符的性质,使我们的代码更加精炼易读

int f2(int year)

    //tag判断是否为闰年

    int tag = (year%4==0) - (year%100==0) + (year%400==0);

    //tag=1是闰年;tag=0不是闰年

    if( tag ){

        return 1;

        if( f2(year) ){

1)其中tag的值始终为1或0,方便if-else判断

2)不需要判断year与4,100,400的大小关系

当0<year<4时,      (year%4==0)为0      (year%100==0)为0     (year%400==0)为0;

当4<=year<100时,   (year%4==0)为1或0; (year%100==0)为0     (year%400==0)为0;

当100<=year<400时, (year%4==0)为1或0; (year%100==0)为1或0  (year%400==0)为0;

当year>400时,      (year%4==0)为1或0; (year%100==0)为1或0  (year%400==0)为1或0;

3)加上适当的注释有助于阅读

4)tag的值可以用在多处用于判断year是否为闰年