C语言 在三个数字中找出最大的数字

iklwldmw  于 9个月前  发布在  其他
关注(0)|答案(3)|浏览(106)

虽然我可以写一个代码的问题。我不认为这是很短和适当的。

#include <stdio.h>

void main() 
{
    float a, b, c;
    printf("Enter ");
    printf("\na: ");
    scanf("%f", &a);
    printf("b: ");
    scanf("%f", &b);
    printf("c: ");
    scanf("%f", &c);

    if (a == b && a == c) {
        printf("All are equal");
    }
    else if (a == b & a > c) {
        printf("%f is greatest", a);
    }
    else if (a == b & a < c) {
        printf("%f is greatest",c);
    }
    else if (a == c & a < b) {
        printf("%f is greatest", b);
    }
    else if (a == c & a > b) { 
        printf("%f is greatest", a);
    }
    else if (b == c & b < a) { 
        printf("%f is greatest", a);
    }
    else if (b == c & b > a) {
        printf("%f is greatest", b);
    }
    else if (a > b && a >= c) {
        printf("%f is the greatest", a);
    }
    else if (b > a && b > c) {
        printf("%f is the greatest", b);
    }
    else if (c > a && c > b) {
        printf("%f is the greatest", c);
    }
}

字符串
我怎样才能缩短代码,使其更具可读性,只使用条件。

mhd8tkvw

mhd8tkvw1#

@klutt关闭了重复的问题。

Maximum of three numbers in C
但是我看了一下提供的类似问题的参考资料,并不满意。
首先,在提供的参考中,对类似问题的回答完全忽略了所有三个数字彼此相等的情况。例如,在某些回答中,使用了确定最大值的函数或宏,但两者都不适合确定所有三个数字彼此相等。但在这种情况下,原始问题必须输出适当的消息。
同样有趣的是,指出确切的数字a,b或c的名称比其他的大。例如,如果a等于b,并且两者都大于c,那么在原始问题中输出数字a。为了清楚起见,变量a的名称应该出现在输出中。
我可以提出以下建议。

#include <stdio.h>

int main( void )
{
    float a, b, c;

    printf( "Enter " );
    printf( "\na: " );
    scanf( "%f", &a );
    printf( "b: " );
    scanf( "%f", &b );
    printf( "c: " );
    scanf( "%f", &c );

    if ( a == b && b == c )
    {
        puts( "All are equal" );
    }
    else if ( !( a < b ) && !( a < c ) )
    {
        printf( "a equal to %f is greatest.\n", a );
    }
    else if ( !( b < c ) )
    { 
        printf( "b equal to %f is greatest.\n", b );
    }
    else
    {
        printf( "c equal to %f is greatest.\n", c );
    }
}

字符串
当然,最好增加一个检查,以确保输入的三个数字是正确的。

yk9xbfzb

yk9xbfzb2#

如果你只创建一个额外的函数,这会变得简单得多:

float max(float x, float y) {
    return x >= y ? x : y;
}

字符串
现在:

#include <stdio.h>

int main(void) {
    float a, b, c;

    printf("Enter\n");
    printf("a: ");
    scanf("%f", &a);
    printf("b: ");
    scanf("%f", &b);
    printf("c: ");
    scanf("%f", &c);

    if (a == b && b == c) {
        printf("All are equal\n");
    }
    else {
        float m = max(max(a, b), c);
        printf("%f is the greatest\n", m);
    }
}


其中,这相当于:

else {
        float t = a >= b ? a : b;
        float m = t >= c ? t : c; 
        printf("%f is the greatest\n", m);
    }


或者避免使用三元表达式:

else {
        float t;
        float m;

        if (a >= b) t = a;
        else t = b;

        if (t >= c) m = t;
        else m = c;
 
        printf("%f is the greatest\n", m);
    }

pzfprimi

pzfprimi3#

给出3个数字并尝试查找:
1.如果全部相等,则报告全部相等。
1.否则打印最大值。
如何缩短代码...?
OP的方法,在最坏的情况下,做了许多比较。甚至其他答案执行多达4个比较。
我Assert它最多需要在a,b,c之间进行3次比较(假设没有一个是NAN)。

if (a == b) {
  if (b == c) printf("All are equal");
  else if (a > c) printf("%f is greatest", a);
  else printf("%f is greatest", c);
} else {
  if (a > b) {
    if (a > c) printf("%f is greatest", a);
    else printf("%f is greatest", c);
  else {
    if (b > c) printf("%f is greatest", b);
    else printf("%f is greatest", c);
  }
}

字符串

相关问题