- ベストアンサー
数列の結果の表示
いつもお世話になっています。 プログラミングの初心者で勉強中です。 初項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); }
- ichigo2007
- お礼率96% (82/85)
- その他([技術者向] コンピューター)
- 回答数3
- ありがとう数3
- みんなの回答 (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を戻すやり方でうまくできました。おかげさまで解決することができました。ありがとうございます。
関連する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大きく表示されてしまいます、どうしたらよろしいのでしょうか?どなたかわかる方返答をお願い致します。
- ベストアンサー
- C・C++・C#
- 等差数列です。
等差数列{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=○○のときで、その和は○○○○である。 この問題を教えて下さい。 宜しくお願いします。
- ベストアンサー
- 数学・算数
お礼
回答ありがとうございます。 printfの中の結果の表示はうまく表示できるようになりましたが、今度は計算の結果が正しく表示されなくなってしまいました・・・ どこか間違えたんでしょうか・・・