• ベストアンサー

数列の結果の表示

いつもお世話になっています。 プログラミングの初心者で勉強中です。 初項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); }

質問者が選んだベストアンサー

  • ベストアンサー
  • maku_x
  • ベストアンサー率44% (164/371)
回答No.1

while 文の中で変数 X を保存しないままインクリメント(1づつ増加させる)しているため、期待しない値(具体的には Y+1)になります。while 文の中のカウンタ変数を別の変数にするか、変数 X を保存して、while ループ終了後、変数 X を戻す処理が必要です。

ichigo2007
質問者

お礼

回答ありがとうございます。 printfの中の結果の表示はうまく表示できるようになりましたが、今度は計算の結果が正しく表示されなくなってしまいました・・・ どこか間違えたんでしょうか・・・

その他の回答 (2)

  • maku_x
  • ベストアンサー率44% (164/371)
回答No.3

> 今度は計算の結果が正しく表示されなくなってしまいました・・・ どのようにソースコードを変更されたのでしょうか? 差し支えなければ、変更後のソースコードの提示をお願いします。 ※ jjon-com さんの提示されたコードを使えば、うまくいくはずですが。

ichigo2007
質問者

お礼

再度ありがとうございます。 No.2さんの方法でも1つ目のほうでは、結果が初項からの和になって出てきてしまうんです。わたしがきっとどこか間違えてしまったでしょうね・・・。しかし、2つ目の方法では、こんな私でもおかげさまで解決することができました。ご丁寧に回答いただき、ありがとうございました。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>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;

ichigo2007
質問者

お礼

回答ありがとうございます 変数を保存して、whileループ終了後、変数Xを戻すやり方でうまくできました。おかげさまで解決することができました。ありがとうございます。

関連するQ&A