- ベストアンサー
数列の結果の表示
いつもお世話になっています。 プログラミングの初心者で勉強中です。 初項1公差1の等差数列で、X項からY項までの和を求めるプログラミングを作っています。 次のようにプログラムを作ったのですが、結果の表示がうまくいきません。最後の第X項から第Y項までの数列の和は・・・のX項の部分がおかしな数字で出てきます。 間違っているところを教えていただけますか? #include<stdio.h> main() { int X = 1; int Y; int sum = 0; printf("第X項から:"); scanf("%d",&X); printf("第Y項まで:"); scanf("%d",&Y); while (X <= Y) { sum = sum + X; X = X + 1; } printf("初項1公差1の等差数列において、\n第%d項から第%d項までの数列の和は%dです。",X,Y,sum); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
while 文の中で変数 X を保存しないままインクリメント(1づつ増加させる)しているため、期待しない値(具体的には Y+1)になります。while 文の中のカウンタ変数を別の変数にするか、変数 X を保存して、while ループ終了後、変数 X を戻す処理が必要です。
その他の回答 (2)
- maku_x
- ベストアンサー率44% (164/371)
> 今度は計算の結果が正しく表示されなくなってしまいました・・・ どのようにソースコードを変更されたのでしょうか? 差し支えなければ、変更後のソースコードの提示をお願いします。 ※ jjon-com さんの提示されたコードを使えば、うまくいくはずですが。
お礼
再度ありがとうございます。 No.2さんの方法でも1つ目のほうでは、結果が初項からの和になって出てきてしまうんです。わたしがきっとどこか間違えてしまったでしょうね・・・。しかし、2つ目の方法では、こんな私でもおかげさまで解決することができました。ご丁寧に回答いただき、ありがとうございました。
- jjon-com
- ベストアンサー率61% (1599/2592)
>while 文の中のカウンタ変数を別の変数にする int i = X; while (i <= Y) { sum = sum + i; i = i + 1; } >変数 X を保存して、while ループ終了後、変数 X を戻す int w = X; while (X <= Y) { sum = sum + X; X = X + 1; } X = w;
お礼
回答ありがとうございます 変数を保存して、whileループ終了後、変数Xを戻すやり方でうまくできました。おかげさまで解決することができました。ありがとうございます。
お礼
回答ありがとうございます。 printfの中の結果の表示はうまく表示できるようになりましたが、今度は計算の結果が正しく表示されなくなってしまいました・・・ どこか間違えたんでしょうか・・・