- ベストアンサー
C言語:forを用いたプログラム
6時間格闘した結果皆さんに聞くことにさせていただきました; よければ回答、またはヒントを与えてくださるとうれしいです。 自然数nを入力すると,1からnまで出力するプログラムを,for文を用いて作成せよ.ただし,2の倍数の時は数値の右側に*を,3の倍数の時は数値の右側に#を表示させよ ちなみにまだまだ勉強足らない初心者です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
やってたのが10年近く前なので少々自信がありません。 #include <stdio.h> int main(void) { int i,x; printf("for文の実験\n自然数を入力してください"); scanf("%d",&x); for( i=1; i<=x; i++ ) { printf("%d",i); //とりあえず現在の値を表示 if( (i/2) == 0 ) //iの値が2の倍数のとき*をつける { printf("*"); } if( (i/3) == 0 ) //iの値が3の倍数のとき#をつける { printf("#"); } printf(" "); //数値が分かりやすいようにスペースを空ける。改行にしたい場合は\nに変更。 } return 0; } 多分こんな感じで良いのではないでしょうか? 複数の関数や条件式が重なっている場合は、1つずつ機能を追加していく感じで考えれば上手く行くのではないかと思います。 この文では*や#を別でつけた方が分かりやすいと判断しましたが、同時につけることも一応できます。 その場合は6などの2の倍数でもあり、3の倍数でもある場合を考慮しないといけません。 少々分かりにくくなってしまいますが、色んな形を試行錯誤するのもプログラミングでは重要ですので、考えてみてはいかがでしょうか?
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6290)
慣れないうちは、問題を一度に解こうとせず、 小さい問題に分割するとうまくいくかもしれません。 今回の場合は、 1)まずは、1~nを出力するだけのコードを書く。 2)当該の数値が2の倍数だったら、数値の右側に'*'を出力するコードを書く。 3)当該の数値が3の倍数だったら、数値の右側に'#'を出力するコードを書く。 の3つに分割してみましょう。 1)が完成してから2)へ、1)2)が完成してから3)へ進んでみましょう。 出力例はこんな感じでいいんでしょうか(nが10の場合)。 1 2* 3# 4* 5 6*# 7 8* 9# 10*
お礼
確かにそうですね。 出力例はそれであっています。 ただ*#を右に表示できなくて現在も格闘中です笑
- guttii108
- ベストアンサー率36% (33/90)
6時間乙です(笑) Cか… 懐かし過ぎて記憶にないんで、条件式についてのみ。 要はループ構造で出力の際に、各倍数の剰余を真偽条件に入れるだけです。 理屈は ↑ だけです。 使う制御はfor, if (elseif と else も使いますね) 真偽条件には剰余(%)を利用すればOKです。 どーしても判らない場合は下記にヒントを超えた何かを遺しておくので、どうぞ~ for(i = 1; i >= n; i++){ if:iが2の剰余かどうか? i+"*\n"; elseif:iが3の剰余かどうか? i+"#\n"; else i+"\n"; }
お礼
現在も格闘中です笑 ヒントを超えたもの参考にさせていただきますね笑
- Tasuke22
- ベストアンサー率33% (1799/5383)
答えを書くのは簡単な話です。 ただ質問者様のプラスになるかどうかが問題でしょう。 そのためには6時間格闘した内容を知らないと、プラスになる回答が出来ません。 間違っている、知らないことを言うのは恥ずかしいかもしれませんが、それが分からないと答え様がないということです。
お礼
すいません、内容は書き忘れてました。
- maiko0318
- ベストアンサー率21% (1483/6969)
javaで書けば、 int i; int t2; int t3; int n = 10; for (i = 1; i <= n; i++) { t2 = i / 2; t3 = i / 3; System.out.print(i); if(i == t2 * 2) System.out.print("*"); if(i == t3 * 3) System.out.print("#"); }
お礼
こんなに詳しくありがとうございます。 このプログラムだと*#が数字の右に表示されなかったので、今は*#を右に表示させることに試行錯誤しています笑 これからがんばります。