C中最多三个数字

时间:2018-04-10 19:04:51

标签: c

我有三个数字,m,n和p。我试图使用嵌套的if..else if..else找到最大值。

以下是我的相同代码:

#include <stdio.h>

int main() {
    // your code goes here
    float m,n,p;
    scanf("%f%f%f", &m,&n,&p);
    if(m>n){
        if(m>p){
            printf("%f",m);
        }
    }
    else if(n>p){
        if(n>m){
            printf("%f",n);
            }
        }
    else{   
        printf("%f",p);
    }
    return 0;
}

但是当我输入m = 4时,n = 2,p = 11。它不打印任何东西!
最后的其他陈述是否应该起作用并将结果作为11?

6 个答案:

答案 0 :(得分:5)

通过将查找最大值的逻辑移动到函数来简化代码。

QMetaCallEvent

答案 1 :(得分:4)

您的else仅适用于之前的if,嵌套if语句无法按您的意图运行,而是应该使用&#34;和&#34;运算符检查同一if中的两个条件是否为真。另外,如果两个最大的数字相等,您想要>=而不只是>

int main() {
    // your code goes here
    float m,n,p;
    scanf("%f%f%f", &m,&n,&p);
    if(m >= n && m >= p){
        printf("%f",m);
    } else if(n >= p && n >= m) {
        printf("%f",n);
    } else{   
        printf("%f",p);
    }
    return 0;
}

更简单的例子,如果你有这样的代码:

if (a) {
    if (b) {
        printf("first\n");
    }
} else {
    print("second\n");
}

else仅与a是真还是假有关。如果您有a = trueb = false,则上述内容不会打印。您的程序将进入if (a)正文(因此else永远不会运行),然后在退出之前看if (b)并跳过printf("first\n")

答案 2 :(得分:4)

迟到的答案。这个简单的解决方案不需要任何条件嵌套:

#include <stdio.h>

int main() {
    float m, n, p, max;
    if(scanf("%f%f%f", &m, &n, &p) != 3) {
        puts("Bad input");
        return 1;
    }
    max = m; 
    if(n > max) {
        max = n;
    }
    if(p > max) {
        max = p;
    }
    printf("%f", max);
    return 0;
}

答案 3 :(得分:0)

您还可以创建一个愚蠢的宏

#include <stdio.h>

#define mo3(m,n,p) ( (m) > (n) ? ((m) > (p) ? (m) : (p)) : ((n) > (p) ? (n) : (p)))

int main(void) {

int m=4,n=2,p=11;
     // your code goes here
     printf("%d\n", mo3(m,n,p));
     return 0;
 }

https://ideone.com/0El8nX

答案 4 :(得分:0)

NAN

使用浮点数学的@Weather Vane答案的变体并正好处理Not a Numbers

当存在NaN时,通常处理它们是忽视它们的存在。因此max5(-2.0, NAN, -1.0, NAN, -3.0)-1.0

double max3(double a, double b, double c) {
  double mx = -INFINITY;
  bool found = false;
  if (a >= mx) {
    mx = a;
    found = true;
  }
  if (b >= mx) {
    mx = b;
    found = true;
  }
  if (c >= mx) {
    mx = c;
    found = true;
  }
  return found ? mx : NAN;
}

上面使用<, <=, >=, >非常常见但不是C指定的行为,将NAN与数字进行比较,结果为false。当__STDC_IEC_559__定义为值1时,此期望的比较结果是指定的行为。

#if __STDC_IEC_559__ == 1的替代方案可以使用isnan()宏。

当然,如果任何数字为NAN,则其他功能可以返回NAN。

答案 5 :(得分:-1)

它应该是这样写的:

#include <stdio.h>

int main() {
    // your code goes here
    float m,n,p;
    scanf("%f%f%f", &m,&n,&p);
    if(m>n){
        if(m>p){
            printf("%f",m);
        }
        else{
          printf("%f", p);
        }
    }
    else if(n>p){
          printf("%f", n);
         }
    return 0;
}