如果else语句有效但逻辑似乎有缺陷。请解释?

时间:2015-02-24 22:26:15

标签: c++ if-statement

这是我为作业而制作的程序,应该找到3个数字的最小值和最大值。当我以这种方式运行程序时,程序会起作用,但是我无法遵循原因的逻辑。

#include <iostream>
using namespace std;

int main() 
{

    double num1 = 0, num2 = 0, num3 = 0, max = 0, min = 0;


    cout << "CMPSC 201-Lab4 " << endl << "Find max and min among 3 numbers" << endl;
    cout << "Please enter 3 numbers seperated by a space: ";
    cin >> num1 >> num2 >> num3;

    min = num1;
    if (num2 < min)
    {
        min = num2;
    }
    else
    {
        min = num3;
    }

    max = num1;
    if (num2 > max)
    {
        max = num2;
    }
    else
    {
        max = num3;
    }

    cout << endl; 
    cout << "The smallest number among (" << num1 << "," << num2 << "," << num3 << ",";//Outputs the numbers entered and displays min
    cout << ") is " << min << endl;
    cout << "The largest number among (" << num1 << "," << num2 << "," << num3 << ",";//Outputs the numbers entered and displays max
    cout << ") is " << max << endl;

    return 0;

这是该程序的代码。我想到的方法是将三个数字中的第一个设置为min,然后使用if语句根据其他数字的值更改min变量。这适用于不同顺序的3个数字的任意组合。

我看到的一个问题是,如果语句为真,那么min将为数字2,因为if-else的第一部分将执行。但是说数字3更小,它将如何成为自那部分以来的最小值如果 - 否则不会发生。如果代码是if-else,那么这将是有意义的,但不是。

所以,我没有看到某些东西,或者确实如此,以某种方式使它成为if-else if语句。对不起,如果这令人困惑,我不知道如何更好地说出来。

2 个答案:

答案 0 :(得分:5)

min = num1;
if (num2 < min)
{
    min = num2;
}
else
{
    min = num3;
}

这不可行,因为min永远不会是num1;它会立即被num2num3覆盖。

一个if语句为控制流程提供了两个选择,这是不够的。由于这是一个练习,我将让其他人自己弄清楚;)

答案 1 :(得分:3)

您遗漏了num3min之间的某些比较。在将num3分配给min之前,您需要确保num3实际上是最小值。

您还需要删除此处的else,因为您要同时进行比较num2 < minnum3 < min

min = num1;
if (num2 < min)
{
    min = num2;
}
if (num3 < min)
{
    min = num3;
}

max = num1;
if (num2 > max)
{
    max = num2;
}
if (num3 > max)
{
    max = num3;
}
相关问题