2016-08-25 27 views
-1

我在教程中發現了這個錯誤。這是一個向後打印給定數組的程序。但它不會向後打印數組,因爲它有一個錯誤。它說我應該找到這個錯誤,我不能。我在這個c程序中找不到這個bug

#include <stdio.h> 

int main() 
{ 
    int ara[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; 

    int i, j, temp; 

    for(i = 0, j = 9; i < 10; i++, j--) 
    { 
    temp = ara[j]; 
    ara[j] = ara[i]; 
    ara[i] = temp; 
    } 

    for(i = 0; i < 10; i++) 
    { 
    printf("%d\n", ara[i]); 
    } 
    return 0; 
} 
+3

您是否嘗試過一個調試器? – Marievi

+3

歡迎來到Stack Overflow!這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:[如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –

+7

你想在第一個for循環中使用'i <10/2'而不是'i <10'。 – BLUEPIXY

回答

0

交換兩次是一樣什麼都不做。只交換一次。

for(i = 0, j = 9; i < 5; i++, j--) 
{ 
    temp = ara[j]; 
    ara[j] = ara[i]; 
    ara[i] = temp; 
} 
+1

謝謝你的魚。我明天會再回來。確保準備好。三文魚這次。 – Lundin

+0

明白了,我很抱歉。但我不認爲使用調試器來解決這個問題是一個好主意。基本上,我在沒有電腦的考試中這樣做,不要說調試器。 –

3

錯誤在於算法通過交換數組中項目的位置來工作,但它迭代了太多元素。當i已經迭代了5個第一個元素時,該數組是向後的。但是迭代在最後5點繼續,這將所有元素放回到原始位置。

您可以輕鬆地打印整個數組在循環每圈找到這個自己...

1

上面的代碼被交換ARA [i]和ARA [j]的作爲i。從0-> 9和j從9-> 0移動移動。 最終的結果是所有的數字都返回原來的位置。 如果您想顛倒原始數組,請將第一個for循環看成如下所示。

for(i = 0, j = 9; i < j; i++, j--) 

OR

如果你只是想落後打印,後者爲循環是足夠的只是將它修改爲

for(i = 9; i >= 0; i--) 
相關問題