2017-03-24 30 views
-1

好的,我創建了這段代碼。我知道有關於這個問題的一個問題,但我甚至不知道建議的邏輯,我沒有得到期望的結果。我得到的輸出是我輸入的同一個數組,它沒有反轉。它使用C語言。反轉陣列而不使用第二個。 (C語言)

#include <stdio.h> 

void revarray(int n, int arr[n]) 
{ 
    int i; 
    int j=n-1; 
    int temp; 
    for(i=0;i<n;i++) 
    { 
     temp = arr[i]; 
     arr[i]=arr[j]; 
     arr[j]=temp; 
     j--; 
    } 
    for(i=0;i<n;i++) 
    { 
     printf("%d ",arr[i]); 
    } 
} 

int main() 
{ 
    int n; 
    int i; 
    printf("Enter the number of elements of array= "); 
    scanf("%d",&n); 
    int arr[n]; 
    printf("Enter the elements:\n"); 
    for(i=0;i<n;i++) 
    { 
     printf("Enter element %d= ",i); 
     scanf("%d",&arr[i]); 
    } 
    revarray(n,arr); 
} 
+4

這已被詢問100次。您已將陣列反轉兩次,一次在0到n/2之間,然後再次反轉到數組末尾。在一個小例子上使用一個調試器... –

+2

'for(i = 0; i

+0

非常感謝,它的工作 –

回答

1

你只需要運行你的反向循環n/2次。 ,因爲當你交換你從雙方交換時,這就是爲什麼你必須交換n/2次。

for(i=0;i<n/2;i++) 
    { 
     temp = arr[i]; 
     arr[i]=arr[j]; 
     arr[j]=temp; 
     j--; 
    } 
+0

幫助我在一件事。你能解釋一下我在下面的代碼片段 –

+0

中發生了什麼?(i = n; i> = pos; i--) \t { \t \t arr [i] = arr [i-1]; \t} 它是向數組中添加一個元素的部分,但我沒有得到這個東西。這將如何爲新元素騰出空間 –

+0

您可以使用您的代碼編輯或詢問這部分的新問題嗎? –

0

您的代碼正在顛倒數組的順序...兩次。如果數組有2個元素 - 5和10,它將如何工作。

循環以i=0開頭,並用arr [1]交換arr [0]。 然後i增量,它仍然小於n因此繼續使用i=1並將arr [1]與arr [0]交換。

解決方案是隻運行一半數組的循環。