- ベストアンサー
C言語で配列の逆順を実現する方法とは?
- C言語の課題として配列の逆順を求める方法について説明します。
- 配列の逆順にするためのプログラムの書き方を解説します。
- for文を使用して配列の逆順を実現する方法を詳しく説明します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>元ソースの下部にある「 /* ここに処理を書く */」のとこだけしか記述できません。 まさにその位置へ、皆さんのヒントを実装するんです。 void reverse_num( int *num, int len ) { } ↑大前提。これが「関数」というものですが分かりますか? これの呼び出し元を参照すると >reverse_num( num1, 10 ); となっています。 num1とはなんぞや、というと >int num1[10]={2,4,9,10,5,3,1,7,8,6}; 以上からreverse_num()に渡す第1引数(型: int*)には&num1[0]、 次の引数lenには要素数が渡されることになりますね。 reverse_num関数に入った直後は、 num + len が、ラストの次の要素を指すことになります。 これでもう分かりますね。仕上げはご自分で頑張って下さい。
その他の回答 (4)
- yama5140
- ベストアンサー率54% (136/250)
★身の回りのものに置き換えて考えると・・。 ・2個のコップがあって、 1つにビール、 もう1つに日本酒 が入っている。 これらを入れ替えたいとき、 もうひとつ、空の一時待避用の『容器1つ』が必要ですよね。 その容器に一旦、ビールを入れて、 空いたコップに、日本酒を入れる。 空いたコップに、待避したビールを入れる。 ----------------------------------------------------- ★これをコードにして「所定位置」に入れる。 ヒント:データ数の奇数偶数は考えなくても・・。 「コロンブスの卵」かもしれないけど、すごく簡単。 >for文でプログラムを書くのと、・・ → 先生は、次に「ソート」(参考URL等)を・・。 --------------------------------------------------------- ちなみに、「課題」を無視すれば、 reverse_num() 関数は不要で、print_num() 関数だけで、 (正逆のスイッチを引数で渡す)実現できます。 ↑これじゃあ、「学習」にならん。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
配列 int num[N] と int i, j があるとき、 num[i] と num[j] の内容を入れ替えるコードは書けますか? これができれば簡単: int i = 0; int j = 配列の最大添え字; while ( i < j ) { num[i] と num[j] を交換する。 i++; j--; }
補足
>入れ替えるコードは書けますか? 申し訳ありません。書けないです。 さらに条件というのがありまして、 for文でプログラムを書くのと、元ソースの下部にある「 /* ここに処理を書く */」のとこだけしか記述できません。 元ソースをいじってはいけないというのが条件です。 すいません、表記してなかったですね。
print_numだったら、 0,1,--,9 のところを 9,8,--0 ですね。 for( i=0; i<len; i++ ) を for( i=len-1; i>=0; i-- ) に変更
- asuncion
- ベストアンサー率33% (2127/6289)
> 逆順になるにはどのようなプログラム ヒントを差し上げます。 先頭の要素と最後の要素を入れ替えます。 先頭の次の要素と最後の前の要素を入れ替えます。 ... 以下同様に、要素数の半分の回数だけ繰り返します。 本当にこれでよいかどうか、まずは手でやってみてください。 正しいことが確認できたら、C言語のコードで表現してみてください。
補足
ヒントいただき誠にありがたいのですが、元ソースを触ってはいけないというのを表記するのを忘れていました。 大変申し訳ありません。 ソースの下部の「 /* ここに処理を書く */」のとこにプログラムを書くというのが条件になっています。
お礼
ありがとうございます。 とにかく、みなさまのアドバイスをもとに やってみます。 ありがとうございました。