C语言的分支结构有两种:①if-else语句②switch语句
一般形式如下:
if(表达式)
语句1;
else
语句2;
如果有多个语句,则写成
if(表达式)
{
语句1;
语句2;
}
else
{
语句3;
语句4;
}
if-else的意思是,如果if后面表达式的逻辑值为1,则执行if里的语句,如果不为1执行else里的语句。 看下面一段代码
- #include
- int main()
- {
- int a, b;
- a = 5, b = 6;
- if (a > b)
- b++;
- else
- a++;
- printf("a=%d,b=%d", a, b);
- return 0;
- }
🎈说明:
上面的程序我给a,b两个变量赋初始值,进入if里判断a是否大于b,很明显a小于b,表达式的逻辑值为0,所以去执行else里的语句。
看下面一段代码
- #include
- int main()
- {
- int a, b;
- a = 5, b = 6;
- if(a
- if (a > b)
- b++;
- else
- a++;
- printf("a=%d,b=%d", a, b);
- return 0;
- }
很明显,上面程序中有两个if,一个else,但记住这个else永远之和离他最近的if配对
那么上面程序的意思就是先执行判断if(ab),发现对于上面程序不满足那就执行else。
如果你问,如果第一个if我就不满足呢?那就不执行,因为没有写和第一个if配对的else。
多分支if语句
看下面一段代码
- #include
- int main()
- {
- int a, b;
- a = 5, b = 6;
- if (a < b)
- b = b + 3;
- else if (a > b)
- b++;
- else
- a++;
- printf("a=%d,b=%d", a, b);
- return 0;
- }
执行流程:
先判断a是否小于b(a
如果()内逻辑值不为1则往下执行判断a是否大于b。如果逻辑值为1则执行b++;
如果都不满足就执行else里的a++;
switch语句
✔格式
switch(表达式)
{
case 常量表达式1:语句1;break;
case 常量表达式2:语句2;break;
......
case 常量表达式n:语句n;break;
default:语句n+1;break;
}
✔执行流程
表达式的值=常量表达式1的值,执行语句1,然后break跳出switch语句
表达式的值=常量表达式2的值,执行语句2,然后break跳出switch语句
表达式的值=常量表达式n的值,执行语句n,然后break跳出switch语句
其他情况,执行语句n+1,然后break跳出switch语句
Q:如果不写break会怎样?
A:比如你1里面没写break,那么如果执行了语句1之后他会继续执行语句2,直到见到break,如果一直没碰到break那么他会执行完下面的所有语句。
Q:不写default可以吗?
A:当然可以,不写的话,当程序执行完switch后面的表达式,找不到对应的case语句时,他自动退出switch,执行下面的程序