プログラミング初心者の数列和計算プログラムのエラー

このQ&Aのポイント
  • 初項1公差1の等差数列において、数値XとYを入力して、この数列におけるX項からY項までの数列の和を算出するプログラムがエラーになっています。
  • プログラムを実行すると、入力したX項からY項までの数列の和を表示することができません。
  • プログラムのwhileループの条件式に誤りがあり、ループが正しく実行されていません。正しい条件式を設定する必要があります。
回答を見る
  • ベストアンサー

プログラミング

“初項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("です。"); }

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

  • ベストアンサー
  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.6

> 『別の変数に変更前のXの値を保持する』にはどうしたらよいですか? 変数X、sum、Y以外に、別の変数を用意します。 Xに何らかの計算を施す前(今回の場合、whileループ前)に、 その別の変数にXの値を代入すれば良いです。 下に例を載せておきます。追加&変更したところに左矢印をいれておきました。 #include<stdio.h> int main(void) { int X; int sum = 0; int Y; int temp; ←これが『whileループ前のXの値』を保存するための変数 printf("第X項から:"); scanf("%d",&X); printf("第Y項まで:"); scanf("%d",&Y); temp = X; ←この行で、変数tempに『whileループ前のXの値』を代入する while(X <= Y) { sum = sum + X; X = X + 1; } printf("初項1公差1の等差数列において、\n"); printf("第%d",temp); ←変数tempに、『whileループ前のXの値』が格納されている printf("項から第%d",Y); printf("項までの数列の和は%d",sum); printf("です。"); }

kokko28
質問者

お礼

有難うございます! 「別の変数を用意する」のをどうしたらよいのか分からなかったのですが、例まで載せていただいて、とても分かりやすく助かりました!!

その他の回答 (7)

  • usatan2
  • ベストアンサー率37% (163/436)
回答No.8

No5です。 >なるほど…。 >やり方はいろいろあるんですね。 No.6さんの、別の変数を用意する方法、 No.7さんの、関数にする方法、 が出ましたから、ついでにもうひとつ。 「Xを使う前に出力する」という方法もあります。 つまり、No.6さんのプログラムの  temp = X; の部分に、  printf("初項1公差1の等差数列において、\n");  printf("第%d",X); を移動させて、Xの値が使われて変化する前に表示してしまい、whileループを実行する訳です。 #趣味の回答でした。 プログラミングって面白いでしょ? 質問者さんがプログラミングを楽しく感じてもらえればうれしいです。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.7

>プログラミングの問題集を解いていて出てきた問題です。 >『繰り返し処理』の単元で、X、Yにはいろいろな数値が入るのですが、 >今回はX=1、Y=10で考えてみようということです。 他の方の回答は全然読んでないんですけど、 最低でも「第 X 項から第 Y 項までの和を求める」部分は関数にしましょう。 関数の実装は while ループを回すもよし、和の公式を用いるもよし。 そうすれば、変更前の X を何処に保存しておこう、などと悩む必要はなくなります。 関数の引数に X を渡せば、勝手に値がコピーされて元の X が変更されることはありません。

kokko28
質問者

お礼

なるほど…。 やり方はいろいろあるんですね。 試してみます。有難うございました!!

  • usatan2
  • ベストアンサー率37% (163/436)
回答No.5

>『第11項から第10項までの数列の和は55です。』 >なぜ、第11項からなんですか? 「printf("第%d",X);」が実行されるときのXは、4行上の「X=X+1]によって、1,2,3・・・、11になっているからです。

kokko28
質問者

お礼

有難うございます。 今気づきました・・・ 。 先ほど解答していただいた方にもありましたが、 『第1項から』にするにはどうしたらよいですか?

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.4

> 上手くいきません。どこが間違っているのでしょうか? 何が上手くいかないのでしょうか? それが分からないと適切なアドバイスができません。 それから言語は何でしょうか? C言語だとしたら、次の点が間違っています。 > main() これは間違っているかどうかは分かりませんが、普通、 int main(void) と記述します。 それからmain関数内の最後に return(0); が無いのも怪しいです。 > while(X <= Y); while(条件式)の後ろに;をつけてはいけません。なので;を消して下さい。 もしコンパイルエラーが発生するなら、先ほど述べた箇所とこの行が原因かもしれません。 それから、whileループ内で変数Xの値が変更されているので、 whileループの後の『 printf("第%d",X);』では 変更後のXの値が表示されます(ANo.2の方が指摘しています)。 本来は、変更前のXの値を表示したいのではないでしょうか? そうであれば、『 printf("第%d",X);』をwhileループ前に配置するか、 別の変数に変更前のXの値を保持するなどの対策をとって下さい。 これ以外に上手くいかないことがあるなら、それを教えて下さい。

kokko28
質問者

お礼

有難うございます! while(条件式)の後ろの;が原因でした。 これで上手く出力できたのですが、 『第11項から第10項までの~』と、なぜか第11項になっています。 どこか式がおかしいのでしょうか?

kokko28
質問者

補足

補足じゃないんですが…。 第11項からになるのは、Xが変更されているからですね。 気づくの遅くてスミマセン。 『別の変数に変更前のXの値を保持する』にはどうしたらよいですか?

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

第 X 項から Y 項までの和がいくつになるのかは「分かっている」んだから わざわざプログラムで順番に足し算する必要などないのでは?

kokko28
質問者

お礼

スミマセン。 プログラミングの問題集を解いていて出てきた問題です。 『繰り返し処理』の単元で、X、Yにはいろいろな数値が入るのですが、今回はX=1、Y=10で考えてみようということです。

  • kumipapa
  • ベストアンサー率55% (246/440)
回答No.2

うん。このままだと、 > 初項1公差1の等差数列において、 > 第11項から第10項までの数列の和は55です。 と出力されそうな予感。 違うのかな?

kokko28
質問者

お礼

ありがとうございます。 『第11項から第10項までの数列の和は55です。』 なぜ、第11項からなんですか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

X は変更していいの?

kokko28
質問者

お礼

ありがとうございます。 Xを変更するとは、数値を変更?もしくはXそのものを変更ですか? ちなみに、X、Yにはいろいろな数値が入っても、数列の和が計算できるようにしたいです。今回は、X=1、Y=10で考えてみようということだと思います。(多分そのような問題だと思いますが…。)

関連するQ&A

  • 数列の結果の表示

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

  • 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言語のfor文について質問です。

    C言語の課題がわかりません‼︎ for文を使って初項a、公差dの等差数列を初項からn項までを加える計算を行うプログラムを作りなさい。その時、a.d.nはscanfを用いて入力できるようする。 また、等差数列の和の公式は使えないものとする。 どなたか回答よろしくお願いします。

  • 数学Bの問題

    数列に関する問題 下記の問題の解答と解説もお願いします 1, 一般項が次の式で表される数列について (1) an=3n-4 初項から第5項まで (2) an=(2n+1)^2 初項から第5項まで 2. 次の等差数列の一般項と第30項 (1) 初項 -2, 公差 3 (2) 9,3,-3,-9 ・・・ 3,次の等差数列の末項が第何項なのか (1) 3,8,13,・・・,38 (2) -4,-6,-8,・・・,-42 4, 第6項が -2, 第15項が 25, である等差数列{an}の初項,公差,一般項 5, 次の等差数列の和 (1) -2,1,4,7,10,13,16,19 (2)初項 -9, 公差 -4, 項数 36 (3)初項 16, 公差 -4, 項数 n 6, 次の等比数列の一般項 (1) 3,-6,12,-24・・・ (2) 3, -3/2, 3/4, -3/8,・・・ 7, 次の等比数列の末項は第何項か (1) 1,2,4,8・・・,512 (2) 3,12,48・・・,768

  • 数学の問題です

    数がいくつかあるのですがすいません><; 1.初項5 公差2の等差数列に対して、初項から第何項までの我がはじめて777より大きくなるか答えよ 2.初項がaで、公差dが自然数である等差数列anが2つの条件  A: a3+a5+a7=93 B:an>100となる最小のnは15 (1)公差d? (2)初項a? (3)a1+a2+・・・・+an>715となる最小のn? 3. 初項が6で 公差dの等差数列がある。初項から第4項までの輪と初項から第12項までの我が等しいとき、第n項から第n+7項までの和をTnとするとき、|Tn|の最小値とそのときのn? 答え: 1.26 2.(1)d=7 (2)a=3 (3)n=15 3・n=5のとき。最小値0 という答えなのですが。やり方などが全く分からないので・・ 出来れば詳しい解説とともにお願いします・・

  • 等差数列です。

    等差数列{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],(クケ)=(スセソタ)である。 よろしくお願いします。上手く書けませんでした御理解いただけたでしょうか。

  • 数列で・・・

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

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

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

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

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

  • 等差数列

    等差数列{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],(クケ)=(スセソタ)である。 よろしくお願いします。昨夜投稿しましたがうまく投稿出来たかどうかわからないので再度投稿しました。もし重なっていましたらごめんなさい。よくわからないので。 投稿の注意点も教えていただけたら嬉しいです。