分支语句分为if else语句和switch case语句。
首先介绍if else语句。
如果我们想要实现这样一个功能:给定年龄,如果成年则输出成年,只需要一条if语句就足够了。
int age = 20;
if (age>=18)
printf("成年\n");
if语句的使用方法很简单,if后面跟上一个圆括号,括号里面放一个表达式,如果这个表达式的结果为真,执行if后面的语句,为假的话就不执行。
如果还要完善上面这段代码,加上“未成年”的选择,加上else即可。
int age = 20;
if (age>=18)
printf("成年\n");
else
printf("未成年\n");
如果if后面的圆括号内的表达式为真,执行if后面的语句,为假则执行else后面的语句。
那么在C语言中是如何表示真假的呢?很简单,0表示假,非0表示真!
还有就是,理论上来说,if和else后面都只能跟一条语句(但这个说法不够严谨)。其实是可以跟多条语句的,但是别忘了加上大括号!
比如上面的代码中,我们想要输出未成年人不能谈恋爱,可以这么写:
if (age>=18)
printf("成年\n");
else
{
printf("未成年\n");
printf("不能谈恋爱\n");
}
如果if或者else后面跟了多条语句,必须加上大括号!不加大括号的话默认只能跟一条语句。
if else可以嵌套使用。
if (表达式1)
语句1;
else if (表达式2)
语句2;
else if (表达式3)
语句3;
else if (表达式4)
语句4;
else if (表达式5)
语句5;
else if (表达式6)
语句6;
else if (表达式7)
语句7;
else
语句8;
禁止套娃......
还有一点需要注意,每一个else是跟离他最近的if匹配的。
if (表达式1)
if (表达式2)
语句1;
else
语句2;
比如上面这段代码,else是和表达式2匹配,而不是表达式1!
所以建议在写代码时把这个else和和他匹配的if对齐,以免造成误会(就像我写的这样)。
当然,遇到这种容易产生歧义的情况,还是建议加上大括号:
if (表达式1)
{
if (表达式2)
语句1;
else
语句2;
}
这样就不会产生歧义了。
除此之外还有一点需要注意,当需要判断变量和常量相等时,为了避免把==写成=这种低级错误,建议把常量写在左边。比如说,不建议这么写:
if (a==5)
语句;
//不建议
而建议这么写:
if (5==a)
语句;
//建议
这两种写法中,前者如果漏掉一个等号,不会产生语法错误,只会产生逻辑错误,检查起来就会比较费劲。后一种写法如果犯同样的错误,编译器会直接报错。
这个例子告诉我们,代码风格真的很重要!
接下来介绍switch case语句。
老规矩,直接上例子:
假设这样一个场景,我们输入1~5输出工作日,输入6~7输出休息日(程序员表示不服,明明1~7都是工作日)。
int input = 0;
scanf("%d", &input);
switch (input)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
这里switch后面跟上一个圆括号,圆括号里面放一个整形表达式(必须是整形!),然后后面跟一个大括号。大括号里面有一个很明显的结构,那就是:
case 整形常量表达式:
switch后面的圆括号里面的表达式结果是几,就会从case几进去。比如上面那段代码,如果输入3就会从case 3进去。然后代码就会一直向下执行,不会停下来!直到——遇到break则直接跳出这个switch语句(其实就是跳出了switch后面的大括号)。
这里可以把case几理解成入口,把break理解成出口。
当然,如果一个case都不匹配,就会执行default子句后面的语句。
这里说明一下,一般建议在最后一个case后面也加上break。一般建议加上default子句,然后再他后面加上break。