p.122 while文
・for文の継続条件のみを記述するシンプルな繰返し文
・よって「●●であるあいだ、繰返す」場合に向いている
・for文と同じ前判定繰り返しになり、初回のチェックで継続条件が成立しないと、1度も繰返さない
・ちなみに、for文で書かれたものは全てwhile文で記述できる
例:
for(①; ②; ③) {
④
}
↓for文で上記の用に記述したものと、while文で下記のように記述したものは同じ
①
while(②) {
④
③
}
アレンジ演習:p.124 while01.cs
・while文を抜けた直後の変数iの値を表示して確認しよう
作成例
//アレンジ演習:p.124 while01.cs
using System;
class while01
{
public static void Main()
{
int i = 0;
while (i < 100) { //iの値が100未満である間、繰返す
Console.WriteLine("i = {0,3}", i); //iの値を3桁指定で表示
i++; //iの値をインクリメント
}
Console.WriteLine("ループ終了時のi = {0,3}", i); //iの値を3桁指定で表示(100)
}
}
ミニ演習 mini124.cs
・p.124 while01.csをfor文で書き直そう ・アレンジ演習で追加した「直後の変数iの値を表示」する処理は削除して良い
作成例
//ミニ演習 mini124.cs
using System;
class mini124
{
public static void Main()
{
for (int i = 0; i < 100; i++) { //iの値が100未満である間、繰返す
Console.WriteLine("i = {0,3}", i); //iの値を3桁指定で表示
}
}
}
p.125 whileを使った無限ループ
・whileのカッコ内はforの場合と異なり、省略不可
・そこで、無限ループを表すには、bool型のリテラルtrueを用いて「while (true) {繰返し内容」」とする
※ C/C++などでは「while(1)」とできるがC#ではエラーになる
・無限ループからの脱出はforの場合の同様に「break」を用いる
アレンジ演習:p.125 menu01.cs
・ゼロの代わりに間違ってオーが入力されても終了するようにしよう
作成例
//アレンジ演習:p.125 menu01.cs
using System;
class menu01
{
public static void Main()
{
bool bEnd = false;
while (true) {
Console.WriteLine("***** Menu *****");
Console.WriteLine("0:終了");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("****************");
Console.Write("選択---- ");
string strAns = Console.ReadLine();
switch (strAns) {
case "0":
case "O": //【追加】大文字のオーでも終了する
case "o": //【追加】小文字のオーでも終了する
bEnd = true;
break;
case "1":
Console.WriteLine("ファイルが選択されました");
break;
case "2":
Console.WriteLine("編集が選択されました");
break;
default:
Console.WriteLine("入力に間違いがあります");
break;
}
Console.WriteLine();
if (bEnd) {
Console.WriteLine("それでは、このプログラムを終了します");
break;
}
}
}
}
p.127 do-while文
・後判定繰り返し文で、繰返し内容を実行してから、繰返しを続行するか判断したい場合に用いる
・よって、入力データのチェックなどに活用される
・書式: do { 繰返し内容 } while (継続条件); //末尾にセミコロンが必要
・たとえば、Yかyが入力されるまで先に進まないようにする場合などに便利
・例:
string ans;
do { //繰返し開始
なんらかの処理
ans = Console.ReadLine();
} while (ans != "Y" && ans != "y"); //入力がYでなくyでもなければdoに戻る(Yかyが入力されたら抜ける)
※ 繰返し内容が1行しかなくても{}は省略しないことを推奨
アレンジ演習:p.128 do_while01.cs
・変数iの初期値をコンソールから入力するようにしよう ・そして、iの値を20超にすると、無限ループすることを確認しよう ※ キーボードからCtrlキーを押しながらCキーで止められる
作成例
//アレンジ演習:p.128 do_while01.cs
using System;
class do_while01
{
public static void Main()
{
int i = 10;
Console.Write("i : "); i = int.Parse(Console.ReadLine()); //iの値を変更
do { //繰返し開始
Console.WriteLine("i = {0}", i); //この行は必ず1度は実行
} while (i > 20); //継続条件(10のままだと継続しないが、20超だと無限ループ)
}
}
ミニ演習 mini128.cs
・p.106 bmi01.csを改良して、身長および体重において正の数が入力されるまで先に進まないようにしよう ・つまり、負の数が入力されている間、入力案内の表示、入力と変換を繰返すと良い
作成例
//ミニ演習 mini128.cs
using System;
class bmi01
{
public static void Main()
{
double bl, bw; //【移動」身長、体重
do { //【追加】身長用の入力ループ
Console.Write("身長(cm)---");
string stBl = Console.ReadLine();
bl = Convert.ToDouble(stBl); //【変更】宣言済変数を用いる
} while (bl < 0); //【追加】負の数であるあいだ、繰返す(抜けない)
do { //【追加】体重用の入力ループ
Console.Write("体重(kg)---");
string stBw = Console.ReadLine();
bw = Convert.ToDouble(stBw);
} while (bw < 0); //【追加】負の数であるあいだ、繰返す(抜けない)
double bmi = bw / Math.Pow((bl / 100.0), 2.0);
Console.WriteLine("BMI = {0:##.#}", bmi);
if (bmi >= 25.0) {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("BMIが25以上です!!");
Console.ForegroundColor = ConsoleColor.Black;
}
else
Console.WriteLine("BMIは25未満です");
}
}
p.128 goto文:通常、利用禁止なので割愛
p.130 continue文
・breakと同様に繰返し内容の中で用いる制御文
・実行すると、その時の繰返し内容の後続部分をスキップして、次の繰返しに進む
・「次いこう、次」のイメージで、ループは中断されず、継続される
・p.130 continue01.csのように、if文で代用できることもあるが、繰返し内容が複雑だったり、ネストが深い場合に用いると
可読性や保守性が向上する
例:
for(;;) {
if(①) {
if(②) {
処理A //①であり②である場合、処理Aを実行(この後、処理Bと処理Cも実行)
} else {
continue; //①であり②でない場合、処理Bと処理Cをスキップして次の繰返しへ
}
処理B //①であれば実行するが、②でない場合は実行しない
}
処理C //①②にかかわらず実行するが、①であり②でない場合は実行しない
}
アレンジ演習:p.130 continue01.cs
・100までの固定になっているが、コンソールから、いくつまでか入力できるようにしよう
提出:アレンジ演習:p.130 continue01.cs