fork download
  1. /* 2つの配列を交互に3つ目の配列に入れるプログラム */
  2. /* 2023.11.05 Mori.Tomoki */
  3. #include <stdio.h>
  4. #define DATAMAXA 10
  5. #define DATAMAXB 10
  6. #define DATAMAXC 17
  7.  
  8. void mergearray(int[], int, int[], int, int[], int*); /* 2つの配列を交互に3つ目の配列に入れる関数 */
  9.  
  10. /* メイン関数 */
  11. int main(void){
  12. int numa, numb, numc=0; /* 入力されたデータの数 */
  13. int array_A[DATAMAXA], array_B[DATAMAXB], array_C[DATAMAXC]; /* データを格納する配列 */
  14. int i;
  15.  
  16. /* n個のデータを入力してもらい、array_A[]に格納 */
  17. printf("1つ目の配列に好きな正の整数をいくつか入力してください。\n");
  18. printf("終了するときはゼロを入力してください。\n");
  19. numa = 0;
  20. scanf("%d",&array_A[numa]);
  21. while(array_A[numa]!=0) {
  22. numa++;
  23. if (numa==DATAMAXA){
  24. printf("データ数の上限%dを超えました。\n",DATAMAXA);
  25. break;
  26. }
  27. scanf("%d",&array_A[numa]);
  28. }
  29.  
  30. /* n個のデータを入力してもらい、array_B[]に格納 */
  31. printf("2つ目の配列に好きな正の整数をいくつか入力してください。\n");
  32. printf("終了するときはゼロを入力してください。\n");
  33. numb = 0;
  34. scanf("%d",&array_B[numb]);
  35. while(array_B[numb]!=0) {
  36. numb++;
  37. if (numb==DATAMAXB){
  38. printf("データ数の上限%dを超えました。\n",DATAMAXB);
  39. break;
  40. }
  41. scanf("%d",&array_B[numb]);
  42. }
  43.  
  44. mergearray(array_A, numa, array_B, numb, array_C, &numc);
  45.  
  46. for (i=0; i<numc; i++) {
  47. printf("%d ",array_C[i]);
  48. }
  49. printf("\n終了します。\n");
  50. return 0;
  51. }
  52.  
  53. /* 2つの配列を交互に3つ目の配列に入れる関数 */
  54. void mergearray(int array_A[], int numa, int array_B[], int numb, int array_C[], int *numc){
  55. int i, j, k;
  56. if (numa <= numb){
  57. for (i=0, j=0; i<numa; i++){
  58. array_C[k++] = array_A[i];
  59. if (k==DATAMAXC){
  60. printf("データ数の上限%dを超えました。\n",DATAMAXC);
  61. k-=2;
  62. break;
  63. }
  64. array_C[k++] = array_B[j++];
  65. }
  66. for (j=numa, k=numa*2; j<numb; j++){
  67. array_C[k++] = array_B[j];
  68. }
  69. } else { /* numa > numb */
  70. for (i=0, j=0; i<numb; i++){
  71. array_C[k++] = array_A[i];
  72. array_C[k++] = array_B[j++];
  73. }
  74. for (i=numb, k=numb*2; i<numa; i++){
  75. array_C[k++] = array_A[i];
  76. }
  77. }
  78. *numc = k;
  79. }
Success #stdin #stdout 0s 5548KB
stdin
10 20 30 40 50 60 70 80 90 0
11 22 33 44 55 66 77 88 99 0
stdout
1つ目の配列に好きな正の整数をいくつか入力してください。
終了するときはゼロを入力してください。
2つ目の配列に好きな正の整数をいくつか入力してください。
終了するときはゼロを入力してください。
データ数の上限17を超えました。
10 11 20 22 30 33 40 44 50 55 60 66 70 77 80 88 90 0 
終了します。