4_for文while文


for文
for文を使えば繰り返し処理ができる。次の配列を知るとfor文がもっと活躍できる。
ニコ動のプログラム

using System;

class Test6{
    public static void Main(){
        for(int i=0; i<10; i++){    //10回ループ
            Console.WriteLine("かっぱっぱ~");
        }
    }
}

ちなみに、10回繰り返すだけなら
for(int i=1; i<=10; i++)
とか
for(int i=0; i<=9; i++)
でもできますが、前者のほうはiが1から始まるというのは次にやる配列との兼ね合いで推奨しません。
後者のi<=9というのは(ここでは10回繰り返すのが)9回しか繰り返さないように見えてしまう可能性があり推奨しません。

forとifの組み合わせ)

動画のプログラム(少し改変しました。)
using System;

class Test6{
    public static void Main(){
        for(int i=0; i<10; i++){    //10回ループ
              if((i%2)==1){    //2で割ったあまりが1なら
              Console.WriteLine(i.ToString()+"は奇数です");   //ToStringをつけなくてもいいが、一応文字に変換するためのToString()つけます
              }
            else{            //2で割ってあまりが1でない、つまり0なら
              Console.WriteLine(i.ToString()+"は偶数です");
            }
        }
    }
}

これはまぁ問題ないでしょう。

ここから高校数学の数列の内容が入ってきます。数列知らないひとや興味ない人は読み飛ばしてください

等差数列和はn(n+1)/2とかで簡単に求められますが、この場合forを使って練習するのでそれ禁止ね。

using System;

class Test6{
    public static void Main(){
        int sum=0;
        for(int i=0; i<10; i++){    //10回ループ
             sum=sum+i;
        }
        Console.WriteLine("sum= "+sum.ToString();
    }
}

1+2+3+・・・+9を求めます

1+2+:::+9は漸化式をたてると
S[n]=S[n-1]+n、S[0]=0
一般に、A[n]=A[n-1]+nみたいに左にA[n]、右にA[n-1]とnだけ置いて
A[n]とA[n-1]をSum,Sumの初期値をA[0],nをiとおいてそのまま書き換えればおk。
なぜそうすれば良いのかは面倒なので省略。数学とか好きな人は考えれ。

例:
S[n]=2*S[n-1]+n/2,S[0]=0でS[5]を求めよ。
まず手動で求めてみましょう。S[1]=1/2、S[2]=2、S[3]=11/2、S[4]=13、S[5]=28.5
//S[n]とS[n-1]をS、n/2をi/2と置き換え
double S=0;    // n/2つまり小数が出てきてるのでint型ではなくdoubleを使う、S[0]=0なので初期値0
for(double d=1.0;d<=5.0;d++){    //これも↓にi/2があるのでdouble、S[5]を求めるのでd<=5.0。じゃないよ
    S=2*S+d/2;
}
Console.WriteLine(S.ToString());

28.5って出てきました

実数型と整数型とキャスト
↑で、forループに使った変数をint型ではなくdouble型を使いました。
理由を説明します。
これを実行してみてください。
int i=3;double d;
d=i/2;
Console.WriteLine(d.ToString());
こたえいくつになるか?i=3でi/2なのでdは1.5になるはず。。。
ところが表示されたのは1でした。
i/2は両方整数型です。
したがって、i/2はそもそも整数です。[整数同士で割り算しても整数にしかなりません]。だからd=i/2とやってもdは1が入ってしまいました。
これを防ぐには
d=(double)i/2;
と。(double)をつけるか、i/2.0というように小数点をつけます。(小数をつけるのは整数型/実数型になり、あまり推奨しません。。。)
これでi/2やi/2.0自体がdouble型だとみなされ、3/2は1.5になります。
こんな風に、(double)とかつけるのを型キャストとかいいます。
すべての型はできるだけ統一しておかないと、小数が整数になったり小数で計算してほしいのに整数扱いされて正しい数値が得られなくなってます。
悪い例
double d=3/2;Console.WriteLine(d.ToString());
良い例
double d=3.0/2.0;またはd=(double)3/2;

次は1~15の掛け算
1*2*3*4*・・・*15
S[n]/S[n-1]=n⇒S[n]=S[n-1]*i、S[1]=1なのでS[n]とS[n-1]を適当な文字におきかえて
double A=1;//めちゃくちゃでかい数なのでintでは収まらない、double型
for(double d=1;d<=15;d++){
A=A*d;    //Aは実数型なので、dも実数型にしました。
}
Console.WriteLine(A.ToString());

宿題の答えw

長々説明したけどべつにsum=sum+iとかはわからなくてもいいです。ここはアルゴリズムとか学ぶ場所じゃないんで。

while文
while(条件){
}
条件がtrueのときに処理を行い、ループする。満たしてないときに飛ばす。

動画の内容はやさしいので飛ばします。
break文
whileやfor文には、break;という文を加えることによって処理を強制的に抜け出せます。
while(true){
//処理
break;
}

たとえば、数値を入力してもらうときに
0という数値が入力されたら終了するときなどに使えます。

int Nyuuryoku;
//Nyuuryokuになにか数を入れてもらう処理
while(true){
    if(Nyuuryoku==0){
    break;
    }
//入力の処理
}

do~while文なんてのもあります。
do{
}while(条件); 文の終了合図のセミコロンがついています!忘れないで

do~whileは最低でも一回なにかやってほしいときに使います。
int x=1;
while(x==2){
    //処理
}
↑はwhileの間の処理は一度も実行されません。
int x=1:
do{
    //処理
}while(x==2);
この処理は一度はかならず実行されます。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年11月03日 18:51