今、大学でC言語の課題をやっています。サンプルが与えられています。
その課題は、配列の逆順です。
for文を使って、実行結果は以下のようにならなければならなく、「並び替えの結果は再び num1, num2 に保存される」という条件なのですが、逆順になるにはどのようなプログラムを組めば良いのでしょうか?
ソースの「 /* ここに処理を書く */」にプログラムを書かなければいけないのですが、まったくの初心者でわかりません。誠にお手数ですが、教えていただければ幸いです。宜しくお願いいたします。
-----実行結果-----
C:\c_lang>reverse
--- before ---
2 4 9 10 5 3 1 7 8 6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
--- after ---
6 8 7 1 3 5 10 9 4 2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
-----以下ソース-----
#include <stdio.h>
void print_num( int *num, int len );
void reverse_num( int *num, int len );
int main( void )
{
int num1[10]={2,4,9,10,5,3,1,7,8,6};
int num2[15]={1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15};
printf("--- before ---\n");
print_num( num1, 10 );
print_num( num2, 15 );
/* 逆順に並べ替え */
reverse_num( num1, 10 );
reverse_num( num2, 15 );
printf("--- after ---\n");
print_num( num1, 10 );
print_num( num2, 15 );
return 0;
}
void print_num( int *num, int len )
{
int i;
for( i=0; i<len; i++ ){
printf( "%d ", num[i] );
}
printf("\n");
}
void reverse_num( int *num, int len )
{
/* ここに処理を書く */
}
-----ソースここまで-----
No.4ベストアンサー
- 回答日時:
>元ソースの下部にある「 /* ここに処理を書く */」のとこだけしか記述できません。
まさにその位置へ、皆さんのヒントを実装するんです。
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 が、ラストの次の要素を指すことになります。
これでもう分かりますね。仕上げはご自分で頑張って下さい。
No.5
- 回答日時:
★身の回りのものに置き換えて考えると・・。
・2個のコップがあって、
1つにビール、
もう1つに日本酒 が入っている。
これらを入れ替えたいとき、
もうひとつ、空の一時待避用の『容器1つ』が必要ですよね。
その容器に一旦、ビールを入れて、
空いたコップに、日本酒を入れる。
空いたコップに、待避したビールを入れる。
-----------------------------------------------------
★これをコードにして「所定位置」に入れる。
ヒント:データ数の奇数偶数は考えなくても・・。
「コロンブスの卵」かもしれないけど、すごく簡単。
>for文でプログラムを書くのと、・・
→ 先生は、次に「ソート」(参考URL等)を・・。
---------------------------------------------------------
ちなみに、「課題」を無視すれば、
reverse_num() 関数は不要で、print_num() 関数だけで、
(正逆のスイッチを引数で渡す)実現できます。
↑これじゃあ、「学習」にならん。
参考URL:http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/al …
No.3
- 回答日時:
配列 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文でプログラムを書くのと、元ソースの下部にある「 /* ここに処理を書く */」のとこだけしか記述できません。
元ソースをいじってはいけないというのが条件です。
すいません、表記してなかったですね。
No.2
- 回答日時:
print_numだったら、
0,1,--,9
のところを
9,8,--0
ですね。
for( i=0; i<len; i++ )
を
for( i=len-1; i>=0; i-- )
に変更
No.1
- 回答日時:
> 逆順になるにはどのようなプログラム
ヒントを差し上げます。
先頭の要素と最後の要素を入れ替えます。
先頭の次の要素と最後の前の要素を入れ替えます。
...
以下同様に、要素数の半分の回数だけ繰り返します。
本当にこれでよいかどうか、まずは手でやってみてください。
正しいことが確認できたら、C言語のコードで表現してみてください。
この回答への補足
ヒントいただき誠にありがたいのですが、元ソースを触ってはいけないというのを表記するのを忘れていました。
大変申し訳ありません。
ソースの下部の「 /* ここに処理を書く */」のとこにプログラムを書くというのが条件になっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
市松模様
-
数字列を3桁ごとにカンマで区切...
-
PowerShellがうまくいかない
-
C言語初心者です、、、お助けく...
-
C言語 エラーの原因がわからな...
-
c言語の配列を使ってサイコロを...
-
因数分解を行うプログラムについて
-
(マルチスレッド)_beginthrea...
-
acceptをalarmでタイムアウトさ...
-
【C++】関数ポインタの使い方
-
windows-findstrの正規表現を使...
-
このプログラミング誰か教えて...
-
質問項目をランダムで選択する...
-
エラー 添字が付けられた値が、...
-
並列プログラミングのπ計算につ...
-
c言語 プログラムのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
c言語の配列を使ってサイコロを...
-
課題でつまってます・・・
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報