• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語の配列のコピーについて質問です。)

C言語の配列のコピーについて質問です

このQ&Aのポイント
  • C言語の配列のコピーについて質問です。intを要素とする二つの配列a、bとその配列の要素数を受け取り、配列aのすべての要素の値を配列bにコピーする関数を定義し、その関数の機能を確認するプログラム作成するという問題について質問です。
  • 配列aを配列bに「先頭から順番に」コピーする関数を作成する。(1)配列aを配列bに「先頭から順番に」コピーする関数を作成する。(2)配列aを配列bに「後ろから順番に」コピーする関数を作成する。
  • 配列の要素数(例では4)が変更されても処理できる関数を作成したいです。また、配列の要素の値は関数main()内で表示したいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

(1) 順向きに配列の内容をコピーする関数の処理 iを0からN-1までループさせる。ループ内で行う処理は to[i] = from[i]; である。 (2) 逆向きに配列の内容をコピーする関数の処理 iを0からN-1までループさせる。ループ内で行う処理は to[i] = from[N-(i+1)]; である。 #include <stdio.h> //順向きにコピーする関数 void array_copy(int *to , int *from , int N) { int i; //(1)を記述 } //逆向きにコピーする関数 void reverse_array_copy(int *to , int *from , int N) { int i; //(2)を記述 } //配列を0からN個分表示する関数 void view_array(int *dat , int N) { int i; for( i=0;i<N;i++ ){ printf("%d ",dat[i]); } printf("\n"); } int main(void) { int a[4] = {4,7,6,5}; int b[4] = {0,0,0,0}; view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 array_copy(b,a,4); //Aの内容をBにコピーする view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 reverse_array_copy(b,a,4); //Aの内容を逆向きにBへコピーする view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 return 0; } 関数 array_copy だけで順向き/逆向きを切り替えたいなら 引数の数をもうひとつ増やして、順向きにしたいのか逆向きにしたいのか を判断させるような情報を付けなければできないです。

その他の回答 (3)

  • arain
  • ベストアンサー率27% (292/1049)
回答No.4

No.1です。 では、書き方を変えましょう。 関数がわからなければ、main関数の中だけでコピーの処理を作ってください。 これが出来なければ関数化は先の話です。

回答No.2

#include <stdio.h> //#define REVERSE /* 定義すると逆向きにコピー コメントアウトで順向きにコピー */ //Aの内容をBにコピーする関数 void array_copy(int *to , int *from , int N) { int i; for( i=0; i<N; i++ ){ #ifdef REVERSE /* 逆向きの場合の処理 */ to[i] = from[N-(i+1)]; //to[0]にfrom[N-(0+1)]、to[1]にfrom[N-(1+1)]、to[2]にfrom[N-(2+1)]の代入作業をto[N-1]まで行う #else /* 順向きの場合の処理 */ //単純にto[0]にfrom[0]を代入、to[1]にfrom[1]を代入をN-1まで行う #endif } } //配列を0からN個分表示する関数 void view_array(int *dat , int N) { int i; for( i=0;i<N;i++ ){ printf("%d ",dat[i]); } printf("\n"); } int main(void) { int a[4] = {4,7,6,5}; int b[4] = {0,0,0,0}; view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 array_copy(b,a,4); //Aの内容をBにコピーする view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 return 0; }

cutebut
質問者

補足

申し訳ありませんが#defineや#ifdefなどを用いずにプログラムすることは可能ですか? お願いします。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

丸投げは禁止行為です。 少なくとも、「作れるだけ」は作ってみてそのソースを提示してください。 コピーの方法が分からなくても、関数の呼び出しまでくらいなら作成どきませんか?

cutebut
質問者

補足

申し訳ありません。 考えてみたのですが、for文を用いて作成するのかなぁと思う程度しか分かりません。 #include <stdio.h> void array_copy(int a[], int b[], int s) もしくは void array_copy(int *a[], int *b[], int s) を用いて関数を呼び出すのかなぁと思いました。 少しずつでもいいので教えてください。 お願いします。

関連するQ&A