使用if_else从3个数字中获得第2大

Sou*_*nce 5 c

我对C编程很陌生,最近我遇到了一个从3个数字中找到第2大数字的问题.我尝试使用if ... else,但总是给出最小的数字作为输出.我在这段代码中犯的逻辑错误是什么?

#include<stdio.h>

int main() {
    int a;
    int b;
    int c;
    a=10;
    b=30;
    c=7;
    if(a>b) {
        if(a>c) {
            if(b>c)
                printf("2nd largest is %d",c);
            else
                printf("2nd largest is %d",b);
        }
    } else

    {
        if(b>c) {
            if(c>a)
                printf("2nd largest is %d",a);
            else
                printf("2nd largest is %d",c);
        } else
            printf("2nd largest is %d",b);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*Cox 0

有很多方法可以执行这些操作,但如果您只有二进制 min 和 max 函数可供使用:

printf("2nd largest is %d", min(min(max(a,b),max(b,c)),max(a,c)));
Run Code Online (Sandbox Code Playgroud)

如果您需要更通用的选择(不仅仅是第二大元素,而是第 k 大元素),请使用像快速选择这样的选择算法:http://en.wikipedia.org/wiki/Quickselect#Algorithm