第3章程 序 控 制
一个合理实用的程序,不可能是从头至尾一行一行地依次顺序执行的。程序的执行顺序在更多的场合应该适当地进行改变。这种改变程序从第一行依次顺序执行到最后一行的机制即称为程序控制。程序控制语句有3类: 选择语句、循环语句和跳转语句。这3类语句构成了由简单语句搭建程序大厦的基石。
3.1选 择 语 句
选择语句有if语句和switch语句,其中尤其以if语句最为常见。
3.1.1if语句
if语句是最基本最常见的程序流程控制语句。if可以配合else或者else if来无限扩展选择执行的分支,当然在实际编码过程中,不会写很多的if和else if。if语句可能会有如下几种使用形式。无论采用下面的哪种方式,即使分支再多,最多也只会有一个分支获得运行。
(1) 一个分支: if (条件) {语句序列; }。
(2) 两个分支: if (条件) {语句序列; } else {语句序列; }。
(3) 多分支: if (条件) {语句序列; } else if {语句序列; }…else {语句序列; }。
(4) 嵌套: if (条件){ if语句序列;} else { if语句序列;}。
其执行机制是: 判断各个条件,哪个条件成立则执行哪个分支相应的语句序列。若所有的条件都不成立,则直接执行整个if块后的语句。
例如,若有一语音播报程序,当获知客户的性别为男时,可以输出“先生,你好!”,反之如果是女士时,则输出“女士,你好!”。则可能的参考代码如下。
Console.Write("请输入您的性别: ");
string sSex=Console.ReadLine();
if (sSex=="男")
Console.WriteLine("先生,你好!");
else
Console.WriteLine("女士,你好!");
上面的程序即采用的形式(2),如果能按照预期输入,程序运行自然良好。程序执行结果如图31所示。
但是若用户随便输入,只要不输入“男”,则上面的程序都将把客户视为女性,自然不合理。例如如图32所示的输出。
图31两分支的if语句——正常执行
图32两分支的if语句——不正常执行
所以可以稍加修改,改善后的代码如下:
Console.Write("请输入您的性别: ");
string sSex=Console.ReadLine();
if (sSex=="男")
Console.WriteLine("先生,你好!");
else if(sSex=="女")
Console.WriteLine("女士,你好!");
else
Console.WriteLine("对不起,你是人妖吧?!");
此代码即形式(3)。
另外,为了给客户的提醒更具体点,比如根据当前时间,显示早上好、中午好、下午好、晚上好等比较具体的问候语,则可以编写如下代码:
//如下仅考虑上午好和下午好两种问候; 并且如下关于时间的判断并不对,此处仅为演示之用,聪明的您可以将其修改的更加合理。
//其中DateTime.Now.Hour是用来获取当前时间的小时部分
Console.Write("请输入您的性别: ");
string sSex=Console.ReadLine();
if (sSex=="男")
{
if(DateTime.Now.Hour>12)
Console.WriteLine("先生,下午好!");
else
Console.WriteLine("先生,上午好!");
}
else if(sSex=="女")
{
if(DateTime.Now.Hour>12)
Console.WriteLine("女士,下午好!");
else
Console.WriteLine("女士,上午好!");
}
else
Console.WriteLine("对不起,输入有误!");
观察上面的代码,不难发现,此即形式(4),即if的嵌套使用。
课堂练习:
请编写一个程序,根据用户输入的分数,来输出其分数是优秀、良好、中等、及格或者不及格(分级可以根据平时百分制的常规分级认定)。
3.1.2switch语句
switch语句与if语句一样,也是在众多分支中选择一个匹配的分支来执行。然而两者并不是完全一样,并且在更多的情况下,对程序编码人员来说,用if语句会更习惯些。
其语法形式如下:
……