第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大きく表示されてしまいます、どうしたらよろしいのでしょうか?どなたかわかる方返答をお願い致します。
No.4
- 回答日時:
#3さんの回答の最後に書いてある考え方を採用して、
#include <stdio.h>
int main(void)
{
int x, y, sum = 0;
printf("第X項から:");
scanf("%d", &x);
printf("第Y項まで:");
scanf("%d", &y);
printf("初項1交差1の等差数列において、\n");
printf("第%d項から第%d項までの数列の和は", x, y);
while (x <= y) {
sum += x;
x++;
}
printf("%dです。\n", sum);
return 0;
}
すごいです!わかりました、このように、和で区切るとは思いもしなかったです!ほんとうにありがとうございまたm・・m
でもみなさんが教えてくれた、新しい変数を使ったプログラミングをすることも挑戦してみます!!
答えてくださったみなさん本当にありがとうございました!
No.3
- 回答日時:
初期値X=3,Y=8の時のwhile文のある位置でのX,Y,sumの値を紙に書いてみればわかりますよ。
1回目 X=3,Y=8,sum=0
2回目 X=4,Y=8,sum=3
3回目 X=5,Y=8,sum=7
4回目 X=6,Y=8,sum=12
5回目 X=7,Y=8,sum=18
6回目 X=8,Y=8,sum=25
7回目 X=9,Y=8,sum=33
7回目でwhile文は偽になり{から}までのブロックは実行されません。
ですからprintfが実行される時点ではXは9、Yは8、sumは33になります。
やり方は二通りあります。
変数をひとつ追加する方法と、変数を追加しないでprintfの書き方をを少し工夫する方法です。
返答ありがとうございます。
asuncionさんとQuantさんの助言の通りこのようにプログラムを作り直したのですが、X=3、Y=8のときに和が36となってしまいました。何がおかしいのでしょうか?本当に初心者ですいませんm・・m
#include<stdio.h>
void main()
{
int X;
int Y;
int sum=0;
int Z=X;
printf("第X項から:");
scanf("%d",&X);
printf("第Y項まで:");
scanf("%d",&Y);
while(Z<=Y)
{
sum=sum+Z;
Z++;
}
printf("初項1交差1の等差数列において、\n");
printf("第%d項から第%d項までの数列の和は%dです。",X,Y,sum);
}
No.2
- 回答日時:
#1さんの回答は正しくありません。
Xの値をインクリメントしている限り、
while文のループを抜けてからデクリメントしてもしなくても、
最初に入力したXの値とは異なっているのですから、
正しい結果を得ないのは当然です。
対策は、最初に入力したXの値を「別の変数」に保存しておき、
最後のprintfのXのかわりに、その「別の変数」の値を出力することです。
No.1ベストアンサー
- 回答日時:
処理を実施して、x++;した後に条件判断でx>yを判断しているから、x+1とyが等しくなるのは当たり前。
ループから抜けたら
x--;
の一文を加えればOK。
edmin2004さんのおっしゃる通りやってみたのですが私の知識がない分うまくいきませんでした。すいません、初心者で申し訳ございません。
質問の内容が具体的でなく伝わりにくかったと思いますので、もう一度お教えくださいm・・m
たとえばXに3Yに8を代入すると最後の文では
第9項から第8項までの数列の和は33です。
と表示されてしまうのです。本当ならば第3項から第8項までと表示させたいのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- 数学 数bの問題です。 初項が-29、公差が3である等差数列anにおいて初項から第n項までの和をsnとする 4 2023/05/16 16:32
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
C言語 数字以外を入力させない...
-
c言語for文
-
#if 1 #elseの意味について
-
c言語で平均をだす
-
n個からm個を取り出すプログ...
-
行列をべき乗させるプログラム
-
scanf関数を用いての加減乗除%...
-
C言語で電卓を作成する。
-
c言語プログラミングで1から100...
-
配列を使って魔方陣
-
C言語 偶数判定
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
C言語 重複しない4ケタの乱数...
-
C言語プログラムが理解できなくて…
-
C言語の二分法のプログラムにつ...
-
C言語階乗の総和を求める
-
scanfが実行されません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
getcの改行判定
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
プログラミングに関して
-
C言語についてですfor ifをつか...
おすすめ情報