【问题标题】:How do I solve this middle number problem?如何解决这个中间数问题?
【发布时间】:2020-03-26 12:02:59
【问题描述】:

编写一个程序,用户输入 3 个浮点数,程序检查哪个是中等大小的数字。示例:a = 1.5b = 7.8c = 3.0,输出应为 c。 这是我尝试过的方法,它适用于一种情况,但我仍然在做太多的意大利面条代码,而且我还在学习如何有效地编写代码。 我的代码:

#include <stdio.h>

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

    scanf("%f %f %f", &a, &b, &c);

    if(a < b && c < a)
        printf("%.1f", a);
    else if(b < a && b > c)
        printf("%.1f", b);
    else if(c > a && c < b)
        printf("%.1f", c);
    else
    {
        printf("not good"); //I wrote this part to check if the code is good
    }




    return 0;
}

我仍在尝试掌握if 循环的窍门,我只是对这个问题感到困惑。你有什么建议吗?

【问题讨论】:

  • 请选择一种语言。也许您的代码是有效 C 代码和有效 C++ 代码的(罕见)案例之一,但最轻微的修改可以改变这一点
  • 更多主题:if 和循环是两个不同的东西。具体是什么让您感到困惑?如果您有工作代码并想获得审查,那么codereview.stackexchange.com 是更好的提问地点,因为询问“任何建议”有被关闭的危险,因为这里过于宽泛/意见
  • 这里有一个提示:a 有两种方式成为中间数字。 c
  • 如果两个数字相等或三个都相等,这个程序应该输出什么?说“假设这永远不会发生”也是有效的,但如果是这种情况,请在你的问题中提出这个限制。

标签: c++ c loops if-statement


【解决方案1】:

想一想,如果 a 是 medium ,那么 b 是 medium ,那么 c 是 medium 。检查是否有帮助!

#include <stdio.h>

int main(){

float a, b, c;

scanf("%f %f %f", &a, &b, &c);

if((a > b && a < c) || (a > c && a < b) ) 
    printf("%.1f", a);
else if((b > a && b < c) || (b > c && b < a))
    printf("%.1f", b);
else if((c > a && c < b) || (c > b && c < a))
    printf("%.1f", c);
else
{
    printf("not good"); //I wrote this part to check if the code is good
}




return 0;

}

【讨论】:

  • 谢谢,它有帮助,但我还是 c++ 的新手,所以有什么 | |意思是?我好像没用过。
  • || 表示“或”。但这种解决方案过于复杂。
  • 如果a == b == c 会发生什么?
【解决方案2】:

如果你会使用 C++:

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

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

    scanf("%f %f %f", &a, &b, &c);

    // Put them in a vector. Could use array, but vector more flexible
    vector<float> vals = {a,b,c};

    // Sort in numerical order
    sort (vals.begin(),vals.end());

    // Display the middle one
    printf("%.1f", vals[1]);

    return 0;
}

【讨论】:

  • 如果您预先创建一个包含 3 个元素的向量(为什么不是 std::array?)那么您不需要 abc,但您可以将用户输入直接存储在向量
  • 正如我所说,向量更灵活,因为我们可以在运行时确定中间项的数量。
  • 数字的输入不是问题的关键,所以我觉得最好不要通过改变它来分散注意力。
  • 不需要的灵活性只会为错误打开大门。在代码中只能有 3 个元素。即使您将代码更改为使用 4,那么在编译时仍然知道元素的数量,只是说...
  • scanf 是 C++ 吗??
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2011-06-07
  • 1970-01-01
相关资源
最近更新 更多