帮帮我吧.. 我刚做了期中考试,其中一个问题是“用三个返回最小值的参数创建自己的函数。”
我在C ++中对此进行了编码,如下所示。
int smallest(int a, int b, int c) {
if (a == b && b == c) {
return a;
}
else if ((a==b&&b!=c)||(b==c&&a!=b)||(a==c&&a!=b)){
if (a < b) { //a=c <b or a< b=c
return a;
}
else if (a < c) { //a=b <c or a< b=c
return a;
}
else if (b < a) { //b=c <a or b< a=c
return b;
}
else if (c < a) { //b=c <a or c< a=b
return c;
}
else {
cout << "Congratz you got -1 point";
return 99999999;
}
}
else {
if (a < b&&a < c) {
return a;
}
else if (b < a&&b < c) {
return b;
}
else {
return c;
}
}
当我在VS 2017中运行时,它可以工作但是.. 如果此函数被称为
int main(){
cout << smallest(2,1,1);
return 0;
}
我认为这会产生错误,因为还有两个if语句包含这种情况(否则if(b&lt; a)和else if(c&lt; a)...)
计算机不允许选择运行哪个语句。但是为什么这样工作.. ??? :(非常基本的代码,但我不知道..
答案 0 :(得分:4)
您提到的两个else if
语句在某种意义上是排他性的,如果第一个条件的计算结果为true,则忽略第二个条件。即:
if (a < b) {
return a;
}
else if (a < c) { // if this is true then...
return a;
}
else if (b < a) { // this condition wont even be evaluated
return b;
}
你似乎对return
有误解。请考虑以下代码:
int foo() {
return 3;
return 5;
}
这段代码没有错,只是第二个return
永远不会被执行。
最后但并非最不重要的是,您应该考虑简化代码。两个if
应该足以产生正确的结果。
if (a is smaller than b and smaller than c) return a;
else return the smaller of b and c;
答案 1 :(得分:0)
if
语句的评估从上到下进行。因此,他们不需要互相排斥,条件的顺序很重要(参见switch
)。
请注意,您可以使用简单的
返回最小值return std::min({a, b, c});