选择结构可以根据判断给定的条件是否成立,来选择执行不同的程序段落。通过选择结构可以控制程序的走向。在C语言中,实现选择结构的语句主要有if条件语句和switch语句。
1.if条件语句
if条件语句分为单分支、双分支、多分支三种形式。
(1)单分支语句。
if单分支语句的语法格式如下:
单分支语句的执行过程是:先计算表达式的值,若值为“真”(即表达式具有非0值),则执行语句段,然后执行单分支语句后面的语句。若表达式的值为“假”(即表达式的值为0),就跳过该语句段,直接执行单分支语句后面的语句。如图3-2所示。
图3-2 单分支结构流程图
例3-2 输入两个整数,输出其中的大数。
本程序中,输入两个数a、b。把a先赋给变量max,再用if语句判别max和b的大小,如果max小于b,则把b赋给max。因此max中总是大数,最后输出max的值。
(2)双分支语句。
if双分支语句的语法格式如下。
双分支语句的执行过程是:先计算表达式的值,若值为“真”,则执行语句段1,然后执行双分支语句后面的语句。若值为“假”,则执行语句段2,然后执行双分支语句后面的语句。如图3-3所示。
图3-3 双分支结构流程图
例3-3 输入两个数,输出两个数的最大值、最小值。
本程序运行时,先输入两个数x、y。如果x大于y,则将x赋给变量max,将y赋给变量min,否则将y赋给max,将x赋给min,最后输出max和min的值。
程序运行结果如图3-4所示。
图3-4 程序运行结果
(3)多分支语句。
当判断条件有多种情况(多于两种)时,可以使用if多分支语句。该结构的流程图如图3-5所示。
图3-5 多分支结构流程图
if多分支语句的语法格式如下:
if多分支语句的执行过程是:首先计算表达式1的值,如果值为“真”(即表达式1具有非0值),则执行语句段1,然后跳过其他语句段,直接执行后续语句;否则跳过语句段1,接着依次判断其他表达式,如果某个表达式的值为“真”(即该表达式具有非0值),就执行其分支的语句段,之后转到后续语句执行;如果所有表达式的值都是“假”(即值都是0),则执行最后一个分支else中的语句段n+1。
例3-4 要求判别键盘输入字符的类别。
运行程序时,从键盘输入a,则屏幕显示结果如图3-6所示。(www.xing528.com)
图3-6 程序运行结果
多分支语句也可以没有最后一段else部分。此时,如果没有任何一个分支的表达式结果为真,则不执行任何一个语句段,直接跳过去执行后续语句。
对if条件语句,需要注意下面三点。
①if后面的表达式一般为关系表达式或逻辑表达式,也可以使C语言中的任何一种其他表达式。例如,以下的几种形式都是合法的。
②在if和else后面可以只有一条语句,也可以有多条语句。若有多条语句时,就要用花括号将多条语句括起来构成一个复合语句。例如:
③当if语句嵌套使用时,要注意if与else的配对关系。else总是与它上面最近的未配对的if配对。如果if与else的数目不一样,可以加花括号来确定配对关系。
2.switch语句
当判断条件有多种情况(多于两种)时,也可以使用多分支专用的switch语句。
switch语句的语法格式如下:
switch语句的功能是:首先计算圆括号中表达式的值,然后从上至下依次判断该值是否与case后面的常量表达式值相匹配,找到第一个与表达式值相等的常量表达式,就执行相应的语句段及“break;”语句,然后跳出switch语句。当表达式的值不与所有常量表达式值相等时,若存在default,就执行default后面的语句段n+1;若不存在default,则退出switch语句。switch语句的流程,如图3-7所示。
注意:
①switch后面的表达式在ANSI标准中允许为任何类型,但通常为整型或字符型,如果是实型数据,系统会自动将其转换成整型或字符型。case后面的常量表达式,则为整数或字符常量。
图 3-7 switch语句的流程图
②语句段后的break语句可以不要。此时,执行完一个case后面的语句段后,流程控制转移到下一个case继续执行(如例3-6)。
③多个case可以共用一个语句段。例如:
在此程序段中,三个case共用“printf(">64\n");break;”语句段。
④可以没有default子句,此时,语句段n后的break语句可以不要。
例3-5 编写两个数的+、-、*、/简易计算器程序。
程序运行时,若输入“18/4”并按回车键,则运行结果如图3-8所示。
图3-8 程序运行结果
例3-6 输入年号,判断是否为闰年。输入月号,输出每月的天数。
若年份能被400整除或者能被4整除但不能被100整除,则为闰年。
程序运行时,如输入年份为2018,输入月号为3,则运行结果如图3-9所示。
图3-9 程序运行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。