YoungLee的手帐

Young Lee

对于逻辑运算符理解的误区

21
2
0
2023-11-03

今天在写作业时遇到了一个问题,题目是

写一个输入三个整数然后输出最大数的程序

我写的代码是

#include <stdio.h>  

  int main(){
  int a,b,;
  scanf("%d %d %d",&a,&b,&c);
   if(a>b>c||a>c>b){
  	printf("max=%d",a);
   }
  if(b>a>c||b>c>a){
  	printf("max=%d",b);
  }
  if(c>a>b||c>b>a){
  	printf("max=%d",c);
  	}
}

但是他返回的结果是

这里的话就是我对逻辑运算符理解有误区了

实际上,表达式a>b>c并不用于同时比较三者之间的关系。它是按照优先级和结合性来进行计算的,首先计算a>b,得到一个布尔结果(0或者1),然后再用这个结果与c进行比较。

正确代码:

#include <stdio.h>  

  int main(){
  int a,b,c;
  scanf("%d %d %d",&a,&b,&c);
   if(a>b&&a>c||a>c&&a>b){
  	printf("max=%d",a);
   }
  if(b>a&&b>c||b>c&&b>a){
  	printf("max=%d",b);
  }
  if(c>a&&c>b||c>b&&c>a){
  	printf("max=%d",c);
  	}
}