第3講 繰り返し処理for文
第4話 階差数列の2乗の和解答例
1,2,3,・・・,100とか
5,7,9,・・・,31
のような数の並びを等差数列といいます。
そして最初の項(数字)を初項、後ろの項と前の項の差を交差といいます。
交差は項差ではないことに注意してください。
どこの差も一定なのが等差数列なので、公の文字を使い交差というのです。
それで今回の和名が階差数列の2乗の和解答例となっています。
それでは答え合わせをしましょう。
@1の2乗+2の2乗+3の2乗+・・・+100の2乗
解答例
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a, i; //整数を入れる箱aを用意
a = 0;
//繰り返し処理
for (i = 1; i <= 100; i++) {
a = a + i*i; //2乗の和の計算
}
printf("1の2乗+2の2乗+3の2乗+・・・+100の2乗=%d\n", a); //箱aの中身を表示
return(0); //文法上の決まりのために意味のない0という整数を返している
}
実行画面
1の2乗+2の2乗+3の2乗+・・・+100の2乗=338350
学習が進んできたために、前話辺りから注釈文(コメントともいいます)の
コメントが変わっていることに注意してください。
A5の3乗+7の3乗+9の3乗+・・・+31の3乗
(これは初項5、公差2、末項(最後の項)31の等差数列の2乗の和です。)
解答例
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a, i; //整数を入れる箱aを用意
a = 0;
//繰り返し処理
for (i = 5; i <= 31; i+=2) {
a = a + i*i*i; //3乗の和の計算
}
printf("5の3乗+7の3乗+9の3乗+・・・+31の3乗=%d\n", a); //箱aの中身を表示
return(0); //文法上の決まりのために意味のない0という整数を返している
}
実行画面
5の3乗+7の3乗+9の3乗+・・・+31の3乗=130788
前話でも今話でもいちいち初項・公差・末項をプログラムコードに入れていました。
このやり方は、汎用的(用途の広い)なプログラムの組み方ではありません。
プログラムは、汎用的にして普遍的なものにすることが理想です。
そこで、初項・公差・末項をキーボードから指定して、
計算することが出来るように変更します。
例えば、変数sの値をキーボードから取得するには、
scanf("%d",&s);
とします。単にsでなく&が付いていることが気になるでしょうが、
どうしてこれを付けなければならないのかは、
ポインタを学習しなければなりませんので、
今は決まりであると受け取ってください。
(※scanfを使うと、
デバッグによって
というメッセージが出てエラーする場合があります。エラーを解消するには、
プロジェクト名aのところで右クリックしてプロパティをクリックしてから、
C/C++の全般を選んでSDLチェックの右側をクリックすると、
と赤い囲いが出てきますので、そこをクリックして、
「いいえ」を選んでからOKボタンを押します。)
例えば、次のようにプログラムを組んで実行すると、
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a; //整数を入れる箱aを用意
printf("aの値をキーボードから入力してください。\n");
printf("a=");
scanf("%d", &a); //キーボードからaの値を取得
printf("a=%d\n", a);
}
となり、キーボードから例えば15を入力すると、
となります。
それで皆さん、等差数列の和を求めるアプリ
↓
キーボードから初項を入力してエンター
↓
↓
キーボードから交差を入力してエンター
↓
↓
キーボードから末項を入力してエンター
↓
を開発してください。