2017-02-17 99 views
-6

我是一名試圖瞭解循環如何工作的初學者。我正在嘗試使用下面的代碼來查找數組中最大元素的值。它只運行了4次迭代,儘管我已經設置了n值=數組的大小= 5。因此,它沒有測試最後一個元素的if條件,不知道爲什麼?好心提醒。無法理解循環迭代

int main() 
{ 
    int a[] = {1,2,3,4,5}; 
    int* max; 
    int i, n; 

    n = sizeof(a)/sizeof(a[0]); 
    max = a; 
    for(i=0; i<n; i++) 
    { 
     if(a[i] > *max) 
     { 
      *max = a[i]; 
      i++; 
     }  
    } 
    cout << "Maximum element in the array is : " << *max << endl;  
} 

O/P: - 數組中的最大元素是:4

+1

你在哪裏聲明瞭a,n和max?這段代碼看起來很腥...... –

+0

剛剛更新了它。 – Aisha

+0

當您執行'* max = a [i]'時,您正在更改數組中的值,因爲max指向數組中的值。 – stark

回答

0

你的代碼的增量i的兩倍,因此它不看的每一個元素。擺脫if內部的i++;。每個循環已經增加了一次,這就是你想要的。

0

爲什麼你在循環內部增加i?會發生什麼情況是,每次輸入if時,下一個元素將被跳過,因爲您將增加i兩次(一次循環增量,一次增加i++)。

0

您在if循環中增加了i,這會導致您跳過當前元素之後的元素。

刪除i++;行,你應該沒問題。

作爲參考,如果你在for循環結束印刷i, *max你會得到:

  • 1,1(1 == 1所以內如果​​跳過)
  • 3,2
  • 5 ,4

請注意,您從來沒有真正看過3或5,因爲雙增量會導致您忽略它們。

1

這是'新'C風格的代碼,你應該更喜歡用這種方式編寫for循環,它會自動遍歷所有的值,所以你不必擔心索引,所以它比C++更安全你可以通過數組並具有undefined行爲 auto'變量'將自動檢測你想要使用的類型,在這種情況下,編譯器使用auto作爲int。 一些reading關於汽車和環

#include <iostream> 

using namespace std; 

int main() 
{ 
    int arr[]{ 1,2,3,4,5 }; 
    auto max = INT_MIN; 

    for (auto const &val : arr) 
    { 
    if (val > max) 
     max = val; 
    } 

    cout << "The max value is: " << max << endl; 

    return 0; 
} 
+0

'(auto val:arr)'應該是'(auto&val:arr)'沒有理由複製 – user463035818

+0

@ tobi303也沒有理由不把它引用爲''constst'。我猜想通過值或引用來傳遞內置類型是非常有趣的事情,在非泛型代碼中。 @Seb'INT_MIN'和使用的數組類型可能更像C++一樣。如果你使用'namespace std;'轉儲''也許''std :: max'在循環中。 – LogicStuff

+0

@LogicStuff你是對的,我只是想,如果一個人告訴別人他們應該如何編寫代碼,需要精確。我至少應該提及'auto&',因爲一般來說,當我看到「我是初學者」時,它會產生變化 – user463035818

-1

你有兩個增量I; 當您需要將指針的地址更改爲新值時,您已將指針的值更改爲當前值;

enter image description here