2017-06-04 6 views
-1

Ich habe ein Programm, fragt den Benutzer für die Länge (n) von zwei Arrays (gleiche Länge für beide), dann die Elemente für Array a1 und dann Array a2. Ich rufe dann eine Zusammenführungsfunktion (Code unten) auf, um die zwei Felder in der folgenden Weise zusammenzuführen: a1 (0), a2 (0), a1 (1), a2 (1) ... a1 (n), a2 (n).While-Schleifen, um zwei Arrays zu verschmelzen

Meine Frage ist, wie genau erreichen die while-Schleifen das? Kann jemand durchgehen, wie es funktioniert? Ich nehme an, meine Verwirrung ist, wie das Inkrementieren funktioniert und warum wir 3 Gesamtschleifen brauchen.

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

Was Sie einen Debugger von Start-und Schreiten durch den Code auf eigene Faust verhindert? Vielleicht verwenden Sie http://www.onlinegdb.com/ –

+0

Sie können viele Beispiele von oben doppelten Link finden. –

Antwort

1

Diese drei Schleifen sind sinnvoll, wenn die ersten beiden Arrays eine unterschiedliche Anzahl von Elementen haben.

Angenommen, m ist die Anzahl der Elemente im ersten Array und n ist die Anzahl der Elemente im zweiten Array. Wenn die Schleifen wie

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++]; 
} 

Ansonsten schauen, wenn die Anzahl der Elemente für die beiden Arrays gleich ist, dann ist es genug, nur eine Schleife

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

zu haben, weil nach der Schleife der Variablen j und k wird gleich n sein und die folgenden Schleifen werden nicht ausgeführt.

Darüber hinaus war es genug, nur eine Variable j zu verwenden. Zum Beispiel

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

Untersuchen dieses Programm

#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; 
} 

Sein Ausgang ist

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

Wow, großartige Erklärung. Vielen Dank! – bambaera

Verwandte Themen