[英]When given 3 negative numbers, how can I ensure to always print the median of the 3 numbers entered (Intro C programming task)
因此,基本上我的C程序任务是要求/允许用户输入3个整数。 在输入的3个整数中,使用一堆if / else语句,我必须确保它输出3的中位数。
例如,如果用户输入4 5 6,则中位数为5。
我生成的代码可以成功地完成此任务,但当我输入整数-2 -1 -3时除外。 中位数显然是-2,但打印出-1作为中位数。
下面是我的代码;
#include <stdio.h>
int main(int argc, char *argv[]) {
int firstNumber;
int secondNumber;
int thirdNumber;
printf("Please enter first number: ");
scanf("%d", &firstNumber);
printf("PLease enter second number: ");
scanf("%d", &secondNumber);
printf("Please enter third number: ");
scanf("%d", &thirdNumber);
if (firstNumber < secondNumber && thirdNumber > secondNumber) {
printf("The median is %d\n", secondNumber);
} else if (firstNumber < thirdNumber && secondNumber > thirdNumber) {
printf("The median is %d\n", thirdNumber);
} else if (firstNumber > secondNumber && firstNumber < thirdNumber) {
printf("The median is %d\n", firstNumber);
} else if (firstNumber > thirdNumber && thirdNumber < secondNumber) {
printf("The median is %d\n", secondNumber);
} else if (firstNumber > secondNumber && secondNumber < thirdNumber) {
printf("The median is %d\n", thirdNumber);
} else if (firstNumber > thirdNumber && secondNumber > firstNumber) {
printf("The median is %d\n", firstNumber);
}
return 0;
}
我已经仔细阅读了每条陈述,但仍然不确定为什么最终的if陈述会给我带来麻烦。
希望有人能帮助我,任何帮助将不胜感激。
此代码非常糟糕。 无论如何,我看到的第一个问题是在线
} else if (firstNumber > thirdNumber && thirdNumber < secondNumber) {
printf("The median is %d\n", secondNumber);
if
的条件不利于确定secondNumber
是中位数。 您仅在检查secondNumber
是否大于thirdNumber
。
这是为您提供的解决方案:
median = max(min(a,b), min(max(a,b),c));
另外,您需要定义min
和max
。
#define max(x, y) (((x) > (y)) ? (x) : (y))
#define min(x, y) (((x) < (y)) ? (x) : (y))
您的两个条件错了。 查看修改后的条件(标有注释):
#include <stdio.h>
int main(int argc, char *argv[]) {
int firstNumber;
int secondNumber;
int thirdNumber;
printf("Please enter first number: ");
scanf("%d", &firstNumber);
printf("PLease enter second number: ");
scanf("%d", &secondNumber);
printf("Please enter third number: ");
scanf("%d", &thirdNumber);
if (firstNumber < secondNumber && thirdNumber > secondNumber) {
printf("The median is %d\n", secondNumber);
} else if (firstNumber < thirdNumber && secondNumber > thirdNumber) {
printf("The median is %d\n", thirdNumber);
} else if (firstNumber > secondNumber && firstNumber < thirdNumber) {
printf("The median is %d\n", firstNumber);
} else if (firstNumber > thirdNumber && thirdNumber > secondNumber) { // Changed this line
printf("The median is %d\n", thirdNumber); // Changed this line
} else if (firstNumber > secondNumber && secondNumber > thirdNumber) { // Changed this line
printf("The median is %d\n", secondNumber); // Changed this line
} else if (firstNumber > thirdNumber && secondNumber > firstNumber) {
printf("The median is %d\n", firstNumber);
}
return 0;
}
注意:如果两个或三个数字相等,则该代码将无效。
尝试以下逻辑-
if(firstNumber > secondNumber && secondNumber > thirdNumber)
printf("The Median is %d\n",secondNumber);
else if(firstNumber < secondNumber && secondNumber < thirdNumber)
printf("The Median is %d\n",secondNumber);
else if(firstNumber > secondNumber && firstNumber < thirdNumber)
printf("The Median is %d\n",firstNumber);
else if(firstNumber < secondNumber && firstNumber > thirdNumber)
printf("The Median is %d\n",firstNumber);
else if(thirdNumber < secondNumber && thirdNumber > firstNumber)
printf("The Median is %d\n",thirdNumber);
else if(thirdNumber > secondNumber && thirdNumber < firstNumber)
printf("The Median is %d\n",thirdNumber);
您输入的数字满足以下条件
} else if (firstNumber > thirdNumber && thirdNumber < secondNumber) {
printf("The median is %d\n", secondNumber);
实际上,firstNumber和secondNumber都大于thirdNumber。 但是,这种情况并不能确定中位数。 它仅确定两个数字大于第三个数字。
此外,您的代码不考虑某些数字可以彼此相等的情况。
为了避免错误,您应该在表格中写下所有条件
a <= b && b <= c
其中b显然是中位数,并用a,b,c代替变量的组合。
所以代码看起来可能是这样的
#include <stdio.h>
int main(void)
{
int firstNumber;
int secondNumber;
int thirdNumber;
printf( "Please enter first number: " );
scanf( "%d", &firstNumber );
printf( "PLease enter second number: " );
scanf( "%d", &secondNumber );
printf( "Please enter third number: " );
scanf( "%d", &thirdNumber );
if ( firstNumber <= secondNumber && secondNumber <= thirdNumber )
{
printf( "The median is %d\n", secondNumber );
}
else if ( thirdNumber <= secondNumber && secondNumber <= firstNumber )
{
printf( "The median is %d\n", secondNumber );
}
else if ( thirdNumber <= firstNumber && firstNumber <= secondNumber )
{
printf( "The median is %d\n", firstNumber );
}
else if ( secondNumber <= firstNumber && firstNumber <= thirdNumber )
{
printf( "The median is %d\n", firstNumber );
}
else if ( firstNumber <= thirdNumber && thirdNumber <= secondNumber )
{
printf( "The median is %d\n", thirdNumber );
}
else if ( secondNumber <= thirdNumber && thirdNumber <= firstNumber )
{
printf( "The median is %d\n", thirdNumber );
}
return 0;
}
如果输入-2 -1 -3,则结果为
The median is -2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.