从主函数中取3个值中的2个

时间:2019-05-04 16:54:42

标签: c

因此我在C语言中使用函数时遇到了问题。我需要制作一个max和一个min函数来找到最大值和最小值。在main函数中,我需要加载3个数字(xyz),并且有一个要求解的公式。它去了:y = 2 * Min(x, y) / Max(x, Min(y, z))。如果我有3个数字,如何只得到2个数字进行比较?我收到这样一个错误:MinMax中声明的值很少。

#include <stdio.h>

int Max(int x, int y, int z) {
    if (x > y && x > z) {
        return x;
    } else
    if (y > x && y > z) {
        return y;
    } else
        return z;
}

int Min(int x, int y, int z) {
    if (x < y && x < z) {
        return x;
    } else
    if (y < x && y < z) {
        return y;
    } else
        return z;
}

int main() {
    int x, y, z;
    float rez;

    printf("unesi vrijednosti x, y i z: ");
    scanf("%d %d %d", &x, &y, &z);

    if (x >= -10 && x <= 10 && y >= -10 && y <= 10 && z >= -10 && z <= 10) {
        rez = (2.0 * (float)Min(x, y)) / ((float)Max(x, (float)Min(y, z)));
        printf("%.3f", rez);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:3)

  

我收到这样的错误:在“最小”或“最大”中声明的值很少。

因为您使用 3 参数定义了Min / Max函数,但是在(2.0 * (float)Min(x, y)) / ((float)Max(x, (float)Min(y, z)));中,您只给出了 2 自变量。

例如,只需使用2个参数定义它们

int Max (int x, int y)
{
   return (y > x) ? y : x;
}

int Min(int x, int y)
{
   return (y < x) ? y : x;
}

没有兴趣拥有两个以上的参数,否则为什么只有3个而不是4个或5个呢?拥有2个参数可以处理所有情况,只需将调用作为另一个参数放置

max(a1,a2 ... ,an)max(a1, max(a2, ... max(an-1, an))...)

,当然还有 min


除此之外,我建议您检查scanf("%d %d %d", &x, &y, &z);返回3以确保输入了3个有效值

答案 1 :(得分:0)

您不能或多或少地将周界传递给函数。您应该传递3个周长,或者都应以2个周长声明两个函数。如果您仍然希望函数中有3个周长,则可以在函数Min()Max()中传递值,如下所示:

对于Min(),将函数调用为:

Min(value1, value2, INT_MAX);

INT_MAX将始终大于任何整数值。因此,计算最小值不会有任何区别。

Max()一样,您可以将函数调用为:

Max(value1, value2, INT_MIN);

记住:您应该include <limits.h>使用INT_MININT_MAX

您可以简单地声明2个具有2个周长的函数,如下所示:

int Max (int x, int y) 
{
    if(x > y){
        return x;
    }
    else{
        return y;
    }
}

int Min(int x, int y) 
{
    if(x < y){
        return x;
    }
    else{
        return y;
    }
}