数字比较c ++

时间:2017-01-27 19:41:08

标签: c++

我是c ++的新手,我应该写一个程序,询问用户三个整数,然后从最大到最小分配这三个整数。如果你能给我提示并帮助我。

java -jar scheduler.jar

2 个答案:

答案 0 :(得分:0)

我不确定这是一个错字还是试图做出狡猾的事情,但是

number2 = largest;

它的朋友似乎正在指向错误的方向。我认为这可能是一个逻辑错误的原因是

largest = number1; // assume first integer is largest

if (number2 > largest){ // formerly number2 > number1 and largest == number1 
    largest = number2;
}

if (number3 > largest) { // formerly number3 > number2 and continuing from above 
                         // number2 may have been equal to largest. This is where 
                         // the logic breaks down
    largest = number3;
}

是解决这个问题的合理方法。

答案 1 :(得分:0)

除了一些逻辑错误之外,问题在于你如何使用等号,在c ++中称为复制赋值运算符。我将解释它是如何工作的:

简单来说,赋值运算符(=)用于将等号右侧的值复制到等号左侧的变量。

简单地说,如果我们这样做:

    int a = 2;
    int b = 3;
    b = a;

将存储在赋值运算符右侧的值(即从a)复制到左侧的变量(即b)。实际上,变量b现在存储值2,而不是3.另一方面,a保留值2.

然而,如果我们这样做:

    int a = 2;
    int b = 3;
    a = b;

这意味着a现在存储与b商店相同的值,即3,而b仍然存储3。

代码中的问题不是逻辑,而是赋值运算符的不正确使用,因为在以下几行中:

    number2 = largest;
    number3 = largest;

不是将变量largest设置为number2number3,而是根据输入,您在不知不觉中将number2number3的值设置为当前最大值,即number1的值。这是因为在行中:

    largest = number1; // assume first integer is largest

将变量max设置为number1中的值。这就是为什么您会注意到您的最大值始终是number1中的值的原因。

当您尝试查找最小值时,同样的问题仍然存在,因为您的最小值再次设置为number1,就像上面一样,并将此值设置为number2或{{1}而不是从 number3number2移动最小值

另一个问题是你的逻辑。请考虑以下几行(我已修复您的等号):

number3

现在让我们分别对largest = number1; // assume first integer is largest if (number2 > number1){ largest = number2; } if (number3 > number2) { largest = number3; } number1number2使用数字3,1,2。我们首先将number3设置为3.然后我们将number1与number2进行比较,这给出了1> 3,这是假的,所以最大的数字仍为number1。但是,您然后进行比较以查看是否number1,这意味着2> 1,这是真的。因此,即使您未在number3 > number2largest之间进行比较,也会将number3分配给number3。在找到最小值的逻辑中仍然存在同样的问题。

这里有一些有效的逻辑(我已经尝试并测试过它):

number1

希望这能回答你的问题。