这是我为作业而制作的程序,应该找到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语句。对不起,如果这令人困惑,我不知道如何更好地说出来。
答案 0 :(得分:5)
min = num1;
if (num2 < min)
{
min = num2;
}
else
{
min = num3;
}
这不可行,因为min
永远不会是num1
;它会立即被num2
或num3
覆盖。
一个if
语句为控制流程提供了两个选择,这是不够的。由于这是一个练习,我将让其他人自己弄清楚;)
答案 1 :(得分:3)
您遗漏了num3
和min
之间的某些比较。在将num3
分配给min
之前,您需要确保num3
实际上是最小值。
您还需要删除此处的else
,因为您要同时进行比较num2 < min
和num3 < 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;
}