C 中的复杂比较
Complex Comparison in C
这段代码有什么错误?
这是我遇到的最混乱的代码,请帮我解决这个问题
#include <stdio.h>
int compare(int a, int b, int c){
if(a-b>0&&a-c>0)
return c;
else
if (b-c>0)
return a;//what would it return?
else
return b;
}
int main()
{//below in printf? is it right to print this way?
printf("%d",compare(compare(88,89,91)compare(90,41,17)compare(75,100,96)));
return 0;
}
如上所示,代码无法编译,因为 printf
参数列表中缺少逗号。
这是一个更正后的版本,增加了额外的间距以提高可读性:
#include <stdio.h>
int compare(int a, int b, int c) {
if (a - b > 0 && a - c > 0)
return c;
else
if (b - c > 0)
return a;//what would it return?
else
return b;
}
int main() {
//below in printf? is it right to print this way?
printf("%d\n", compare(compare(88, 89, 91),
compare(90, 41, 17),
compare(75, 100, 96)));
return 0;
}
除了最初的语法错误之外,此代码在很多方面似乎都已损坏:
a - b > 0
执行可能溢出的整数减法:有符号算术溢出被 C 标准指定为具有未定义的行为。为 a
和 b
. 的所有值定义的 a > b
会更简单、更安全
compare(a, b, c)
returnsc
如果a
是最大值,a
如果b
是最大值,b
如果 c
是最大的... 因此结果在很大程度上取决于给定参数的顺序。有人可能想知道是否打算改为计算三元组的最大值,这不取决于参数的顺序。
我想知道面对这个测试的候选人的真正期望是什么。
为清楚起见,应使用简单的数学规则重写此代码,该规则允许您在 >
的两边添加相同的数字:
int compare(int a, int b, int c){
if(a > b && a > c)
return c;
else
if (b > c)
return a;
else
return b;
}
现在规则很简单:
- 如果
a
是三个中的最大值,return c
- 如果
b
是三个中的最大值,return a
- 如果
c
是三个中的最大值,return b
这组规则可让您推断出所有案例的输出。
这段代码有什么错误? 这是我遇到的最混乱的代码,请帮我解决这个问题
#include <stdio.h>
int compare(int a, int b, int c){
if(a-b>0&&a-c>0)
return c;
else
if (b-c>0)
return a;//what would it return?
else
return b;
}
int main()
{//below in printf? is it right to print this way?
printf("%d",compare(compare(88,89,91)compare(90,41,17)compare(75,100,96)));
return 0;
}
如上所示,代码无法编译,因为 printf
参数列表中缺少逗号。
这是一个更正后的版本,增加了额外的间距以提高可读性:
#include <stdio.h>
int compare(int a, int b, int c) {
if (a - b > 0 && a - c > 0)
return c;
else
if (b - c > 0)
return a;//what would it return?
else
return b;
}
int main() {
//below in printf? is it right to print this way?
printf("%d\n", compare(compare(88, 89, 91),
compare(90, 41, 17),
compare(75, 100, 96)));
return 0;
}
除了最初的语法错误之外,此代码在很多方面似乎都已损坏:
a - b > 0
执行可能溢出的整数减法:有符号算术溢出被 C 标准指定为具有未定义的行为。为a
和b
. 的所有值定义的 compare(a, b, c)
returnsc
如果a
是最大值,a
如果b
是最大值,b
如果c
是最大的... 因此结果在很大程度上取决于给定参数的顺序。有人可能想知道是否打算改为计算三元组的最大值,这不取决于参数的顺序。
a > b
会更简单、更安全
我想知道面对这个测试的候选人的真正期望是什么。
为清楚起见,应使用简单的数学规则重写此代码,该规则允许您在 >
的两边添加相同的数字:
int compare(int a, int b, int c){
if(a > b && a > c)
return c;
else
if (b > c)
return a;
else
return b;
}
现在规则很简单:
- 如果
a
是三个中的最大值,returnc
- 如果
b
是三个中的最大值,returna
- 如果
c
是三个中的最大值,returnb
这组规则可让您推断出所有案例的输出。