2017-06-04 96 views
-1

我有一個程序,詢問用戶兩個數組的長度(n)(兩者的長度相同),然後是數組a1和數組a2的元素。然後我調用一個合併函數(下面的代碼)以下列方式合併兩個數組:a1(0),a2(0),a1(1),a2(1)... a1(n),a2(n )。while循環合併兩個數組

我的問題是,while循環如何達到這個目的?有人可以通過它如何工作?我想我的困惑是如何增加工作,爲什麼我們需要3個總循環。

while (j < n && k < n) 
{ 
     a3[i++] = a1[j++]; 
     a3[i++] = a2[k++]; 
} 
while (j < n) 
{ 
     a3[i++] = a1[j++]; 
} 
while (k < n) 
{ 
      a3[i++] = a2[k++]; 
} 
+0

什麼阻止你從開始一個調試器,並通過你自己的代碼加強?也許使用http://www.onlinegdb.com/ –

+0

你可以從上面的重複鏈接中找到很多例子。 –

回答

1

當前兩個數組有不同數量的元素時,這三個循環有意義。

我們假設m是第一個數組中的元素數,而n是第二個數組中的元素數。當循環看起來像

while (j < m && k < n) 
{ 
     a3[i++] = a1[j++]; 
     a3[i++] = a2[k++]; 
} 
while (j < m) 
{ 
     a3[i++] = a1[j++]; 
} 
while (k < n) 
{ 
      a3[i++] = a2[k++]; 
} 

否則,如果元件的數量是相等的兩個數組那麼它足以只有一個循環

while (j < n && k < n) 
{ 
     a3[i++] = a1[j++]; 
     a3[i++] = a2[k++]; 
} 

,因爲在循環之後變量jk將等於n,下面的循環將不會被執行。

此外,僅使用一個變量j就足夠了。例如

while (j < n) 
{ 
     a3[i++] = a1[j]; 
     a3[i++] = a2[j++]; 
} 

調查這一計劃

#include <stdio.h> 

int main(void) 
{ 
{ 
    #define M 3 
    #define N 5 

    int a1[M] = { 0, 2, 4 }; 
    int a2[N] = { 1, 3, 5, 7, 9 }; 
    int a3[M + N]; 

    size_t i, j, k; 

    j = 0; 

    while (j < M) printf("%d ", a1[j++]); 
    putchar('\n'); 

    k = 0; 

    while (k < N) printf("%d ", a2[k++]); 
    putchar('\n'); 

    i = j = k = 0; 

    while (j < M && k < N) 
    { 
     a3[i++] = a1[j++]; 
     a3[i++] = a2[k++]; 
    } 

    while (j < M) 
    { 
     a3[i++] = a1[j++]; 
    } 

    while (k < N) 
    { 
     a3[i++] = a2[k++]; 
    } 

    i = 0; 

    while (i < M + N) printf("%d ", a3[i++]); 
    putchar('\n'); 
} 

    putchar('\n'); 

{ 
    #undef M 
    #undef N 

    #define M 5 
    #define N 3 

    int a1[M] = { 0, 2, 4, 6, 8 }; 
    int a2[N] = { 1, 3, 5 }; 
    int a3[M + N]; 

    size_t i, j, k; 

    j = 0; 

    while (j < M) printf("%d ", a1[j++]); 
    putchar('\n'); 

    k = 0; 

    while (k < N) printf("%d ", a2[k++]); 
    putchar('\n'); 

    i = j = k = 0; 

    while (j < M && k < N) 
    { 
     a3[i++] = a1[j++]; 
     a3[i++] = a2[k++]; 
    } 

    while (j < M) 
    { 
     a3[i++] = a1[j++]; 
    } 

    while (k < N) 
    { 
     a3[i++] = a2[k++]; 
    } 

    i = 0; 

    while (i < M + N) printf("%d ", a3[i++]); 
    putchar('\n'); 
} 

    putchar('\n'); 

{ 
    #undef M 
    #undef N 

    #define N 5 

    int a1[N] = { 0, 2, 4, 6, 8 }; 
    int a2[N] = { 1, 3, 5, 7, 9 }; 
    int a3[N + N]; 

    size_t i, j; 

    j = 0; 

    while (j < N) printf("%d ", a1[j++]); 
    putchar('\n'); 

    j = 0; 

    while (j < N) printf("%d ", a2[j++]); 
    putchar('\n'); 

    i = j = 0; 

    while (j < N) 
    { 
     a3[i++] = a1[j]; 
     a3[i++] = a2[j++]; 
    } 

    i = 0; 

    while (i < N + N) printf("%d ", a3[i++]); 
    putchar('\n'); 
} 

    return 0; 
} 

它的輸出是

0 2 4 
1 3 5 7 9 
0 1 2 3 4 5 7 9 

0 2 4 6 8 
1 3 5 
0 1 2 3 4 5 6 8 

0 2 4 6 8 
1 3 5 7 9 
0 1 2 3 4 5 6 7 8 9 
+0

哇,很好的解釋。謝謝! – bambaera