2013-10-30 55 views
1

我無法在我的程序中找到正確的輸出,以找出三個數字中的第二大數字。 (我知道這是非常基本的,但我剛剛開始學習C,所以任何幫助和提示將不勝感激!)在我的程序中,我得到了三個數字中的最大值和最小值(但沒有問題),但我一直在第二大的答案204。 (這是錯誤的!)這是我的代碼,對不起,如果有任何可怕的錯誤,就像我說的,我是新手!非常感謝! :)我一直得到不正確的輸出爲我的第二大號碼程序(C程序)

//include the libraries 

#include <stdio.h> 

#include <conio.h> 

//include the main function 

int main() 
{ 

    //declare the variables 
    long a,b,c,min,max,secmax; 

    //read the variables 
    printf("a=");scanf("%ld",&a); 
    printf("b=");scanf("%ld",&b); 
    printf("c=");scanf("%ld",&c); 

    // Find the min of the 3 numbers. 
    if(b>a && c>a) 
    { 
     min=a; 
    } 
    else 
    { 
     min==b || min==c; 
    } 

    if(a>b && c>b) 
    { 
     min=b; 
    } 
    else 
    { 
     min==a || min==c; 
    } 

    if(a>c && b>c) 
    { 
     min=c; 
    } 
    else 
    { 
     min==a || min==b; 
    } 

    // Find the max of the 3 numbers. 

    if(b>a && b>c) 
    { 
     max=b; 
    } 
    else 
    { 
     max==a || max==c; 
    } 

    if(a>b && a>c) 
    { 
     max=a; 
    } 
    else 
    { 
     max==b || max==c; 
    } 

    if(c>a && c>a) 
    { 
     max=c; 
    } 
    else 
    { 
     max==a || max==b; 
    } 

    //Find the second largest number 
    if(a!=max && a!=min) 
    { 
     a=secmax; 
    } 
    else 
    { 
     b==secmax || c==secmax; 
    } 

    if(b!=max && b!=min) 
    { 
     b=secmax; 
    } 
    else 
    { 
     a==secmax || c==secmax; 
    } 

    if(c!=max && c!=min) 
    { 
     c=secmax; 
    } 
    else 
    { 
     b==secmax || a==secmax; 
    } 

    //print the output 
    printf("\nThe maximum is %d\n",max); 
    printf("\nThe second largest number is %d\n",secmax); 
    printf("\nThe minimum is %d\n",min); 

getch(); 

return 1; 
} 
+0

什麼輸入你給它?此外,這些代碼塊:'else { min == b ||分鐘==℃; 「對我沒有意義。 – nhgrif

+0

我輸入a = 3,b = 5和c = 8。好的,我應該把它們全部拿出來嗎? :) – Eleanor

+0

基於'a = 3','b = 5','c = 8',它告訴你'204'是第二大的數字......? – nhgrif

回答

1

分配以這種方式工作:

... 
secmax = a; 
... 

這行代碼分配給a​​。如果​​不包含任何內容(程序員行話中包含「垃圾」),則在執行此行後,它將等於a。這是你想要的。


a = secmax; 

這行代碼是沒有好處 - 它的,你想的正好相反。這可能是一個錯字。


您的代碼還存在其他問題,但這個問題似乎是最重要的問題;修復它後,您的代碼有可能會運行。

0
// Find the min of the 3 numbers. 
if (b>a && c>a) 
{ 
    min = a; 
} 
else if(a>b && c>b) 
{ 
    min = b; 
} 
else 
{ 
    min = c; 
} 

這將正確設置分鐘。您可以使用類似的邏輯/控制流程設置最大值,並根據最小/最大值計算出中間值。

+0

如果'a == b'和'c> a'那麼你的代碼不起作用。 – agbinfo

0

您需要做的第一件事是擺脫所有其他檢查您目前有。他們只是評估布爾結果,而對他們無所作爲。

其次,當你正在尋找第二大數量要指定secmax分爲A,B & C,但實際上它應該是這樣的:

if(a!=max && a!=min) 
{ 
    secmax = a; 
} 

if(b!=max && b!=min) 
{ 
    secmax = b; 
} 

if(c!=max && c!=min) 
{ 
    secmax = c; 
} 
相關問題