第3講 繰り返し処理for文
第5話 scanf()によって、初項・交差・末項の値を取得して、等差数列の和を求めるアプリ
↓
キーボードから初項を入力してエンター
↓
↓
キーボードから交差を入力してエンター
↓
↓
キーボードから末項を入力してエンター
↓
を実現するアプリコード例
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a,i,s,k,m; //sは初項、kは交差、mは末項
printf("初項、交差、末項の順に入力してください。\n");
printf("初項=");
scanf("%d", &s); //キーボードから初項sの値を取得
printf("交差=");
scanf("%d", &k); //キーボードから交差kの値を取得
printf("末項=");
scanf("%d", &m); //キーボードから末項mの値を取得
a = 0; //aの初期化
for (i = s; i <= m; i += k) {
a += i;
}
printf("初項=%d 交差=%d 末項=%dのときの、等差数列の和=%d\n", s, k, m, a);
}
さて、今回からアプリ
(アプリケーションソフトの最初の3文字、
アプリケーションソフトは応用ソフトの意味。
タブレットが出てくるようになってから、
アプリと略称するようになりましたが、
昔は後ろの3文字をとり、
ソフトと略称しました。
本サイトでは、両方の略称を気分で使い分けますが、
両方ともアプリケーションソフト=応用ソフトです。)
という名称を使うのは、キーボードから取得できるようになって、
はじめて実用的なプログラムになったからです。
a = 0; //aの初期化
に注目してください。
最初に値を入れることを変数の初期化といいます。
実は変数初期化は宣言と同時にも出来ます。
int a=0;
とすると、宣言と初期化が同時に行えます。
是非とも覚えておいてください。これ使うと、
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a=0,i,s,k,m; //sは初項、kは交差、mは末項
printf("初項、交差、末項の順に入力してください。\n");
printf("初項=");
scanf("%d", &s); //キーボードから初項sの値を取得
printf("交差=");
scanf("%d", &k); //キーボードから交差kの値を取得
printf("末項=");
scanf("%d", &m); //キーボードから末項mの値を取得
for (i = s; i <= m; i += k) {
a += i;
}
printf("初項=%d 交差=%d 末項=%dのときの、等差数列の和=%d\n", s, k, m, a);
}
となります。
尚、末項の入力は正確でなくても大丈夫です。
例えば、
初項=4、交差=3の第4項までの和なら
4+7+10+13
ですが、
末項=15で入力しても同じ
4+7+10+13
が計算されます。
理由は、
for (i = s; i <= m; i += k) {
をご覧になればわかります。
i += kの計算から13の次は17で、 i <= mの条件を満たしませんから、
for文実行の範囲外になり、
+17の部分は計算されないからです。
scanfによってキーボードから値が入力されるようになって便利にはなりましたが、
今回は1回しか使えませんね。
これではアプリの名に値いません。
そこで、×をしない限り何回でも計算できるように、
改良します。
ヒントとして、
×が押されない限り、上のような画面が無限に続くようにするためには、
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a;
for (;;) {
printf("キーボードからaの値を入力してください。\n");
printf("a=");
scanf("%d", &a);
printf("入力された値は=%d\n", a);
printf("アプリを終了するときには×をクリックしてください。");
printf("\n\n");
}
}
とすればよいということをお伝えしておきましょう。
実際にコピペしてCtrl+F5をしてください。
for (;;) {}とすると、同じことが無限に繰り返されます。
すべてを空白にすることが出来ます。
もちろん、
int i;
for (i = 0;;) {}
としても良いですし、
int i;
for (i = 0;i<2;) {}
としても結果は同じです。
i++;がないためにiはいつまでも0のままですから。
では皆さんに×をクリックしない限り何回でも使える
アプリを開発していただきたいと思います。
ヒントはfor文は入れ子式につかることが出来るということです。
int i,j;
for(i=0;i<10;i++){
・・・
・・・
for(j=0;j<5;j++){
・・・
・・・
・・・
}
・・・
・・・
}
2次元繰り返し処理といいます。
(因みに上の例だと青の部分は10×5=50回繰り返されます。
for(i=0;i<10;i++)の場合繰り返される回数は10回です。
なぜなら、iは
0,1,2,3,4,5,6,7,8,9
の10通りの値を取るからです。
for(j=0;j<5;j++)なら5回です。
jの値は、
0,1,2,3,4
の5通りですから。
第3講第1話で述べたように、0のカウントを忘れないでください。)