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