簡體   English   中英

給定3個負數時,如何確保始終打印輸入的3個數的中位數(Intro C編程任務)

[英]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));

另外,您需要定義minmax

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM