知識(shí)點(diǎn)
switch語(yǔ)句
一、 switch語(yǔ)句
(一) 問(wèn)題
問(wèn)題1
李四的年終工作評(píng)定,
如果定為A級(jí),則工資漲500元,
如果定為B級(jí),則工資漲200元,
如果定為C級(jí),工資不變,
如果定為D級(jí)工資降200元,
如果定為E級(jí)工資降500元.
設(shè)李四的原工資為5000,請(qǐng)用戶(hù)輸入李四的評(píng)級(jí),然后顯示李四來(lái)年的工資.使用條件語(yǔ)句解決
Console.WriteLine("請(qǐng)輸入對(duì)李四的年終評(píng)定");
string level = Console.ReadLine();//A B C D E 亂七八糟
double salary = 5000;
if (level == "A")
{
salary += 500;//salary=salary+500;
}
else if (level == "B")
{
salary += 200;
}
else if (level == "C")
{
// salary += 0;
}
else if (level == "D")
{
salary -= 200;
}
else if (level == "E")
{
salary -= 500;
}
else//輸入錯(cuò)誤
{
Console.WriteLine("輸入有誤蒸辆,程序退出=练健7柚娩践!");
}
Console.WriteLine("李四明年的工資是{0}", salary);
Console.ReadKey();
BUG:
當(dāng)輸入亂七八糟的數(shù)據(jù)時(shí)候三妈,Console.WriteLine("李四明年的工資是{0}", salary);這句代碼不執(zhí)行陪腌。
bool b = true;
else//輸入錯(cuò)誤
{
Console.WriteLine("輸入有誤辱魁,程序退出!J肌染簇!");
b = false;
}
if (b)
{
Console.WriteLine("李四明年的工資是{0}", salary);
}
Console.ReadKey();問(wèn)題2
對(duì)學(xué)員的結(jié)業(yè)考試成績(jī)?cè)u(píng)測(cè)
成績(jī) >= 90 :A
90 > 成績(jī) >= 80 :B
80 > 成績(jī) >= 70 :C
70 > 成績(jī) >= 60 :D
成績(jī) < 60 :E問(wèn)題2解決
Console.WriteLine("請(qǐng)輸入你的考試成績(jī)");
int score = Convert.ToInt32(Console.ReadLine());
if (score >= 90)
{
Console.WriteLine("A");
}
else//<90
{
if (score >= 80)
{
Console.WriteLine("B");
}
else//<80
{
if (score >= 70)
{
Console.WriteLine("C");
}
else//<70
{
if (score >= 60)
{
Console.WriteLine("D");
}
else
{
Console.WriteLine("E");
}
}
}
}
(二) switch-case
對(duì)于判斷區(qū)間的語(yǔ)句,我們一般用if-else
對(duì)于定值的判斷强岸,我們一般用switch語(yǔ)句語(yǔ)法
switch(要判斷的變量或者表達(dá)式)
{
case 值1:要執(zhí)行的代碼;
break;
case 值2:要執(zhí)行的代碼;
break;
case 值3:要執(zhí)行的代碼;
break;
........
default:要執(zhí)行的代碼;
break;
}流程圖
執(zhí)行過(guò)程
程序運(yùn)行到switch處锻弓,
首先計(jì)算switch后面所帶的小括號(hào)中的變量或者表達(dá)式的值,拿著計(jì)算出來(lái)的這個(gè)結(jié)果跟每個(gè)case的值進(jìn)行匹配蝌箍,一旦匹配成功青灼,則執(zhí)行該case所帶的代碼塊,
如果跟每個(gè)casa所帶的值都不匹配妓盲,則看當(dāng)前switch-csae結(jié)構(gòu)中是否有default聚至,如果有default,則執(zhí)行default所帶的代碼塊本橙,否則的話(huà)扳躬,什么都不做。switch-case解決
bool b = true;
Console.WriteLine("請(qǐng)輸入對(duì)李四的一個(gè)年終評(píng)定");
string level = Console.ReadLine();
double salary = 5000;
switch (level)
{
case "A": salary += 500;
break;
case "B": salary += 200;
break;
case "C": break;
case "D": salary -= 200;
break;
case "E": salary -= 500;
break;
default: Console.WriteLine("輸入有誤,程序退出4摇;魇ぁ!");
b = false;
break;
}
if (b)
{
Console.WriteLine("李四明年的工資是{0}", salary);
}
Console.ReadKey();
(三) 練習(xí)作業(yè)1:練習(xí)1讓用戶(hù)輸入姓名,然后顯示出這個(gè)人上輩子是什么職業(yè)役纹。(老楊,老蘇,老鄒,老馬,老虎,老牛,老蔣,小楊)
Console.WriteLine("請(qǐng)輸入要計(jì)算的人的姓名");
string name = Console.ReadLine();
switch (name)
{
case "老楊":
Console.WriteLine("老楊上輩子是折翼的天屎");
break;
case "老蘇":
Console.WriteLine("老蘇上輩子是老鴇子");
break;
case "老鄒":
Console.WriteLine("老鄒上輩子是老蘇手下的頭牌");
break;
case "老虎":
Console.WriteLine("上輩子被武松掛了");
break;
case "老牛":
Console.WriteLine("上輩子是Cow");
break;
default:
Console.WriteLine("上輩子沒(méi)這個(gè)人");
break;
}
Console.ReadKey();練習(xí)2
對(duì)學(xué)員的結(jié)業(yè)考試成績(jī)?cè)u(píng)測(cè)(改成用Switch來(lái)做)
成績(jī) >= 90 :A
90 > 成績(jī) >= 80 :B
80 > 成績(jī) >= 70 :C
70 > 成績(jī) >= 60 :D
成績(jī) < 60 :E
Console.WriteLine("請(qǐng)輸入考試成績(jī)");
int score = Convert.ToInt32(Console.ReadLine());
switch (score / 10)
{
case 10://當(dāng)連續(xù)的幾個(gè)case中所帶的代碼一樣的時(shí)候偶摔,可以省略前面的,只寫(xiě)最后一個(gè)case中的代碼
case 9: Console.WriteLine("A");
break;
case 8: Console.WriteLine("B");
break;
case 7: Console.WriteLine("C");
break;
case 6: Console.WriteLine("D");
break;
default: Console.WriteLine("E");
break;
}
Console.ReadKey();作業(yè)2:練習(xí)3:請(qǐng)用戶(hù)輸年份,再輸入月份,輸出該月的天數(shù).
Console.WriteLine("請(qǐng)輸入一個(gè)年份");
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("請(qǐng)輸入一個(gè)月份");
int month = Convert.ToInt32(Console.ReadLine());
if (month >= 1 && month <= 12)
{
int day = 0;//存儲(chǔ)天數(shù)
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: day = 31;
break;
case 2:
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
day = 29;
}
else
{
day = 28;
}
break;
default: day = 30;
break;
}//swich
Console.WriteLine("{0}年{1}月有{2}天", year, month, day);
}//if
else
{
Console.WriteLine("月份必須在1~12月之間促脉,程序退出3秸!瘸味!");
}
二宫仗、 三元表達(dá)式
(一) 語(yǔ)法
表達(dá)式1?表達(dá)式2 :表達(dá)式3
(二) 執(zhí)行過(guò)程
表達(dá)式1一般為一個(gè)關(guān)系表達(dá)式,
如果關(guān)系表達(dá)式1的結(jié)果為true旁仿,那么表達(dá)式2的值就是整個(gè)三元表達(dá)式的值藕夫,
否則,表達(dá)式3就是整個(gè)三元表達(dá)式的值枯冈。
(三) 注意
表達(dá)式2和表達(dá)式3的結(jié)果類(lèi)型必須一致毅贮,并且也要和整個(gè)三元表達(dá)式的結(jié)果類(lèi)型一致。
(四) 舉例說(shuō)明-
練習(xí)1:提示用戶(hù)輸入兩個(gè)數(shù)字 我們輸出比較大的那個(gè)數(shù)字
Console.WriteLine("請(qǐng)輸入第一個(gè)數(shù)字");
int numberOne = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("請(qǐng)輸入第二個(gè)數(shù)字");
int numberTwo = Convert.ToInt32(Console.ReadLine());//表達(dá)式1?表達(dá)式2:表達(dá)式3; int max = numberOne > numberTwo ? numberOne : numberTwo; Console.WriteLine(max); Console.ReadKey();
三尘奏、 總結(jié):if-else if與switch的比較
(五) 相同點(diǎn):
都可以實(shí)現(xiàn)多分支結(jié)構(gòu)
(六) 不同點(diǎn):
(1) . if-else if:可以處理范圍
(2) . switch:一般 只能用于等值比較
(七) 三者的區(qū)別:
if有條件的執(zhí)行一條語(yǔ)句
if-else有條件的執(zhí)行一條或另一條語(yǔ)句
switch有條件的執(zhí)行一組語(yǔ)句中的一條語(yǔ)句