「宿題」なの?
Bettyさんが発言しています。
> Betty 2010/06/14(月) 21:51:43
> この場合、宿題を出した学校の先生は........
一行質問で意図が伝わらなくてごめん、
質問者本人の発言ではないものから派生して
「宿題である」と確定して話がすすんでるけどなんで?って聞きたかった
επιστημη さんが「え? これ宿題なの?」と聞いてるのに
質問者本人はスルーしてんだから
回答者側が「宿題かどうかは言及してないが、宿題だろうからそれに見合った回答してあ
げよう」
なんて考える必要はないと思うが
大したことではないんで、ここに書きこみます。
要素数がnoのint型の配列vcの並びを逆順にする関数なんですが、
#include <stdio.h>
#define NUMBER 5
void rev_intary(int vc[], int no)
{
int i;
int temp = vc[0];
for(i = 0; i < no; i++)
vc[i] = vc[4 - i];
vc[4 - i] = temp;
}
int main(void)
{
int i;
int ac[NUMBER];
printf(整数を%d入力してください。\n, NUMBER);
for (i = 0; i < NUMBER; i++)
{
printf(ac[%d], i + 1); scanf(%d, &ac[i]);
}
for (i = 0; i < 5; i++)
printf(ac[%d] = %d\n, i, ac[i]);
return (0);
}
どこかが間違っているようなんですがどうように直せばいいのかわかりません。
どなたかお答えできる人がいらしゃればお教え下さい。
新しい質問は新しいスレッドで。
> どこかが間違っているようなんですがどうように直せばいいのかわかりません。
> どなたかお答えできる人がいらしゃればお教え下さい。
それぞれの部分がどういうつもりで書かれたのかわからないので本人が期待している
内容かどうか不明ですが、
> for(i = 0; i < no; i++)
> vc[i] = vc[4 - i];
> vc[4 - i] = temp;
インデントと for の範囲があっていませんね。
4という数値がありますが何の数値ですか?配列サイズなら no です。
main()からrev_intary()が呼び出されていません。
どういう操作をすればいいかを机上で考えてからコーディングすればいいのに。
> 要素数がnoのint型の配列vcの並びを逆順にする関数なんですが、
並びを逆にするのだから、
先頭と最後を入れ替える。
2番目と最後からひとつ前を入れ替える。
3番目と...
この操作を繰り返し実行する。
最後までやっちゃうと元に戻ってしまうから半分でやめる。
これをコード化すれば目的の関数は完成するはずです。
先頭はvc[0]、最後はvc[no-1]
次はvc[1]、最後からひとつ前はvc[no-2]
...
i番目はvc[i]、後ろからi番目はvc[no-1-i]
ここまで書けば後はわかるでしょ。
宿題/課題じゃないなら
#include <algorithm>
#define NUMBER 5
int main() {
int ac[NUMBER];
...
std::reverse(ac, ac+NUMBER); // こんだけ
...
}
maru様
教えていただきありがとうございました。
他にも気になることがあるので、続きは新スレッドにします。
επιστημη様
お答え頂きありがとうございました。
しかし、自分のC言語の理解がまだそこまで進んでいないので、
その答えは生かすことができそうもありません。
申し訳ありません。
C言語とC++言語は別物なのでちゃんと認識して書かれた方が良いです。
επιστημηさんが書かれているSTL関連の話はC++言語での話です。
C言語の範疇で解決する必要があるのであれば、STLは関係なくなります。
C言語でやるなら地道にゴリゴリコーディングする手でしょう。
前の書き込みでも書きましたが、まずは机上でシュミレーションしましょう。
変数を四角で書いて中に値を実際に書いたり消したりしても良いと思います。
まずは実際にどういう動きになれば良いのかを考えます。
その上でその動きを実現する為のコードを考えます。
プログラムのコードは動きを実現する為の物なので
動きを理解していないとコードになりませんし、
たとえ間違ったコードだったとしても自分で気づく事ができません。