fork download
  1. /* 課題073 */
  2. /* 配列に入れられた値を交互にマージして表示 */
  3. /* (配列を引数とする関数) */
  4. /* 2025.07.16 sakurauchiyuto */
  5. #include <stdio.h>
  6. #define DATAMAX 20
  7.  
  8. void mergearray(int array_A[], int numa, int array_B[], int numb, int array_C[], int numc);
  9.  
  10. /* メイン関数 */
  11. int main(void) {
  12. int numa, numb, numc; /* 各配列のデータ数 */
  13. int array_A[DATAMAX]; /* Aに入力されたデータを格納 */
  14. int array_B[DATAMAX]; /* Bに入力されたデータを格納 */
  15. int array_C[DATAMAX]; /* マージ結果を格納する配列 */
  16. int i;
  17.  
  18. /* 配列Aの入力 */
  19. printf("1つ目の配列を入力してください。終了は 0 を入力してください。\n");
  20. numa = 0;
  21. scanf("%d", &array_A[numa]);
  22. while(array_A[numa] != 0) {
  23. numa++;
  24. if (numa == DATAMAX) {
  25. printf("データ数の上限 %d を超えました。\n", DATAMAX);
  26. break;
  27. }
  28. scanf("%d", &array_A[numa]);
  29. }
  30.  
  31. /* 配列Bの入力 */
  32. printf("2つ目の配列を入力してください。終了は 0 を入力してください。\n");
  33. numb = 0;
  34. scanf("%d", &array_B[numb]);
  35. while(array_B[numb] != 0) {
  36. numb++;
  37. if (numb == DATAMAX) {
  38. printf("データ数の上限 %d を超えました。\n", DATAMAX);
  39. break;
  40. }
  41. scanf("%d", &array_B[numb]);
  42. }
  43.  
  44. /* マージ関数の呼び出し */
  45. mergearray(array_A, numa, array_B, numb, array_C, DATAMAX * 2);
  46.  
  47. /* マージ結果を表示 */
  48. printf("マージ結果は以下の通りです。\n");
  49. numc = numa + numb;
  50. if (numc > DATAMAX * 2) {
  51. numc = DATAMAX * 2;
  52. }
  53.  
  54. for (i = 0; i < numc; i++) {
  55. printf("%d ", array_C[i]);
  56. }
  57. printf("\n終了します。\n");
  58.  
  59. return 0;
  60. }
  61.  
  62. /* 配列を交互にマージする関数 */
  63. void mergearray(int array_A[], int numa, int array_B[], int numb, int array_C[], int numc) {
  64. int i = 0, j = 0, k = 0;
  65.  
  66. while (i < numa && j < numb && k < numc) {
  67. array_C[k++] = array_A[i++];
  68. if (k >= numc) break;
  69. array_C[k++] = array_B[j++];
  70. }
  71.  
  72. while (i < numa && k < numc) {
  73. array_C[k++] = array_A[i++];
  74. }
  75.  
  76. while (j < numb && k < numc) {
  77. array_C[k++] = array_B[j++];
  78. }
  79. }
Success #stdin #stdout 0.01s 5304KB
stdin
10 20 30 40 50 60 0
11 22 33 44 55 66 77 88 99 0
stdout
1つ目の配列を入力してください。終了は 0 を入力してください。
2つ目の配列を入力してください。終了は 0 を入力してください。
マージ結果は以下の通りです。
10 11 20 22 30 33 40 44 50 55 60 66 77 88 99 
終了します。