
intを要素とする二つの配列a、bとその配列の要素数を受け取り、配列aのすべての要素の値を配列bにコピーする関数を定義し、その関数の機能を確認するプログラム作成するという問題について質問です。
(1)配列aを配列bに「先頭から順番に」コピーする関数を作成する
(2)配列aを配列bに「後ろから順番に」コピーする関数を作成する
ただし、配列の要素数(例では4)が変更されても処理できる関数を作成したいです。また、配列の要素の値は関数main()内で表示したいです。
[ヒント]
(1)関数宣言の例
void array_copy(コピー元の配列, コピー先の配列, 配列の要素数)
[実行結果の例]
(1)先頭から順番にコピーする
コピー前
a[0]: 1 b[0]: 0
a[1]: 2 b[1]: 0
a[2]: 3 b[2]: 0
a[3]: 4 b[3]: 0
コピー後
a[0]: 1 b[0]: 1
a[1]: 2 b[1]: 2
a[2]: 3 b[2]: 3
a[3]: 4 b[3]: 4
(2)後ろから順番にコピーする
コピー前
a[0]: 1 b[0]: 0
a[1]: 2 b[1]: 0
a[2]: 3 b[2]: 0
a[3]: 4 b[3]: 0
コピー後
a[0]: 1 b[0]: 4
a[1]: 2 b[1]: 3
a[2]: 3 b[2]: 2
a[3]: 4 b[3]: 1
#include <stdio.h>
void array_copy()
から始めて
int main(void)
{
とプログラムを作成したいのですが教えてください。

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 だけで順向き/逆向きを切り替えたいなら
引数の数をもうひとつ増やして、順向きにしたいのか逆向きにしたいのか
を判断させるような情報を付けなければできないです。
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;
}
No.1
- 回答日時:
丸投げは禁止行為です。
少なくとも、「作れるだけ」は作ってみてそのソースを提示してください。
コピーの方法が分からなくても、関数の呼び出しまでくらいなら作成どきませんか?
この回答への補足
申し訳ありません。
考えてみたのですが、for文を用いて作成するのかなぁと思う程度しか分かりません。
#include <stdio.h>
void array_copy(int a[], int b[], int s)
もしくは
void array_copy(int *a[], int *b[], int s)
を用いて関数を呼び出すのかなぁと思いました。
少しずつでもいいので教えてください。
お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C言語において、 配列要素をひ...
-
構造体のextern方法
-
define で 配列
-
要素数・要素の値が未定の配列...
-
C#で構造体の配列を持った構造...
-
c言語
-
C#で配列が空かを判定するには?
-
2つの要素をペアで管理する方法
-
C言語を使って、ファイルの読み...
-
配列の要素数に変数を入れたい...
-
const で宣言してるのに、値が...
-
万年カレンダーについて。
-
int i, int i[1];
-
2番目の最大値を求める
-
C言語 ファイルの指定された行...
-
MFCのCArrayを使った二次元配列
-
void型のfunc( )に二次元配列の...
-
[C++/CLI]マネージコードで配列...
-
IPアドレスを配列に代入する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
C言語において、 配列要素をひ...
-
c言語
-
C言語 ファイルの指定された行...
-
define で 配列
-
C#で構造体の配列を持った構造...
-
C言語の課題が出たのですが自力...
-
char型配列をint型に代入するには
-
C#で配列が空かを判定するには?
-
MFCのCArrayを使った二次元配列
-
コンボボックスでデフォルト値...
-
MFC - ダイアログボックスのPic...
-
c言語 構造体
-
2番目の最大値を求める
-
C言語から質問です。
-
Cのエラー
-
プログラミングに関する問題が...
-
C言語の2次元配列 容量が大き...
-
Visual C++を 用いたテキストフ...
おすすめ情報