我是c ++的新手,我应该写一个程序,询问用户三个整数,然后从最大到最小分配这三个整数。如果你能给我提示并帮助我。
java -jar scheduler.jar
答案 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
设置为number2
或number3
,而是根据输入,您在不知不觉中将number2
或number3
的值设置为当前最大值,即number1的值。这是因为在行中:
largest = number1; // assume first integer is largest
将变量max设置为number1中的值。这就是为什么您会注意到您的最大值始终是number1
中的值的原因。
当您尝试查找最小值时,同样的问题仍然存在,因为您的最小值再次设置为number1
,就像上面一样,并将此值设置为number2
或{{1}而不是从 number3
或number2
移动最小值。
另一个问题是你的逻辑。请考虑以下几行(我已修复您的等号):
number3
现在让我们分别对largest = number1; // assume first integer is largest
if (number2 > number1){
largest = number2;
}
if (number3 > number2) {
largest = number3;
}
,number1
,number2
使用数字3,1,2。我们首先将number3
设置为3.然后我们将number1与number2进行比较,这给出了1> 3,这是假的,所以最大的数字仍为number1。但是,您然后进行比较以查看是否number1
,这意味着2> 1,这是真的。因此,即使您未在number3 > number2
和largest
之间进行比较,也会将number3
分配给number3。在找到最小值的逻辑中仍然存在同样的问题。
这里有一些有效的逻辑(我已经尝试并测试过它):
number1
希望这能回答你的问题。