第5講 for文を理解しよう
第1話 for文とは?
for文を知らなければ、
1+2+3+4+5+6+7+8+9+10
を計算するプログラムを考えよといわれれば、
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
x=x+1;
x=x+2;
x=x+3;
x=x+4;
x=x+5;
x=x+6;
x=x+7;
x=x+8;
x=x+9;
x=x+10;
return(x);
}
}
実行画面
というようなプログラムを組むしかないでしょう。
しかし、
x=x+1;
x=x+2;
x=x+3;
x=x+4;
x=x+5;
x=x+6;
x=x+7;
x=x+8;
x=x+9;
x=x+10;
は余りに芸がありません。
同じことを人間が繰り返しているからです。
繰り返しは、コンピュータにやらせることであって人間がやるものではありません。
それに、1+2+3+・・・+100000なら手も足も出ません。
同じことを繰り返す処理をループ処理といいます。
そして、ループ処理の1つの方法がfor文です。
ループ処理には、他にwhile文、do〜while文があります。
スパゲッティ・プログラムの元凶として評判の悪いgo to 文を使ってもループ処理は実現できます。
while文、do〜while文については、後に学習します。
for文は次のように使います。
for(i=1;i<11;i++){
・
・
・
}
つまり、
for(制御変数=初めの値;ループの条件式;制御変数の動き方){
・
・
・
}
です。
for(i=1;i<11;i++){
・
・
・
}
の場合for文の制御変数はiであって、
iの最初の値は1で、iは11未満の範囲で動きます。
今まで用いてきませんでしたが、
i++はi=i+1と同じです。
C言語、C++、Javaでは様々な簡略表現が用意されています。
i++;⇔i=i+1;
i+=2;⇔i=i+2;
i*=2;⇔i=i*2;
などです。
本講義で使用してこなかった理由は、
プログラムはわかりやすく書く、これが構造化プログラミングの要請です。
簡略表現は、便利ですが、わかりにくくなるという短所をもっています。
i++はiが1つずつ増えていくこと意味します。
ですから、このfor文を使えば先のプログラムは、
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
int i;
for(i=1;i<11;i++){
x=x+i;
}
return(x);
}
}
となります。
簡略表現を使うと、
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
for(int i=1;i<11;i++){
x+=i;
}
return(x);
}
}
です。
さらに、for文などは
for(・・・){
A;
}
のよに命令文が1文しかない場合は、
for(・・・)A;
と書くことが認められています。
それを使うと、
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
for(int i=1;i<11;i++)x+=i;
return(x);
}
}
と書くことができますが、基本はわかりやすさ優先で、
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
int i;
for(i=1;i<11;i++){
x=x+i;
}
return(x);
}
}
と書いた方がよいと思います。
では、皆さん問題です。
@ 1から100までの和
A 2+4+6+・・・+1000
B 3+8+13+・・・+503
を求めるプログラムをfor文を用いて考えてください。
注 3,8,13,18,・・・のように差が同じ数の列を等差数列と言います。
ですから@ABは等差数列の和を求める問題です。
第4講第8話へ 第2話へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第2部
初心者のための
VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための Java 入門 サイト 基礎から応用まで第1部
初心者のための Java 入門 サイト 基礎から応用まで第2部
初心者のための Java 入門 サイト 基礎から応用まで第3部