什么是分支结构
分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。
分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。
分支结构又可大致分为单分支结构、多分支结构。
分支结构详解
1、if语句(单分支版)
最简单的分支结构仅有判断部分和对应语句构成,适用于结果判断为真时,需要执行相应语句的情况。
if语句的语法形式如下:
if (表达式)
{
语句部分
}
可以简单理解为,如果小括号中的表达式成立,则会执行下面大括号中的语句,否则语句不执行。
需要注意的是,在C语言中,0为假,非0表示真。
更简单来说就是表达式的结果是0的话,则语句不执行,表达式结果不为0的话,则语句执行。
例子:判断一个整数是否为偶数
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if( a % 2 == 0 )//表达式部分
{
printf("%d 是偶数\n", a);//语句部分
}
return 0;
2、if else语句
在简单的分支结构中只有一种条件输出手段,而如果想根据不同的条件进行不同的输出就需要结合else语句进行分类讨论了。
具体语法形式如下:
if (表达式1)
{
语句1
}
else if (表达式2)
{
语句2
}
else if (表达式3)
{
语句3
}
......
上述代码中else可以简单理解为 “否则” 的意思,总体翻译过来可以这样理解
如果满足表达式1,则执行语句1;
否则如果满足表达式2,执行语句2;
否则如果满足表达式3,执行语句3;
具体的分支数要结合实际使用场景决定,使用时尽量使语句对齐,这样既美观又便于大伙理解代码。
例子:输入一个整数,判断其是0,还是正数,还是负数。
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if( a == 0 )
{
printf("输入的数为0\n");
}
else if ( a > 0 )
{
printf("输入的数为正数\n");
}
else if ( a < 0 )
{
printf("输入的数为负数");
}
return 0;
注:代码中最后一条判断语句实际上并没有什么作用,因为当你不满足前面的所有条件时其实就只能进入最后一种情况,所以如果将其省略也是可以的,程序仍然能正常的运作。
3、switch语句
switch语句可以将其看作是一种特殊形式的 if else 语句,通常用于判断一个表达式有多种结果的情况。
语法形式如下:
switch(表达式)
{
case a1:
语句1;
break;
case a2:
语句2;
break;
case a3:
语句3;
break;
...
...
...
default:
语句n;
}
switch语句的执行过程如下:
1、首先计算“表达式”的值,假设为 m。
2、从第一个 case 开始,比较 a1 和 m,如果它们相等,就执行冒号后面的语句。
3、如果 a1 和 m 不相等,就跳过冒号后面的“语句1”,继续比较a2、a3……一旦发现和某个数值相等了,就会执行后面的语句。
4、如果直到最后一个case都没有找到对应的值,那么就执行 default 后的"语句n"。
例子:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("余数为0");
break;
case 1:
printf("余数为1");;
break;
case 2:
printf("余数为2");;
break;
}
return 0;
}
注意:
1、switch后的表达式必须是整型表达式,即该表达式的实际结果为某个整数。
2、case和后边的数字时间必须有空格,且该数字必须为整数。
3、break语句专门用于跳出整个switch 语句。如果一个分支中结尾未使用 break 语句,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。
4、default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。