- ベストアンサー
和を求める問題
C言語初心者です・・・。 (1)正の整数値nを読み込んで、1からnまでの和sumを 求めて出力するmain関数を作成して実行。 (2)(1)で作ったプログラムを、異なるnの値を入力して 何回も繰り返すプログラムに変更して実行。 ただし、0または負のnの値が入力されたら、終了。 (入力された数字は出力する) (1)は本を読んで分かりました。 (2)が分かりません。 #include<stdio.h> int main(void) { int i = 1,n,sum = 0; while( n > 0 ) { printf("整数を入力 "); scanf("%d",&n); while( i <= n ) { sum += i; i++; } if( n <= 0 ) { printf("終了\n"); } } printf("合計は%dです\n",sum); return 0; } ↑を試してみましたが、全然うまくいきませんでした。 また、入力した数字を出力する方法が分かりません。 詳しく解説していただければ幸いです。 本を読んで実際に内容を改造したりして、いろいろ動かしてみてはいるのですが、実際にこれを作れと言われると慣れないせいかすごく難しく感じます。 これも、なんかコツがあればついでによろしく お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
幾つかおかしなところを。 1) while( n > 0 ) ←※1 { printf("整数を入力 "); scanf("%d",&n); ←※2 while( i <= n ) { 略 } } 繰り返しの判定を※1でしているのに、判定する為のnをそれよりも後の※2で取っています。 さらに、最初に※1に来るまでにnが初期化されていません。 2) 合計はnを入力する毎に出すのが正解だと思われますが、 その場合には printf("合計は%dです\n",sum); は繰り返し(↑の※1)の中に居る必要があります。 3) sumが途中で初期化されないので、nが入力される度にどんどんと増えていってしまいます。 ざっと見た所、このくらいでしょうか。 丸々答えを載せてしまう事もできますが、それでは為にならないのでこんな感じで。 頑張ってください。
その他の回答 (5)
- pi8027
- ベストアンサー率11% (6/53)
何故か下のURIだとアクセスできないので http://math.xxxxxxxx.jp/test.c を見てください。
- pi8027
- ベストアンサー率11% (6/53)
作りました。 どうしても分からないときは http://math.xxxxxxxx.jp/%83f%81%5B%83%5E%8C%F0%8A%B7%97p/test.c 此れが答えです。 但し、自分で考えることをお勧めします。
お礼
ありがとうございます。 参考にさせていただきますね。
- penguintail
- ベストアンサー率37% (3/8)
独学でがんばっておられるようなのでヒントを2つほど。 1.) 問題がいくつかあるため、一箇所を直して動くものでもありません。 2.) do while という制御文を勉強してみましょう。内側のループは for も有用です。 コツは、やはり読んで改造することです。いきなり好きなようにコードを書ける人などおりません。 たくさんのコード、言語を読んでください。そして改造して、自分の流儀を探していってください。 プログラミングは根気がとても重要な作業です。がんばってくださいね。
お礼
ありがとうございます、 頑張ります!!
- Chronos198
- ベストアンサー率30% (105/349)
追記で。 4) 良く見たらiも途中で初期化されてませんね。 これでは前回の続きからしか動かないでしょう。
- haniwannko
- ベストアンサー率55% (16/29)
現状では、数字を入力しても"終了"が表示されて終わり・・ですよね?たぶん。 後半の部分だけ書きます。 ~ printf("終了\n"); } printf("合計は%dです\n",sum); } //print文を最初のWhileループの中に入れる return 0; } のように、printfとその↑の}を入れ替えて、print文を最初のWhileループの中に入れてみてはどうでしょう? これでうまくうごけばいいのですが・・。残念ながらいま手元にCの動く環境がないので頭の中で実行してるだけです。。すいません。 でも、"何回も繰り返すプログラム"の作り方としてWhileを使用するのは常套手段だと思います。 なかなかよいのではないでしょうか? 私はいまPerlの独習をしていて、同じようにロジックにハマって苦労してますが、やはりプログラミングは習うより慣れろ、だと思います。 数多く作っていけば、おのずと自然なコードが書けるようになると思います。 お互いがんばりましょう。 p.s.動かなかったらごめんなさいです。。
お礼
ありがとうございます。 これからも、勉強を続けていこうと思います。
お礼
ありがとうございます。 また何かありましたらお願いします。