C语言基础之分支语句
分支语句概述
C语言中,代码分为顺序结构,选择结构和循环结构,选择结构对应的即为分支语句。
分支语句中最主要的语句如下:
- if语句
- switch语句
if语句
if语句是C语言中编写代码最常用的语句之一,常用来判断是否满足条件,进而执行后续的代码。
首先,在介绍if语句前先要了解一个知识点——C语言中,0表示为假,非0表示为真(而不只是1代表真)。
if语句的语法结构
1. 单if结构:
if (表达式)
语句;
2. if - else结构(单分支):
if (表达式)
语句;
else
语句;
3. 多分支结构:
if (表达式)
语句;
else if (表达式)
语句;
……
else
语句;
当表达式判断为真则执行后续的代码,为假则跳过该表达式所控制下的代码执行后面的代码。
重点说明:
- if语句中,如果没有用到代码块符号({})时,if语句后只能控制一条语句,如果有多条语句,则必须使用代码块符号({})。
int main()
{
if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
return 0;
}
- 当代码较复杂时,一段代码中出现多次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");
由于else与离它本身最近的if相匹配,顾此处的else的条件为b不等于2时,输出“haha”,而第一个if的条件不成立,所以不能进入到后续的代码,故此处无任何输出。
附上一个简单的if-else语句的代码
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("少年\n");
else if (age >= 18 && age < 40)
printf("青年\n");
else if (age >= 40 && age < 60)
printf("壮年\n");
else if (age >= 60 && age < 90)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
switch语句
switch语句相较于if语句来说在特殊情况下可以简化代码,使代码更加简单,可读性更强,常常用在分支多的情况。
switch语句的语法结构
switch(整型表达式)
{
case 整形常量表达式:
语句;
case 整形常量表达式:
语句;
......
default:
语句;
}
- switch后跟的表达式必须是整型、
- case后面必须跟整形常量。
- default:当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。
- switch-case语句常和break语句搭配使用。如果不使用break语句,当表达式满足一个条件时,编译器会先执行此条件下的代码,接着执行后续所有条件下的代码,也就是说会把满足某个条件后的所有代码都执行完。举例:
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;
}
首先假设此处的代码中都删掉break语句:
当day输入为5时,将会在执行完printf(“星期五\n”)后不会跳出switch语句,而是继续执行后续所有的代码,打印出“星期五、星期六、星期天”。
再看此代码:break语句本身的意思为在此处后跳出循环,不再执行循环中后续的代码,因此在switch语句中,当执行完break语句时,直接跳出switch语句,不再执行switch中的代码,故此处day输入为5时,执行完printf(“星期五\n”)后跳出switch语句。