一.选择执行概述
选择执行是指我们面对多个选项时,选择其中一个选项,并执行规定的相关内容。在C语言处理数据时,会大量使用选择执行
1.什么是选择执行
选择执行是指根据条件执行特定的操作。下面介绍在C语言中如何从数据中找到条件并表示条件
a.寻找条件
寻找条件即从要处理的数据中找到影响执行的条件这些条件都是一些特定的数据状态。例如:年满18周岁就成为了成年人,在这里“年满十八周岁”就是数值条件。
b.表示条件
在C语言中,从数据中找到的条件还不能直接被使用,而是将条件转换为对应的表达式后才能被使用。
(1)对于数值条件,可以被转换为比较表达式。
(2)对于状态条件,,如果是单个状态条件,可以被转换为比较表达式或逻辑表达式。
例如:用程序判断一个人是否说谎,这里“说谎”与“没说谎”都为状态条件;在编写程序中,这句话应该被理解为“判断一个人说谎是否为真”。
例如:可以规定a = 1表示没说谎,a = 0表示说谎。这样状态条件可以转换为等于表达式 a==1,如果a ==1的值为1,表示a 为1,,意味着没说谎;如果a ==1的值为0,表示a为0,意味着说谎了。
(3)有时会遇到两个状态条件都要使用的情况。例如,对于酒驾检测,规定a属于驾驶员有驾照,b表示驾驶员是否喝酒,其中1表示合法,放行,0表示不合法 处罚。
c.数值比较的陷阱
对于数值条件中的数值比较,一定要注意小数的比较。由于小数的经确表示的问题,所以会将多余的小数位进行截取后保留,这样会导致小数在比较时出现问题,例如:float类型两个数1.2000000001和1.2000000005,是相等的,因为float类型只能精确到小数点后六到七位。
d.状态规则的制定
在对状态条件进行判断时,一定注意状态是没有值的。所以,一定要将状态转化为值之后才能进行值的比较。一般情况下,C语言会规定“状态为真”时的数字1表示,“状态为假”时用数字0表示。
**在编写程序时要注意,由于状态值是由程序员规定的,所以程序注释要说清楚状态值到底代表的是什么状态,便于自己日后阅读和其他人阅读,例如
int a = 0 //这里0表示说谎
int b = 1 //这里1表示诚实
2.流程图
在流程图中,条件判断要用判断框来表示。判断框是菱形的,在判断框中可以书写具体的判断条件
选择执行的流程图包含了判断框,以及真、假判断流程线。
一般条件下,判断框的左侧流程线被默认为判断结果为真的流程图,判断框的右侧流程线被默认为判断结果为假的流程图。
二.if选择语句
if选择语句是C语言为选择执行的专用语句,适用于处理简单的选择执行。
1.语句结构
if选择语句又称if语句,由一个if条件(表达式)和一个语句组成,只有一个分支。对于if语句来说,当条件为真时,执行语句。
在if语句中,if条件与语句之间不能有其他代码存在;if条件不是语句,所以if条件这行代码后不能加分号,而语句这行代码后必须加分号。
2.流程图
3.使用语句块
if语句中的语句可以为一个语句块,使用语句块,可以将多行代码放置在一起进行执行,就像将一类事务放在一起处理一样。
if语句中的语句块必须用大括号括起来,否则会导致逻辑错误。
4.多if语句的组合使用
为了进行复杂的条件判断,常常要同时使用多个if语句。
a.连续使用if语句
if(表达式1)
{
语句1/语句块1;
}
if(表达式2)
{
语句2/语句块2;
}
……
if(语句n)
{
语句n/语句块n;
}
连续使用if语句会以此判断表达式的真假,真则执行,假则下一个进行判断,以此类推,直到程序结束。
如果if语句中的语句不是一行,建议使用大括号括起来,这样就提高了程序的可读性。
b.嵌套使用if语句
嵌套使用if语句是指将多个if语句相互嵌套后,形成“父子”关系后放在程序中。在嵌套使用if语句时,要将子级if语句嵌套至父级if语句的语句块中
if(表达式1)
{
语句1/语句块1;
if(表达式2)
{
语句2/语句块2;
if(表达式3)
{
语句3/语句块3;
……
语句n/语句块n;
}
}
}
在嵌套使用if语句时,如果父级if语句的if表达式为真,则执行父级if语句的语句/语句块或对子级if语句的表达式进行判断;如果父级表达式为假,则不对子级if语句的表达式进行判断,直接退出当前if语句;以此类推,直到程序结束。
三.if-else选择语句
if-else选择语句是if选择语句在连续使用是的另一种写法,它是基于一个表达式指定两个选择的语句。
1.语句结构
if(表达式)
{
语句1/语句块1;
}
else
{
语句2/语句块2;
}
if-else选择语句会根据if条件的真假进行分支的选择,如果表达式为真则执行语句1或语句块1,如果条件为假则执行语句2或语句块2.
2.流程图
3.嵌套使用if-else选择语句
嵌套使用if-else选择语句是将多个if-else选择语句相互嵌套后形成“父子”关系,以进行复杂的条件判断。在嵌套使用if-else选择语句时,必须将子级的if-else选择语句嵌套至父级if-else选择语句的语句/语句块中,其语法如下:
if(表达式)
{
语句1/语句块1;
if(表达式2)
{
语句3/语句块3;
}
else
{
语句4/语句块4;
}
}
else
{
语句2/语句块2;
if(表达式3)
{
语句5/语句块5;
}
else
{
语句6/语句块6;
}
}
在嵌套使用if-else选择语句时,先判断表达式,如果表达式为真,则执行if条件下面的语句/语句块或子级的if-else选择语句;如果表达式为假则执行else下面的语句/语句块或自己的if-else选择语句;以此类推,直到程序结束。
四.if-else-if选择语句
if语句连续使用时另一种写法,他可以做出多个选择的语句。
语句结构
if(表达式1)
{
语句1/语句块1;
}
else if(表达式2)
{
语句2/语句块2;
}
else if(表达式3)
{
语句3/语句块3;
}
……
else if(表达式n-1)
{
语句n-1/语句块n-1;
}
else
{
语句n/语句块n;
}
if-else-if选择语句首先要对表达式1进行判断,当表达式1为真时,则执行语句1/语句块1;当表达式1为假时,对表达式2进行判断,依次类推。
五.switch选择语句
switch选择语句是多个选择的连续使用。它是基于一个条件指定多个选择的语句。
1.语句结构
switch(条件表达式)
{
case 常量表达式1;
语句1;
case 常量表达式2;
语句2;
case 常量表达式3;
语句3;
……
case 常量表达式n;
语句n;
}
switch语句将条件表达式的值以此与case分支的常量表达式的值进行比较,如果这个值相等,则从当前case分支语句开始,顺序执行后面所有的case分支语句;如果这两个值不相等,则将条件表达式的值再与下一个case分支常量表达式的值进行比较,依次类推,至到程序结束。
对于switch,一定要注意以下几点:
(1)switch语句的条件表达式必须是int、short、long、char类型
(2)switch语句后面可以跟多个case分支,但要合理地组合顺序。
(3)switch语句的所有case分支的语句都可以被省略,但是最后一个case分支的语句不可以被省略。
(4)case分支由case关键字、常量表达式及冒号组成,其中case关键字与常量表达式之间有一个空格,而且常量表达式中不能有变量存在。
(5)case分支的语句可以包含多条语句,并可以不使用大括号来分隔case分支的语句。
2.default分支
从switch语句中可以发现,如果switch语句中条件表达式的值与所有case分支的常量表达式的值都不相等,则程序直接会跳出switch语句范围,没有任何提示,无法判断是否执行过switch语句。所以C语言为switch语句提供了一个default分支语句。
switch(条件表达式)
{
case 常量表达式1;
语句1;
case 常量表达式2;
语句2;
case 常量表达式3;
语句3;
……
case 常量表达式n;
语句n;
default:
语句n+1;
}
default分支为switch语句的一个默认分支语句。default分支不受switch语句的条件表达式的值的影响,默认为执行状态。default分支通常放在switch语句中的末尾。
3.break分支
如果只想执行符合条件的case分支后不再执行其他语句,此时就要使用break(跳出)分支。
switch(条件表达式)
{
case 常量表达式1;
语句1;
break;
case 常量表达式2;
语句2;
break;
case 常量表达式3;
语句3;
break;
……
case 常量表达式n;
语句n;
break;
default:
语句n+1;
break;
}