CとC++ゼロからシリーズ(四)

14398 ワード

条件判断の後、サイクルを勉強しましょう.配列を入力して、配列内の各要素に値を割り当てます.ファイルを読み込み、ファイルの各行を出力します.などとループを使います.
CとC++において,原生のサイクルは主にforサイクルとwhileサイクルがある.このうちwhileサイクルは、while(){}とdo{}while()の2つに分けられる(多くの教科書では、当型サイクルと至型サイクルと呼ばれる).
これは私たちの3つの例の使い方です.
 1 int main()
 2 {
 3         int a[10] ={0};
 4         for (int x = 0; x < 10; x++)
 5         {
 6                 a[x]=2*x;
 7         }
 8         for (int x = 0; x < 10; x++)
 9         {
10                 printf("The %d element is %d
", x+1, a[x]); 11 } 12 return 0; 13 }

あるコンパイラは拡張子、パラメータなどに対して一定の要求があり、私が使用しているgcc 4.8.5バージョンでは.
1.ファイルの拡張子が.c,gccコンパイルを使用すると,forループはC 99 modeでしか使用できないことを示唆した.
2.同じコードをg++でコンパイルした場合、コンパイルに成功
3.拡張子が.ccは,gccとg++を用いたコンパイルに成功した.
4.VS 2015ではこの問題は発生しなかった.
5.VC 6は、2番目のforサイクルにおけるxが繰り返し定義されていると判定する.
 
forサイクルには3つの式があり、中間的に使用されます.区切る.1つ目はループ開始時の初期式で、2つ目はループ終了条件、3つ目はループ後に実行される文で、変数を更新してループが徐々に終了条件に近づくようにします.
したがって、プログラムは、上のforループの例で次のように実行される.
1.変数xを定義し、初期値0を付与する.
2.xが第2の式xを満たしているか否かを判断する.
3.満たされていなければ(x<10)、ループを終了
4.満たされた場合、forループ内の文を実行する
5.forループの3番目の式x++を実行する
6.手順2~5を繰り返します.
サイクルボディでは、breakを使用してサイクルを終了することができます.(forもwhileもそうです).
したがって、2番目の式が空の場合もあります.以上の例では、2番目の式が空の場合、このように書くことができます.
 1 int main()
 2 {
 3         int a[10] ={0};
 4         for (int x = 0; ; x++)
 5         {
 6                 if (x >= 10)
 7                         break;
 8                 a[x]=2*x;
 9         }
10         for (int x = 0; ; x++)
11         {
12                 if (x >= 10)
13                         break;
14                 printf("The %d element is %d
", x+1, a[x]); 15 } 16 return 0; 17 }

3つ目の表現が空になる例もありますが、そう書きましょう.
 1 int main()
 2 {
 3         int a[10] ={0};
 4         for (int x = 0; ; )
 5         {
 6                 if (x >= 10)
 7                         break;
 8                 a[x]=2*x;
 9                 x++;
10         }
11         for (int x = 0; ; )
12         {
13                 if (x >= 10)
14                         break;
15                 printf("The %d element is %d
", x+1, a[x]); 16 x++; 17 } 18 return 0; 19 }

forループを変換し続けます.なぜなら、forループでは、最初の式がループに入るときにのみ実行されることを知っているので、forループの前に実行することができます.変数xを繰り返し定義していないことを確認した場合,forループを
 1 int main()
 2 {
 3         int a[10] ={0};
 4         int x = 0;
 5         for (; ; )
 6         {
 7                 if (x >= 10)
 8                         break;
 9                 a[x]=2*x;
10                 x++;
11         }
12         x=0;
13         for (; ; )
14         {
15                 if (x >= 10)
16                         break;
17                 printf("The %d element is %d
", x+1, a[x]); 18 x++; 19 } 20 return 0; 21 }

このときforループ式は空であり,forループをwhileループに簡単に変更できる.
次のように変更します.
 1 int main()
 2 {
 3         int a[10] ={0};
 4         int x = 0;
 5         while(1)
 6         {
 7                 if (x >= 10)
 8                         break;
 9                 a[x]=2*x;
10                 x++;
11         }
12         x=0;
13         while (1 )
14         {
15                 if (x >= 10)
16                         break;
17                 printf("The %d element is %d
", x+1, a[x]); 18 x++; 19 } 20 return 0; 21 }

これにより、forループをwhileループに変更することができます.具体的には、コードを書くときにforを使用しますか、whileを使用しますか.どちらがいいかは誰も言っていません.ただしforループはC 99 modeを使用する必要があり、書くコードが古い環境で実行される必要がある場合はwhileループしか使用できません.
whileでは,我々が用いたwhile(1),Cでは0がfalse,非0がtrueである.
次はwhileループについてお話しします.