2017-09-07 15 views
-5

該程序的目的是檢測指定數組中的最大數目。但是目前它只能檢測到數組的最後一位數字。如果其他if被刪除或註釋掉,那麼它可以正確檢測除最後一位數字之外的所有數字。else if語句阻止程序檢測最大索引

#include <stdio.h> 

int main(){ 
    int c,i,max; 

    printf("Enter the size of the array."); 
    scanf("%d",&c); 

    int array[c]; 

    printf("Enter the integers to fill the array.\n"); 
    for(i=0;i<c;i++){ 
     scanf("%d",&array[i]); 
    }//end for 

    int last_element = array[c-1]; 

    for(i=0;i<c;i++){ 
     printf("%d",array[i]); 
     if(array[i-1] > array[i]) //This if statement detects greatest  
     {       //index of array for all but last index 
      max = array[i-1]; 
     }//end if 
     else if(last_element > array[i-1]) //This else if detects greatest 
     {         //index of array in last index 
      max = last_element;    //This statement is always eval 
     }//end if       //uating true. 
    }//end for 

    printf("\n%d",max); 
    return 0; 
}//end main 
+2

'int數組並[c];'不是由C++標準所允許'C'必須在編譯時 – CoryKramer

+0

已知C不是C++不是C!當您使用C功能時,我刪除了垃圾郵件標籤。並提供更多信息。我們不是一個調試服務。 3年後,你應該知道[問]。 – Olaf

+0

IDE中集成了一個名爲「調試」的漂亮功能,使用它 –

回答

1
largest = array[0];   //consider your 1st element as largest element 
for (i = 1; i < size; i++)  // 
{ 
    if (largest < array[i]) //compare largest element with i'th element 
     largest = array[i]; //if it is, make i'th element as largest 
} 
printf("\n largest element present in the given array is : %d", largest); 

試試這個

+0

這是一個代碼唯一的答案,提供那些使StackOverflow免費編碼服務。請在奧德中添加一些解釋,以幫助OP瞭解問題和解決方案。 – Yunnosch

+0

啊,好吧。匆忙。現在編輯 –

+0

非常感謝。宣佈一個int最大,並用我的c變量來代替大小,它的工作很好。非常感謝。 – victwo

0

去逐點錯誤更正:

  1. for(i=1;i<c;i++)i需要被設置爲1,所以,當你做陣列[我-1],它從i = 1開始,所以發生array[1-1]。 否則,如果i設置爲0那麼它會變成array[0-1] ,即,陣列[-1],因爲該值沒有被定義,它可以指向 在堆棧存儲器中的任何值。

  2. if(array[i-1] > array[i])這個if語句簡單地檢查,如果前一個值大於其下一個值,即,如果數組1 2 3 4 5 6 7在那裏,它只會看到。 if (array[0]>array[1]),然後 if(array[1] > array[2])。在示例數組中,1 2 3 4 5 6 7, 按升序排列,它不會進入if條件。 因爲,1 > 2是不正確的。 2 > 3不正確,依此類推。因此,檢查它的正確方法是使用現有的最大值檢查當前數組索引 。即,

if(array[i-1] > max) { max = array[i-1] ;}如果遇到一個更大的數字。這將不斷替換 的max值。然後用最大值檢查下一個數字 。

  • else if(last_element > array[i-1]) //This else if detects greatest 
    {         //index of array in last index 
        max = last_element;    //This statement is always eval 
    }//end if       //uating true. 
    }//end for 
    
  • 現在,這將再次是一個錯誤的說法。考慮示例數組 5 4 3 2 1' .Here the last element is always smaller than array [i-1]`,這意味着最後一個元素始終小於以前的所有元素。所以這個條件永遠不會被輸入。

    最後,正確的代碼:聲明一個變量int max = 0這樣,如果 array [i]> max,那麼max值將被替換爲該數組的值。然後 然後用新聲明的最大值檢查下一個數組值。

    int max =0; 
    for(int i=0; i<c; i++){ 
    if(array[i] > max){ 
    max=array[i]; 
    } 
    }