序
分支语句在我们编程过程中,是一个比较重要的组成部分,他可以让程序根据不同的条件执行不同的代码块。C语言为我们提供了两种分支语句:if语句和switch语句。这两种语句都能让我们实现条件的执行,具体用哪个语句还是要我们根据具体程序来决定。
分支语句
1 if语句
1.1 if
if 语句的基本语法为
if (表达式)
{
//条件执行语句
}
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是如果表达式结果为0,则语句不执行,表达式如果结果不为0,则语句执行。
例:输入一个整数,判断是否为偶数
#include <stdio.h>
int mian()
{
int sum = 0;
scanf ("%d",&sum);
if (0 == sum %2)
{
printf ("%d 是偶数",sum);
return 0;
}
1.2 else
else是一个与if相对应的语句,if...else...
基本语法形式为
if(表达式)
//条件执行语句1
else
//条件执行语句2
例:输入一个数如果他是偶数就打印偶数 ,如果他是奇数就打印奇数
#include <stdio.h>
int main()
{
int sum = 0;
scanf ("%d",&sum);
if (sum % 2 == 0)
{
printf("%d 是偶数",sum);
}
else
{
printf ("%d 是奇数",sum);
}
return 0;
}
练习:输入一个年龄,>= 18岁,就输出成年,否则输出未成年
#include <stdio.h>
int main()
{
int age = 0;
scanf ("%d",&age);
if (age >= 18)
printf ("成年");
else
printf ("未成年");
return 0;
}
1.3 分支语句中包含多条语句
在默认条件下if和else语句都只控制一条语句。
例:
#include <stdio.h>
int main()
{
int age = 0;
scanf ("%d",&age);
if (age >= 18)
printf ("成年\n");
else
printf ("未成年\n");
printf ("不能谈恋爱\n");
return 0;
}
以上代码,执行后会发现输入的值不管是大于等于18还是小于18,“不能谈恋爱”都会打印。
这是因为if和else语句都默认只控制一条语句执行
如果if或else要控制执行多条语句需要加{ }
#include <stdio.h>
int main()
{
int age = 0;
scanf ("%d",&age);
if (age >= 18)
printf ("成年\n");
else
{
printf ("未成年\n");
printf ("不能谈恋爱\n");
}
return 0;
}
1.4 嵌套if
在if else语句中,else可以与另一个if语句连用构成多重判断。
例:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
{
if (num % 2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
{
printf("非正数\n");
}
return 0;
}
上面代码中,判断奇数偶数部分是嵌套在if语句中的,构成了嵌套if语句
例:
#include <stdio.h>
int main ()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("输入的值是0\n");
else if (num > 0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
return 0;
}
上面代码中判断正负数的部分是嵌套在else子句中的,构成了嵌套if语句。
1.5 悬空else问题
如果在一段代码中有多个if和else,可以记住这样一个规则,else总是跟最接近的if匹配
例:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
以上代码第一眼很容易看错认为会输出haha,实则是什么都不输出,因为else只会跟离他最近的if语句相结合,这就是悬空else问题。
如果我们想要else与第一个if相匹配,我们就修改一下这个代码
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
{
return 0;
}
这样修改以后else就与第一个if语句匹配了。
只要带上大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候注意括号的使用,让代码可读性更高。
2 switch语句
2.1 switch
除了if语句外,C语言还提供了switch语句来实现分支结构。
switch语句是一种特殊形式的if...else结构,用于判断条件有多个结果的情况。把他多重的else if改成更易用、可读性更好的形式。
switch语句的基本语法为
switch(表达式)
{
case 常量表达式:
语句1;
case 常量表达式:
语句2;
}
在以上代码中,根据表达式不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。
switch后的表达式必须为整形表达式
case后的值,必须是整型常量表达式
case后必须加上空格再加常量
default后面也要加上空格再加":"
例:用switch实现输入1~7的数字,打印对应星期几
#include <stdio.h>
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;
}
2.2 switch语句中的break
switch语句具有分支效果,只有使用break才能跳出switch语句的分支,否则会一直执行switch语句中的剩下分支,所以在switch语句中break语句是非常重要的,有break语句才能实现真正的分支效果,当然并不是每个case语句都要有break,这需要根据具体情况去决定。
例:前面的代码中我们把周一到周五定为工作日,周六周日为休息日。
#include <stdio.h>
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;
}
由此看出在数据较多的分支结构中,用switch语句会更加清晰。
2.3 switch语句中的default
在使用switch语句的时候,经常会遇到一种情况,比如switch后的表达式中的值无法匹配代码中的case语句时,这时我们就要么不做处理,要不就需要在switch语句中加入default子句。
switch中default语句基本语法
switch(表达式)
{
case 常量表达式:
语句1;
case 常量表达式:
语句2;
default:
语句3;
}
例:前面的代码打印星期练习,如果输入的day的值不是1~7之间的数,我们就要提示输入错误。
#include <stdio.h>
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");
break;
}
return 0;
}
在switch语句中default语句和case语句的是没有顺序要求的,只要能满足实际需求就可以,
不过通常情况下是把default子句放在最后处理