什么是选择语句
选择语句也叫分支语句,在c语言中最常用的当属if和switch,顾名思义就是在你做出一项“选择”产生一个结果
if语句
在if语句中用0表示为真,非0表示为假,满足条件则执行语句,可以用思维导图的方式如下表示,包含一般的if语句和多分支的if语句
一般if的基本语法
if(表达式)
语句1;
else
语句2;
举例如下:
int main() { int age = 0; scanf("%d", &age); if (age < 18) printf("未成年\n"); else printf("已成年\n"); return 0; }
多分支的if语句基本语法
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
举例如下:
int main() { int age = 0; scanf("%d", &age); if (age < 18) printf("未成年\n"); else if (age >= 18 && age < 35) printf("青年\n"); else printf("中年或老年\n"); return 0; }
悬浮else及其匹配
if语句中也可以允许嵌套别的if语句,并且在使用过程中,可以根据我们的需求对else进行适当省略,语法是允许只有if没有else的情况出现的,因此,我们可能在实际情况中会出现程序中有多个if,但是只有少量的else的情况的,在这种情况下,else对于if的匹配则是我们需要格外注意的地方,else的匹配原则是优先与最近的那个if匹配,因此我们在使用的过程中也得注意作用区间,可以给上大括号等方式来完成我们目的的设计。
我们可以做如下的测试:
int main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("b的值为2\n"); else printf("a的值为0\n"); return 0; }
理论上,我们想要的结果应该是输出“a的值为0”,但实际上,这段程序不会有任何的结果输出,原因就在于这里的else并不是和第一个if匹配的,而是和第二个if匹配的,程序首先判断a是否为1,判断为假,跳过结果语句找寻else语句的结果,但并没有找到,因此没有任何输出。
这也告诫了我们,在书写时应注意if对else的匹配,可以适当的添加大括号来达成目的
switch语句
switch语句也是一种选择语句,通常用于多分支的情况下。
switch语句的基本语法
switch ( 整型表达式 )
{
case 整形常量表达式 :
语句 ;
}
我们可以做以下的示例:
int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: printf("星期一\n"); case 2: printf("星期二\n"); case 3: printf("星期三\n"); case 4: printf("星期四\n"); case 5: printf("星期五\n"); case 6: printf("星期六\n"); case 7: printf("星期天\n"); } return 0; }
但是这样就会带来一个问题,我们不妨试着运行以下,这里以输入3为例
我们会发现,这与我们设想的完全不一样,多了许多我们不需要的输出,这主要是因为case只是switch的输入接口,就是说从case这里进入switch语句,然后按着顺序继续执行语句,为例改善这一点,我们就需要使用“break”关键字。即在编译器读到break关键字时,即刻跳出switch语句,如下示例。
int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: printf("星期一\n"); break; case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期天\n"); break; } return 0; }
同时在switch语句中我们也可以根据需求做出部分省略,假如我们现在想用输入数字表示今天星期几,输出今天是休息日还是工作日 ,示例如下
int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; case 6: case 7: printf("休息日\n"); break; } return 0; }
default子句
在switch语句中也允许使用default子句来表示默认的选项和情况。 假如在刚才的程序中,我们输入了8,但实际上是不存在星期八的情况的,我们就可以输出“输入错误”,其他数据同样。
int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; case 6: case 7: printf("休息日\n"); break; default: printf("输入错误\n"); } return 0; }