基礎プログラミング

基礎プログラミング
第6回(2007年4月25日)
条件分岐(switch)
switchとifの対応
条件演算子( ? : )
模擬試験
1
★練習課題2.3 解答例★
(0未満,9より上,それ以外)
Console.WriteLine("input waitsec (less than 10)");
int waitsec;
waitsec = int.Parse(Console.ReadLine());
if (waitsec < 0) // 0未満
{
Console.WriteLine("正の数を入れてください");
}
else if (9 < waitsec) // 9より上
{
Console.WriteLine("0~9の整数を入れてください", waitsec);
}
else //それ以外
{
Console.WriteLine("OK, let's wait {0} sec.", waitsec);
System.Threading.Thread.Sleep(waitsec * 1000);
Console.WriteLine("done.");
}
2
switch 文の基本構造
switch (変数) // (数値or文字列)型の変数のみ
{
// つまり,==で判別可能な変数
case 値1:
値1の処理; break;
// break は } までの
case 値2:
// switch文処理を
値2の処理; break;
// 「抜ける」という意味
・・・・
default:
どれも違った場合の処理; break;
}
3
break; を省略すること (暗黙的
フォールスルー)はできない
switch (変数)
{
case 値1:
値1のときの処理;
case 値2:
値1・2共通の処理; break;
・・・・
default:
どれも違った場合の処理; break;
}
4
goto case 値; で明示的に飛び先指
定すればOK (※無限ループに注意)
switch (変数)
{
case 値1:
値1のときの処理; goto case 値2;
case 値2:
値1・2共通の処理; break;
・・・・
default:
どれも違った場合の処理; break;
}
5
case に処理がない場合は
暗黙的フォールスルーが可能
switch (変数)
{
case 値1:
case 値2:
値1・2共通の処理; break;
・・・・
default:
どれも違った場合の処理; break;
}
6
switch文の使用をあまり推薦しない
理由
あらかじめ決められたパターンに当てはまる
かどうかを判定するだけなら,シンプルに記
述できる(&読みやすい)ので有効
gotoを使って凝ったことをすると,分岐が読
みにくくなる

昔は全部gotoで書いていたが,読みにくいプログ
ラムが書けてしまうので近年は避けられている
ダイクストラが提唱「構造化プログラミング」

「順次,分岐,反復」の3つの基本的な論理構造
で記述する方式
7
if 文で書いた じゃんけん判断
★練習課題3.3解答例★
Console.WriteLine("じゃんけんの手を入力してくださ
い\n (G:グー,T:チョキ,P:パー)");
String handStr = Console.ReadLine();
if (handStr == "G" || handStr == "g") {
Console.WriteLine("グーですね");
} else if (handStr == "T" || handStr == "t") {
Console.WriteLine("チョキですね");
} else if (handStr == "P" || handStr == "p") {
Console.WriteLine("パーですね");
} else {
Console.WriteLine("G,T,Pどれかをいれて");
}
8
switch 文で書いた じゃんけん判断
(String版)
Console.WriteLine(" input (G:グー,T:チョキ,P:パー)");
String handStr = Console.ReadLine();
switch (handStr) {
case "G" :
case "g" :
Console.WriteLine("グーですね"); break;
case "T" :
case "t" :
Console.WriteLine("チョキですね"); break;
case "P" :
case "p" :
Console.WriteLine("パーですね"); break;
default :
Console.WriteLine("G,T,Pどれかをいれて"); break;
9
switch 文で書いた じゃんけん判断
(int版)
Console.WriteLine("じゃんけんの手を入力してください\n (0:
グー,2:チョキ,5:パー)");
int hand = int.Parse(Console.ReadLine());
switch (hand) {
case 0 :
Console.WriteLine("グーですね"); break;
case 2 :
Console.WriteLine("チョキですね"); break;
case 5 :
Console.WriteLine("パーですね"); break;
default :
Console.WriteLine(“0,2,5どれかをいれて"); break;
}
10
その他の分岐 (条件演算子 ?:)
(条件) ? trueの処理 : falseの処理 ;
http://msdn2.microsoft.com/jajp/library/ty67wk28(VS.80).aspx
例:
int val = int.Parse(Console.ReadLine());
int abs = (0 <= val) ? val : (val * -1);
// absにはvalの絶対値(absolute value)が入る
// ※メソッド Math.Abs(val); と同じ結果
11
提出課題 (Report-C)
Report-C(1)(2)(3)を出します
課題の内容は別紙「模擬試験問題」を参照
締切:4月28日(土)23:59
12