p.102 if文
・条件分岐を行える構文でいくつかのパターンがある
・基本構文: if(条件文) { 条件文がtrueである時に実行する文 }
・条件文にはbool型の変数または式を記述できるので、主に、関係演算子(p.88)の文を用いることが多い
・例: if(a > 0) { Console.WriteLine("aは正の数です"); }
・条件文がtrueである時に実行する文が1文のみの場合、{}を省略できる
※ 省略することを禁止するチームルールの場合もある
p.102(if-else構文)
・if文に「そうでなければ」を加える構文
・基本構文: if(条件文) { 条件文がtrueである時に実行する文 } else { 条件文がfalseである時に実行する文 }
・例: if(a > 0) { Console.WriteLine("aは正の数"); } else { Console.WriteLine("aは負の数か0"); }
・条件文がtrue/falseである時に実行する文が1文のみの場合、{}を省略できる
※ 省略することを禁止するチームルールの場合もある。特に片方だけ省略は避けた方が良い
・elseはifの1個につき1個のみ記述でき、ifのないelseはエラーになる
p.102(if-else if構文)
・if文に「そうでなくてもしも」を加える構文
・基本構文: if(条件文①) { 条件文①がtrueである時に実行する文 }
else if(条件文②) { 条件文①がfalseで条件文②がtrueである時に実行する文 }
・例: if(a > 0) { Console.WriteLine("aは正の数"); } else if(a < 0) { Console.WriteLine("aは負の数"); }
・else ifはifの1個につきいくつでも記述でき、ifのないelse ifはエラーになる
・よって、多分岐構文が可能
・例: if(a == 0) { Console.WriteLine("aは0"); }
else if(a == 1) { Console.WriteLine("aは1"); }
else if(a == 2) { Console.WriteLine("aは2"); }
・最後のelse ifの後に、elseを書いて「上記のどれでもなければ」を加えることが出来る
・例: if(a == 0) { Console.WriteLine("aは0"); }
else if(a == 1) { Console.WriteLine("aは1"); }
else if(a == 2) { Console.WriteLine("aは2"); }
else { Console.WriteLine("aは0でも1でも2でもない"); }
p.104 if01.cs
//p.104 if01.cs
using System;
class if01
{
public static void Main()
{
int n;
n = 10;
if (n > 5) { //式「n > 5」がtrueであれば
Console.WriteLine("nは5より大きい");
}
else { //式「n > 5」がtrueでなければ(=falseならば)
Console.WriteLine("nは5より大きくはない");
}
}
}
アレンジ演習:p.104 if01.cs
・nの値をコンソールから入力するようにしよう
・これで、入力値により、2通りの結果がでるようになることを確認しよう
作成例
//アレンジ演習:p.104 if01.cs
using System;
class if01
{
public static void Main()
{
int n;
Console.Write("整数n:"); n = int.Parse(Console.ReadLine()); //【変更】入力して整数変換
if (n > 5) { //式「n > 5」がtrueであれば
Console.WriteLine("nは5より大きい");
}
else { //式「n > 5」がtrueでなければ(=falseならば)
Console.WriteLine("nは5より大きくはない");
}
}
}
アレンジ演習:p.104 if01.cs・追加
・結果が「nは5より大きい」「nは5より小さい」「nは5と等しい」の3パターンになるようにしよう
・ヒント:「if - else if - else」構文にすると良い
作成例
//アレンジ演習:p.104 if01.cs・続き
using System;
class if01
{
public static void Main()
{
int n;
Console.Write("整数n:"); n = int.Parse(Console.ReadLine()); //入力して整数変換
if (n > 5) { //式「n > 5」がtrueであれば
Console.WriteLine("nは5より大きい");
}
else if (n < 5) { //【追加】式「n > 5」がfalseで「n < 5」がtrueならば
Console.WriteLine("nは5より小さい"); //【追加】
}
else { //式「n > 5」がfalseで「n < 5」もfalseならば
Console.WriteLine("nは5と等しい"); //【変更】
}
}
}
p.105(整数への変換)
・数字列のように数値に変換できる文字列は、int.ParseやInt32.Parseメソッドで整数に変換できる
・Int32.Parseメソッドはint.Parseメソッドの.NET版で同じ意味になる
・int及びInt32以外の整数型や、実数型も同様に利用可能
・ただし、数値に変換できる文字列が与えられてしまうと、その時点で異常終了する
p.105 if02.cs
//p.105 if02.cs
using System;
class if02
{
public static void Main()
{
Console.Write("所持金はいくらですか---");
string stShojikin = Console.ReadLine(); //数字列を入力
int nShojikin = Int32.Parse(stShojikin); //数字列をInt32型整数に変換
Console.Write("単価はいくらですか---");
string stTanka = Console.ReadLine(); //数字列を入力
int nTanka = Int32.Parse(stTanka); //数字列をInt32型整数に変換
Console.Write("何個買いますか---");
string stKosu = Console.ReadLine(); //数字列を入力
int nKosu = Int32.Parse(stKosu); //数字列をInt32型整数に変換
int nSogaku = nTanka * nKosu;
if (nShojikin < nSogaku) { //所持金が総額未満ならば
Console.WriteLine("所持金が足りません");
}
else { //でなければ
int nOtsuri = nShojikin - nSogaku; //所持金ー総額で残金を得る
Console.WriteLine("所持金は" + nOtsuri + "円残っています"); //残金を表示
}
}
}
p.105 if02.csアレンジ演習:
・変数stShojikin、stTanka、stKosu、nOtsuri を用いないようにしよう
作成例
//アレンジ演習:p.105 if02.cs
using System;
class if02
{
public static void Main()
{
Console.Write("所持金はいくらですか---");
int nShojikin = Int32.Parse(Console.ReadLine()); //【変更】数字列を入力しInt32型整数に変換
Console.Write("単価はいくらですか---");
int nTanka = Int32.Parse(Console.ReadLine()); //【変更】数字列を入力しInt32型整数に変換
Console.Write("何個買いますか---");
int nKosu = Int32.Parse(Console.ReadLine()); //【変更】数字列を入力しInt32型整数に変換
int nSogaku = nTanka * nKosu;
if (nShojikin < nSogaku) { //所持金が総額未満ならば
Console.WriteLine("所持金が足りません");
}
else { //でなければ
Console.WriteLine("所持金は" + (nShojikin - nSogaku) + "円残っています"); //【変更】残金を表示
}
}
}
p.106(コンソールの文字色の変更)
・Console.ForegroundColorに、ConsoleColor列挙型にある「Color.色名」の列挙子を代入することで、コンソールの文字色の
変更ができる
https://learn.microsoft.com/ja-jp/dotnet/api/system.consolecolor
・なお、p.106 bmi01.csでは文字色を黒に戻しているが、通常、コンソールの文字色は白または灰色なので、実情に合わせて変更しよう
p.106 bmi01.cs
//p.106 bmi01.cs
using System;
class bmi01
{
public static void Main()
{
Console.Write("身長(cm)---");
string stBl = Console.ReadLine(); //身長を読み込む
double bl = Convert.ToDouble(stBl); //実数に変換
Console.Write("体重(kg)---");
string stBw = Console.ReadLine(); //体重を読み込む
double bw = Convert.ToDouble(stBw); //実数に変換
double bmi = bw / Math.Pow((bl / 100.0), 2.0); //BMIを計算(Powはp.49)
Console.WriteLine("BMI = {0:##.#}", bmi);
if (bmi >= 25.0) { //25以上?
Console.ForegroundColor = ConsoleColor.Red; //コンソール表示色を赤にする
Console.WriteLine("BMIが25以上です!!");
Console.ForegroundColor = ConsoleColor.Gray; //【変更】コンソール表示色を灰色にする
}
else { //25未満?
Console.WriteLine("BMIは25未満です");
}
}
}
アレンジ演習:p.106 bmi01.cs
・変数stBl、stBwをを用いないようにしよう
作成例
//アレンジ演習:p.106 bmi01.cs
using System;
class bmi01
{
public static void Main()
{
Console.Write("身長(cm)---");
double bl = Convert.ToDouble(Console.ReadLine()); //【変更】数字列を実数に変換
Console.Write("体重(kg)---");
double bw = Convert.ToDouble(Console.ReadLine()); //【変更】数字列を実数に変換
double bmi = bw / Math.Pow((bl / 100.0), 2.0); //BMIを計算(Powはp.49)
Console.WriteLine("BMI = {0:##.#}", bmi);
if (bmi >= 25.0) { //25以上?
Console.ForegroundColor = ConsoleColor.Red; //コンソール表示色を赤にする
Console.WriteLine("BMIが25以上です!!");
Console.ForegroundColor = ConsoleColor.Gray; //コンソール表示色を灰色にする
}
else { //25未満?
Console.WriteLine("BMIは25未満です");
}
}
}
p.107 bmi02.cs
//p.107 bmi02.cs
using System;
class bmi02
{
public static void Main()
{
string strShow = "BMIは{0:##.#}で{1}です"; //使いまわすための編集指定文字列
Console.Write("身長(cm)---");
string strBl = Console.ReadLine(); //身長を読み込む
double bl = Double.Parse(strBl); //実数に変換
Console.Write("体重(kg)---");
string strBw = Console.ReadLine(); //体重を読み込む
double bw = Double.Parse(strBw); //実数に変換
double bmi = bw / Math.Pow((bl / 100.0), 2.0); //BMIを計算
if (bmi < 18.5) { //18.5未満
Console.ForegroundColor = ConsoleColor.Blue; //コンソール表示色を青にする
Console.WriteLine(strShow, bmi, "やせすぎ");
}
else if (bmi >= 18.5 && bmi < 25.0) { //18.5以上、25.0未満
Console.WriteLine(strShow, bmi, "適正体重");
}
else if (bmi >= 25.0 && bmi < 30.0) { //25.0以上、30.0未満
Console.ForegroundColor = ConsoleColor.DarkCyan; //コンソール表示色を暗い水色にする
Console.WriteLine(strShow, bmi, "第1度肥満");
}
else if (bmi >= 30.0 && bmi < 35.0) { //30.0以上、35.0未満
Console.ForegroundColor = ConsoleColor.DarkYellow; //コンソール表示色を暗い黄色にする
Console.WriteLine(strShow, bmi, "第2度肥満");
}
else if (bmi >= 35.0 && bmi < 40.0) { //35.0以上、40.0未満
Console.ForegroundColor = ConsoleColor.Magenta; //コンソール表示色を赤紫色にする
Console.WriteLine(strShow, bmi, "第3度肥満");
}
else { //上記以外(40.0以上)
Console.ForegroundColor = ConsoleColor.Red; //コンソール表示色を赤色にする
Console.WriteLine(strShow, bmi, "第4度肥満");
}
Console.ForegroundColor = ConsoleColor.Gray; //【変更】コンソール表示色を灰色にする
}
}
アレンジ演習:p.107 bmi02.cs
・「&&」を使いたいために、else ifの条件式が冗長になっているので改良しよう
・ifや上位のelse ifに当てはまっている条件を削除してシンプルにできる
・ついでに、変数stBl、stBwを用いないようにしよう
作成例
//アレンジ演習:p.107 bmi02.cs
using System;
class bmi02
{
public static void Main()
{
string strShow = "BMIは{0:##.#}で{1}です"; //使いまわすための編集指定文字列
Console.Write("身長(cm)---");
double bl = Double.Parse(Console.ReadLine()); //【変更】身長を読み込む実数に変換
Console.Write("体重(kg)---");
double bw = Double.Parse(Console.ReadLine()); //【変更】体重を読み込み実数に変換
double bmi = bw / Math.Pow((bl / 100.0), 2.0); //BMIを計算
if (bmi < 18.5) { //18.5未満
Console.ForegroundColor = ConsoleColor.Blue; //コンソール表示色を青にする
Console.WriteLine(strShow, bmi, "やせすぎ");
}
else if (bmi < 25.0) { //【変更】18.5以上、25.0未満
Console.WriteLine(strShow, bmi, "適正体重");
}
else if (bmi < 30.0) { //【変更】25.0以上、30.0未満
Console.ForegroundColor = ConsoleColor.DarkCyan; //コンソール表示色を暗い水色にする
Console.WriteLine(strShow, bmi, "第1度肥満");
}
else if (bmi < 35.0) { //【変更】30.0以上、35.0未満
Console.ForegroundColor = ConsoleColor.DarkYellow; //コンソール表示色を暗い黄色にする
Console.WriteLine(strShow, bmi, "第2度肥満");
}
else if (bmi < 40.0) { //【変更】35.0以上、40.0未満
Console.ForegroundColor = ConsoleColor.Magenta; //コンソール表示色を赤紫色にする
Console.WriteLine(strShow, bmi, "第3度肥満");
}
else { //上記以外(40.0以上)
Console.ForegroundColor = ConsoleColor.Red; //コンソール表示色を赤色にする
Console.WriteLine(strShow, bmi, "第4度肥満");
}
Console.ForegroundColor = ConsoleColor.Gray; //コンソール表示色を灰色にする
}
}
p.109 switch文
・多分岐構造専用の文で、式の値に応じて分岐させたい場合に便利
・構文:
switch(式) {
case 定数式①: 実行文①-1; 実行文①-2; …; break;
case 定数式②: 実行文②-1; 実行文②-2; …; break;
:
default: 実行文③-1; 実行文②-2; …; break;
}
・式の型は整数または文字列のみで、実数型や文字型は利用できない
※ switch文はC/C++、Javaなどでも利用可能だが、言語ごとに仕様が異なるので注意
・caseの後に定数式(定数または定数を返す式)を記述し、この値により分岐する
・よって、caseの後には通常、リテラルを記述する。変数は記述できない。
・case1つごとに複数の実行文が記述でき、最後に「break;」が必要
※ C/C++、Javaなどのswitch文では、breakを指定しないことによる特殊処理(フォールスルー)が可能だが、C#では禁止
・「if-else if-else」構文ののelseにあたる「上記のどれでもなければ」を記述できるのが「default:」
・default:の後は通常switchの終わりだが、default:にも最後に「break;」が必要
p.111 switch01.cs
//p.111 switch01.cs
using System;
class switch01
{
public static void Main()
{
Console.WriteLine("******* Menu *******");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("3:表示");
Console.WriteLine("0:終了");
Console.WriteLine("********************");
Console.Write("\n選択---");
string strAns = Console.ReadLine(); //数字を入力
int ans = Int16.Parse(strAns); //整数に変換
switch (ans) { //変換後の整数値に応じて分岐
case 1: //変換後の整数値が1なら
Console.WriteLine("ファイルが選択されました");
break; //このcaseの終わりを示す
case 2: //変換後の整数値が2なら
Console.WriteLine("編集が選択されました");
break; //このcaseの終わりを示す
case 3: //変換後の整数値が3なら
Console.WriteLine("表示が選択されました");
break; //このcaseの終わりを示す
case 0: //変換後の整数値が0なら
Console.WriteLine("終了が選択されました");
break; //このcaseの終わりを示す
default: //変換後の整数値が1,2,3,0以外なら
Console.WriteLine("入力ミスです");
break; //defaultの終わりを示す
}
}
}
p.113 switch02.cs
//p.113 switch02.cs
using System;
class switch02
{
public static void Main()
{
Console.WriteLine("******* Menu *******");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("3:表示");
Console.WriteLine("0:終了");
Console.WriteLine("********************");
Console.Write("\n選択---");
string strAns = Console.ReadLine(); //数字を入力(文字列として扱う)
switch (strAns) { //変換後の整数値に応じて分岐
case "1": //変換後の整数値が1なら
Console.WriteLine("ファイルが選択されました");
break; //このcaseの終わりを示す
case "2": //変換後の整数値が2なら
Console.WriteLine("編集が選択されました");
break; //このcaseの終わりを示す
case "3": //変換後の整数値が3なら
Console.WriteLine("表示が選択されました");
break; //このcaseの終わりを示す
case "0": //変換後の整数値が0なら
Console.WriteLine("終了が選択されました");
break; //このcaseの終わりを示す
default: //変換後の整数値が1,2,3,0以外なら
Console.WriteLine("入力ミスです");
break; //defaultの終わりを示す
}
}
}
【補足】if文等のネスト
・if文やswitch文の中にさらにif文やswitch文を記述できる。これをネスト(入れ子)という
例:正の数が入力されたら、もう1つの整数を入力させ、どちらも正の数のなら「どちらも正」と表示する。
あてはまらない場合はなにも表示しない。
if (正の数?) { もう1つ入力: if (正の数?) { 「どちらも正」と表示 } }
※ なお、switch文のネストはどうしても必要な場合を除いて避けた方が良い
提出:アレンジ演習:p.107 bmi02.cs