2013-09-23 242 views
-3

在數組中查找最大值和最小值的情況。我們初始化max =0max=temp[0]; 但是在最小值的情況下,我們不需要初始化min =0min=temp[0] ...爲什麼?C查找最大值和最小值?

+0

初始化'min = 0'可能不是很有幫助... –

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ – SJuan76

回答

1

首先,你不應該在任何情況下初始化max0(例如,尋找最大的數組,如果你初始化max0包含所有負值時,結果總是0)。由於爲了找到最大值(和最小值),需要將變量max(或min)與其他值進行比較,無論如何您都需要初始化爲temp[0],以避免將數組元素與未初始化的變量進行比較。

我發現了另一個評論你的代碼的一部分:

#include<stdio.h> 

int main() { 
    int arr[3]; 
    int i,max,min; max=min=0; 

    printf("Enter the value in Array \n"); 

    for(i=1;i<=3;i++) { 
    scanf("%d",&arr[i]); 
    } 

    printf("\n Value of array \n"); 
    for(i=1;i<=3;i++) { printf("%d \n",arr[i]); } 

    printf("\n Finding Maximum and minimum value \n"); 

    for(i=1;i<=3;i++) { 
    if(arr[i]>max) max=arr[i]; 
    if(arr[i]<min) min=arr[i]; 
    } 
    printf("Max = %d \n Min = %d \n ",max,min); 
    getch(); 
} 

有不工作幾件事情:

for(i=1;i<=3;i++) 

在C,索引從0開始的,所以有效數組元素是arr[0]arr[1]arr[2],使得對於迴路應

for(i = 0; i < 3; i++) 

好了,現在想象你在你的數組元素10,5和7

你最小值設置爲0:

max=min=0; 

現在你迭代這個循環:

for(i=0;i<3;i++) { 
    //... 
    if(arr[i]<min) min=arr[i]; 
    } 

10 < 0?不,這不對。

5 < 0?不,這不對。

7 < 0?不,這不對。

所以你看,min永遠不會改變。

爲了避免這種情況,只需將其設置爲第一要素後讀取數組:

for(i= 0;i < 3;i++) { 
     scanf("%d",&arr[i]); 
    } 
    min = max = arr[0]; 

現在,讓我們重申我們的循環:

for(i=0;i<3;i++) { 
    //... 
    if(arr[i]<min) min=arr[i]; 
    } 

10 < 10?不,這不對。

5 < 10?是的!將分鐘設置爲5

7 < 5?不,這不對。

現在min是你在與最大的現有代碼有5

同樣的問題。想象一下,你輸入-4,-55-20元素 - max將始終保持0

+0

「我做到了。最大= 0和最大[0]都工作正常.. 但我做同樣的事情,它不工作.... –

+0

@Manojrawat然後請告訴我們你是如何做到了 - 包括在問題中的代碼示例。 –

+0

@Manojrawat好的,在評論中找到了代碼,請參閱更新後的帖子 –

1

在訪問它們之前,您總是需要在C中初始化變量;它的未定義行爲不是。要做的最好的事情是,檢查數組長度不爲零,是將min/max初始化爲第零個元素。然後從第一個元素開始循環。

+4

*訪問*未初始化變量的值只是未定義行爲 –

+0

@Ol Charlesworth;好點 - +1 - 我已經修改我的回答。 – Bathsheba

1

max = temp[0]作爲參考點。您將開始比較每個元素,如果有任何元素大於此值,max值將更新爲該值。類似min = temp[0]也是有效的,但現在算法將被改變,並且如果有人比這更小,則需要比較每個元素,如果是,則min將被更新爲那個。

+0

#include void main() { int arr [3]; int i,max,min; max = min = 0; clrscr(); printf(「在Array中輸入值\ n」); (i = 1; i <= 3; i ++) scanf(「%d」,&arr [i])的 ; } printf(「\ n數組值\ n」);對於(i = 1; i <= 3; i ++) { printf(「%d \ n」,arr [i]); } printf(「\ n查找最大值和最小值\ n」); (i = 1; i <= 3; i ++) if(arr [i]> max) max = arr [i]; if(arr [i]

+0

@Manojrawat問題列表(1)沒有什麼像標準中的'void main'它是'int main '。 (2)你正在訪問出界。一個由三個元素組成的數組只會在第一個和第二個位置處有值。所有循環都從1到3意味着一個[3]實際上是第四個位置。 (3)用數組的第一個元素而不是零初始化'max'和'min'。應該有一些小於零的值來處理你的if條件。 –