第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部