目录
1. 选择结构
2. 选择结构的使用
2.1 单分支选择结构
2.2 双分支选择结构
2.3 多分支选择语句
2.3.1 通过else if实现多分支选择语句
2.3.2 switch语句实现多分支选择语句
2.4 嵌套的分支语句
选择结构用于判断给定条件,通过判断的结果来决定下一步的执行流程。
常见的选择结构有单分支选择结构、双分支选择结构、多分支选择结构以及嵌套的分支结构
语法结构
if(表达式)
语句;
执行流程
示例:判断一个数是否为偶数
#include
int main()
{
int input = 0;
printf("请输入一个数");
scanf("%d", &input);
//判断输入的数是否为偶数
if (input % 2 == 0)
//若不加花括号则默认只执行if语句后面一条语句
{
printf("输入的数为偶数\n");
}
return 0;
}
语法结构
if(表达式)
语句1;
else
语句2;
执行流程
示例:判断一个数是偶数还是奇数
#include
int main()
{
int input = 0;
printf("请输入一个数");
scanf("%d", &input);
//判断输入的数是否为偶数
if (input % 2 == 0)
{
printf("输入的数为偶数\n");
}
else
{
printf("输入的数为奇数\n");
}
return 0;
}
注:
if 和 if else 语句,后面可以不写{},此时只会执行if else后面一条语句
//代码1
if (condition)
return x;
return y;
//代码2
if (condition)
{
return x;
}
else
{
return y;
}
代码1和代码2的执行结果是相同的,相比之下,代码2逻辑更加清晰,且不容易出错
{}可以执行代码块内多条语句,且代码的逻辑更加清楚建议在使用时都加上{}
语法结构
if(表达式1)
语句1;
else if(表达式2)
语句2;else if(表达式3)
语句3;
else
语句4;
执行流程
示例:判断一个数是正数、负数还是0
#include
int main()
{
int num = 0;
printf("请输入一个数");
scanf("%d", &num);
if (num > 0)
{
printf("输入的数为正数\n");
}
else if (num < 0)
{
printf("输入的数为负数\n");
}
else
{
printf("输入的数为0\n");
}
return 0;
}
注:
1. 选择结构是从上到下匹配的,一旦匹配上某个条件后,整个条件语句就结束了,
即使后面也能匹配上条件也不会再执行了 。
2. 使用if else if后可以不写 else
switch语句常常应用于多分支的情况。
当分支较多时,使用else if语句的形式就比较复杂,此时,我们可以使用switch语句来实现
语法结构
switch(整形表达式){
case 常量表达式1:
语句1;
语句2;
...
break;
case 常量表达式2:
语句1;
...
break;
case 常量表达式3:
语句1
...
break;
default:
default语句
break;
}
在计算整形表达式的值后,将得到的值逐个与每个case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行后面的语句,直到遇到break语句为止。若表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
(default相当于else,与上述所有条件都匹配不上时,就执行default)
示例1:
#include
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
//若不加break,则会向下执行后面的语句,直到遇见break
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
case 7:
printf("星期天");
default:
printf("输入错误!\n");
}
return 0;
}
运行结果
示例2:
#include
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;
}
注:
1. switch语句与if语句不同,它仅能判断表达式的值是否等于指定的常量,而 if 可以计算并判断各种表达式
2. switch语句后必须为整形表达式
3. 在一个 switch 中可以有任意多的 case 语句,case后必须为常量
4. default可以省略
5. case和default顺序可以颠倒,颠倒时要注意后面的break语句。
6. 建议在最后一个 case 语句的后面也加上一条 break语句,以避免添加新的case语句时,之前最后一个 case 语句后面忘了添加 break语句。
switch语句和if-else语句都可以嵌套使用
执行流程
示例1:
#include
int main()
{
double score = 0.0;
printf("请输入分数");
scanf("%d", &score);
if (score >= 0.0 && score <= 100)
{
if (score >= 85)
{
printf("优秀\n");
}
else if (score >= 75)
{
printf("良好\n");
}
else if (score >= 60)
{
printf("及格\n");
}
else
{
printf("不及格\n");
}
}
else
{
printf("输入错误!\n");
}
return 0;
}
示例2:
#include
int main()
{
int a = 0;
int b = 5;
if (a > 0)
if (b > 0)
printf("b = %d", b);
else
printf("a = %d", a);
return 0;
}
运行结果
注:C 语言规定了 if和else的就近匹配原则,即else和它上面的最近的没有配对的if配对,与书写格式无关
在执行语句后面都加上{},匹配的if else保持相同的缩进,可以使逻辑更加清晰,且不容易出错
示例3:
#include
int main()
{
int a = 2;
int b = 3;
switch (a)
{
case 1:
printf("a = 1\n");
break;
case 2:
printf("a = 2\n");
switch (b)
{
case 1:
printf("b = 1\n");
break;
default:
printf("b != 1\n");
break;
}
break;
default:
break;
}
return 0;
}