p.101 制御文とは
・ここまで作成してきたプログラムは順次構造といい、開始から終了まで一方通行 ・その為、同じことを何度も記述したり(例:p.52 type07.cs)条件演算子で複雑な条件を記述してきた ・これを避けるためには、繰り返し構造と、分岐の構造を実装すると良い ・繰り返し構造や分岐の構造を実装するための文を制御文という
p.102 if文
・条件演算子で記述してきた条件を見やすく記述し、複雑な判断を明示できる
・書式: if (bool型を返す式) { 式の評価がtrueの時に実行する処理 }
・例: if (a > 0) { Console.Write("aは正の数"); }
・この書式では「式の評価がtrueの時に実行する処理」に複数の文を書ける
・この場合は適切に改行し字下げ(インデント)すると良い
・例:
if (a > 0 && b > 0) {
Console.Write("aは正の数");
Console.Write("bも正の数");
}
・「式の評価がtrueの時に実行する処理」が1文の場合{}は省略できる
・例: if (a > 0) Console.Write("aは正の数");
※業務やチームのルールによっては推奨されないこともある
p.102(if-else構文)
・if文には1つだけ「でなければ」を意味する「else {処理}」を記述できる
・elseの処理も1文の場合{}は省略できる
・書式: if (bool型を返す式) { trueの時の処理 } else { falseの時の処理 }
・falseの時の処理も適切に改行し字下げ(インデント)すると良い
・例:
if (a > 0 && b > 0) {
Console.Write("aは正の数");
Console.Write("bも正の数");
} else {
Console.Write("a、bのどちらかは正の数じゃない");
}
・なお「新しい行に型の始めかっこを配置する」のがC#の規定値になっているが、変更も可能
⇒ツール⇒オプションでテキストエディタ⇒C#⇒コードスタイル⇒書式設定⇒改行
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 { //falseならば
Console.WriteLine("nは5より大きくはない");
}
}
}
アレンジ演習:p.104 if01.cs
・p.105の上4行のとおり、nの値をコンソールから入力するようにしよう ・なお、分岐構造を持つプログラムでは全ての分岐を試す必要がある
作成例
//アレンジ演習: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 { //falseならば
Console.WriteLine("nは5より大きくはない");
}
}
}
p.105 if02.cs・改
//p.105 if02.cs・改
using System;
class if02 {
public static void Main() {
Console.Write("所持金はいくらですか---");
int nShojikin = Int32.Parse(Console.ReadLine());
Console.Write("単価はいくらですか---");
int nTanka = Int32.Parse(Console.ReadLine());
Console.Write("何個買いますか---");
int nKosu = Int32.Parse(Console.ReadLine());
int nSogaku = nTanka * nKosu;
if (nShojikin < nSogaku) {
Console.WriteLine("所持金が足りません");
} else {
Console.WriteLine("所持金は" + (nShojikin - nSogaku) + "円残っています");
}
}
}
p.106(コンソールの文字色を変更する)
・コンソールの文字色を変更することができる ・書式:Console.ForegroundColor = ConsoleColor.色名; ・変更が永続してしまうので、必ず元に戻すと良い ※ bmi01.csではConsoleColor.Blackに戻しているが、正しくはGray
p.106 bmi01.cs・改
//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);
Console.WriteLine("BMI = {0:##.#}", bmi);
if (bmi >= 25.0) {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("BMIが25以上です!!");
Console.ForegroundColor = ConsoleColor.Gray;
} else {
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)---");
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);
if (bmi < 18.5) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(strShow, bmi, "やせすぎ");
} else if (bmi >= 18.5 && bmi < 25.0) {
Console.WriteLine(strShow, bmi, "適正体重");
} else if (bmi >= 25.0 && bmi < 30.0) {
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine(strShow, bmi, "第1度肥満");
} else if (bmi >= 30.0 && bmi < 35.0) {
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(strShow, bmi, "第2度肥満");
} else if (bmi >= 35.0 && bmi < 40.0) {
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine(strShow, bmi, "第3度肥満");
} else {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(strShow, bmi, "第4度肥満");
}
Console.ForegroundColor = ConsoleColor.Black;
}
}
p.106 bmi02.cs・補足
・elseは「でなければ」なので、else ifにした時にifの条件によってチェック不要なことを行うのはムダでミスを招きやすい
例:
if (bmi < 18.5) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(strShow, bmi, "やせすぎ");
} else if (bmi > 18.5 && bmi < 25.0) { //「bmi >= 18.5 && 」は不要
Console.WriteLine(strShow, bmi, "適正体重");
}
・なお、Visual Studioのversionによってはムダであることを明示してくれる
アレンジ演習:p.106 bmi01.cs・改
・ムダな条件を取り除こう
作成例
//アレンジ演習: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);
if (bmi < 18.5) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(strShow, bmi, "やせすぎ");
} else if (bmi < 25.0) {
Console.WriteLine(strShow, bmi, "適正体重");
} else if (bmi < 30.0) {
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine(strShow, bmi, "第1度肥満");
} else if (bmi < 35.0) {
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(strShow, bmi, "第2度肥満");
} else if (bmi < 40.0) {
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine(strShow, bmi, "第3度肥満");
} else {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(strShow, bmi, "第4度肥満");
}
Console.ForegroundColor = ConsoleColor.Gray;
}
}
p.109 switch文
・bmi02.csのような複数の分岐を持つ構造を多分岐構造という
・C#には多分岐構造用の構文としてswitch文があり、整数型または文字列型の式の値によって分岐する場合に利用可能
・書式:
switch(式) {
case 値①: 式==値①の時の文; …; break;
case 値②: 式==値②の時の文; …; break;
…
default: 上記のどれでもない時の文; …; break;
}
・「default: 上記のどれでもない時の文; …; break;」は省略可
・C#では全ての「break;」が必須
・値①、値②、…には定数式(評価が固定である式、例えばconst付の定数)が記述できる
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選択---");
int ans = Int16.Parse(Console.ReadLine());
switch (ans) { //整数値に応じて分岐
case 1:
Console.WriteLine("ファイルが選択されました"); break;
case 2:
Console.WriteLine("編集が選択されました"); break;
case 3:
Console.WriteLine("表示が選択されました"); break;
case 0:
Console.WriteLine("終了が選択されました"); break;
default: //上記以外の場合
Console.WriteLine("入力ミスです"); break;
}
}
}
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 "2": //"2"ならば
Console.WriteLine("編集が選択されました");
break;
case "3": //"3"ならば
Console.WriteLine("表示が選択されました");
break;
case "0": //"0"ならば
Console.WriteLine("終了が選択されました");
break;
default: //上記のどれでもなければ
Console.WriteLine("入力ミスです");
break;
}
}
}
提出:アレンジ演習:p.113 switch02.cs
・分岐先として「4:印刷」を追加しよう