當前兩個數組有不同數量的元素時,這三個循環有意義。
我們假設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++];
}
,因爲在循環之後變量j
和k
將等於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
什麼阻止你從開始一個調試器,並通過你自己的代碼加強?也許使用http://www.onlinegdb.com/ –
你可以從上面的重複鏈接中找到很多例子。 –