• ベストアンサー

数列の結果の表示

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

  • プログラミング

    “初項1公差1の等差数列において、数値XとYを入力して、この数列におけるX項からY項までの数列の和を算出する”プログラムを作っています。 実行結果を 『第X項から:1  第Y項まで:10  初項1公差1の等差数列において、  第1項から第10項までの和は55です。』としたいのですが、 上手くいきません。どこが間違っているのでしょうか? (初心者なのでかなりミスがあると思いますが…。) ↓作ったプログラム #include<stdio.h> main() { int X; int sum = 0; int Y; printf("第X項から:"); scanf("%d",&X); printf("第Y項まで:"); scanf("%d",&Y); while(X <= Y); { sum = sum + X; X = X + 1; } printf("初項1公差1の等差数列において、\n"); printf("第%d",X); printf("項から第%d",Y); printf("項までの数列の和は%d",sum); printf("です。"); }

  • c言語のwhile文を使った計算で困っています、助けてくださいm・・m

    第X項から第Y項までの和を求めるプログラムを作りたいのですが、どうしてもうまくいきません、問題はこうなっています 初項1公差1の等差数列がある(An={1 2 3 4 5 ・・・n})。数値XとYを入力して、この数列におけるX項からY項までの数列の和を算出するプログラムを作成せよ。実行結果の例を以下に示す。 私はこの問いに対してこのようにプログラミングしました #include<stdio.h> void main() { int X; int Y;     int sum=0; printf("第X項から:"); scanf("%d",&X); printf("第Y項まで:"); scanf("%d",&Y); while(X<=Y) { sum=sum+X; X++;     } printf("初項1交差1の等差数列において、\n"); printf("第%d項から第%d項までの数列の和は%dです。",X,Y,sum); } こうすると最後のX項の値がY項より1大きく表示されてしまいます、どうしたらよろしいのでしょうか?どなたかわかる方返答をお願い致します。

  • 数列で・・・

    公差が正整数の等差数列があり、そのある項は0で、 初項から第35項までの和は665である。この数列の公差を求めよ。 という問題がありましたが、難しすぎて解けませんでした。 どうかお助けください。よろしくお願いいたします。

  • 等差数列です。

    等差数列{an}はa2+a4=16, a3+a5=22を満たしている。このとき、数列{an}の初項(ア),公差(イ)である。また等差数列{bn}は初項から第5項までの和が45、第6項から第10項までの和が145である。この時数列{bn}との初項は(ウ),公差は(エ)である。二つの数列{an}に共通な項を小さい順にC1,C2,C3....,,,,とすると数列{Cn}は初項が(オ)、公差が(カキ)の等差数列である。 また、二つの数列{an}と{bn}の少なくとも一方に含まれている項を小さい順に並べて、d1,d2,d3,......とする。ただし共通な項はいずれか一方のみを並べるものとする。この時、dn>100を満たす最小の整数nは(クケ)であり、d(クケ)=(コサシ)であるさらにΣ[i=k,n],(クケ)=(スセソタ)である。 よろしくお願いします。上手く書けませんでした御理解いただけたでしょうか。

  • 等差数列

    等差数列{an}はa2+a4=16, a3+a5=22を満たしている。このとき、数列{an}の初項(ア),公差(イ)である。また等差数列{bn}は初項から第5項までの和が45、第6項から第10項までの和が145である。この時数列{bn}との初項は(ウ),公差は(エ)である。二つの数列{an}に共通な項を小さい順にC1,C2,C3....,,,,とすると数列{Cn}は初項が(オ)、公差が(カキ)の等差数列である。 また、二つの数列{an}と{bn}の少なくとも一方に含まれている項を小さい順に並べて、d1,d2,d3,......とする。ただし共通な項はいずれか一方のみを並べるものとする。この時、dn>100を満たす最小の整数nは(クケ)であり、d(クケ)=(コサシ)であるさらにΣ[i=k,n],(クケ)=(スセソタ)である。 よろしくお願いします。昨夜投稿しましたがうまく投稿出来たかどうかわからないので再度投稿しました。もし重なっていましたらごめんなさい。よくわからないので。 投稿の注意点も教えていただけたら嬉しいです。

  • 高校 数学の問題です【等差数列と等比数列】

    第5項が10、初項から第5項までの和が90である等差数列{αn}がある。 1. 初項と公差を求めよ 2. 初項から第n項までの和Snの最大値を求めよ 第2項が6、第5項が48である等比数列{αn}がある。ただし、公比は実数とする。 1. 初項と公比を求めよ 2. 初項から第n項までの和を求めよ

  • 等差数列の公差と初項を・・・

    第15項が25、第10項から第15項までの和が120 の等差数列の公差、初項を求めたいのですが、どのようにとけば良いのか分かりません。至急教えて下さい。

  • 等差数列の基本的な問題

    第7項が29、第10項から第19項までの和が815である等差数列の初項と公差を求めよ 一応答えが出たのですが、その答えだと和が会わないような気がするんです。 初項239 公差-35 連立するときに間違えたと思い何度も確認したのですが、よくわからないのです。 以下の式でいいのでしょうか? a+6d=29 1/2*10*(2a+9d)=815 かなり初歩的な質問と思われますが、宜しくお願いします

  • 等差数列の問題です。

    初項が80、公差が-3の等差数列の初項から第n項までの和が最大となるのは、n=○○のときで、その和は○○○○である。 この問題を教えて下さい。 宜しくお願いします。

  • 【数列】

    初項が5で、公差が7の等差数列{an}と、 初項が6で、公差が4の等差数列{bn}がある。(n=1,2,3、…) (1)ak=b1となる自然数k、lが存在するとき、 lを7で割ったあまりは? (2)数列{an}と{bn}に共通な高を小さい順に並べた数列{cn}の一般項は? (3)数列{cn}で2000以下の項の和Sは? (1)から分かりません… どうとき始めたらよいか、さっぱりです。 解説付きでお願いしたいです!