STEP 1.1 マージ (merge)

問題

a1[] = {19, 33, 42, 46, 78} 
a2[] = {11, 17, 25, 54, 63}

とするとき、マージ結果は

b[] = {11,17,19,25,33,42,46,54,63,78}

[実行例]

(a1とa2は、プログラム中に書いておくことにする)

a1: 19 33 42 46 78

a2: 11 17 25 54 63

b: 11 17 19 25 33 42 46 54 63 78

[コメント]
  • a1から代入する場合とa2から代入する場合の場合分けを、しっかりまとめること。
    • 上の例では、先にa2の要素がbに全て代入される。
  • いろいろな表現方法があってよい。自分の解答だけでなく、教科書や参考書にある標準的な解答も確認すること。
    • 自分と異なるプログラムは読んで比較しよう。「これなら、j自分の方がいいよ」ってこともある。
  • 以下、この例題では扱わない。
    • 要素数を入力し、配列用メモリを動的に確保する方法 (calloc関数)
    • 大域変数ではなく、配列のアドレスを引数に使う方法 (例題集を)
[関連の例題]
例題集ページ
  • 0403 (今日のウーミングアップ1問目;後でリンクします)

解答例

[プログラムテンプレート(未完)]

#include <stdio.h>


/* 配列のサイズを決めておく */
#define M 5
#define N 5

/* 大域変数 よくわかるC (p.46) */
int a1[M] = {19, 33, 42, 46, 78};
int a2[N] = {11, 17, 25, 54, 63};
int b[M+N];

/* 関数の宣言 (p.43) */
void merge(int, int);


int main (void) {
   int i;

   /* 配列a1のプリント 配列とforループの定番プログラム*/
   printf("a1:");
   for(i=0; i < M; i++) {
     printf("%3d ",a1[i]);
   }
   printf("\n");
   printf("\n");

   /* 配列a2のプリント */
   printf("a2:");
   for(i=0; i < N; i++) {
     printf("%3d ",a2[i]);
   }
   printf("\n");
   printf("\n");

   /* マージして */
   merge(M, N);

   /* 配列bのプリント */
   printf(" b:");
   for(i=0; i < M+N; i++) {
     printf("%3d ",b[i]);
   }
   printf("\n");
   printf("\n");

   return (0);
}

void merge(int m, int  n) {

}