分支语句
什么是分支语句?
首先C语言是一种结构化的程序设计语言,C语言支持三种结构,一种是顺序结构,一种是选择结构,还有一种就是循环结构,我们画张图来形容一下:
分支语句就是选择结构的内容,本章我们重点了解的就是分支语句中的if语句以及switch语句
if语句
if语句的语法结构:
if(表达式)
语句;
这里表达式的判断方式有几种:
判断表达式的大小是否相等
判断表达式的内容如果不为0则为真,如果为0则为假
让我们来看一段代码:
#include <stdio.h>
int main()
{
int num = 1;
if(num == 5)
printf("hehe\n");
return 0;
}
这里的if表达式为判断是否相等,判断相等的符号为“==”
int main()
{
int num = 1;
if(num = 5)
printf("hehe\n");
return 0;
}
如果写成这样,就写一个“=”号,它的意思是赋值,把5赋值给num,意思相当于if(5)
这里的if表达式为判断是否为真
两个“==”号为等于,一个“=”号为赋值,一定要切记
单分支
表达式讲完了,接下来让我们回到这个整体
if(表达式)
语句;
举个例子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("未成年\n");
}
当表达式内容成立时,就会执行下面的代码,结果:
双分支
这是单分支的结构,接下来了解一下双分支:
if(表达式)
语句1;
else
语句2;
例子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("未成年\n");
else
printf("成年\n");
return 0;
}
当表达式内容不成立是,就会执行else下面的语句
多分支
这就是双分支语句,接下来我们再来看看多分支语句:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
例子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("少年\n");
else if(age>=18 && age<30)
printf("青年\n");
else if(age>=30 && age<50)
printf("中年\n");
else if(age>=50 && age<80)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
那在这个例子中,else if后面的表达式能不能写成else if(18 <= age < 30)呢?
答案是不行的,这里的表达式是这么计算的:18小于等于15为假,假就是0,然后拿0和30比较,0小于30为真,所以执行下面的内容
我们写代码的时候一定要写正确的格式,否则就会出现这种错误
单语句与多语句
看一段代码:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age > 18)
printf("成年\n");
printf("交女朋友\n");
return 0;
}
知识点:if语句后面默认只会执行一条语句,下面的语句不归它管,不管怎么样都会执行
如果想要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语句所匹配,如果你想要它和前面的if结合起来,必须要加大括号区分
所以这里我推荐,不管后面有一条语句还是多条语句,都用大括号把它们括起来
还有这么一串代码:
if (condition) {
return x;
}
return y;
它的结果是和if…else语句一样的,如果表达式成立,执行return x直接结束,否则执行return y
switch语句
switch语句常常用于多分支的情况,下面是它的语法结构
switch(整型表达式)
{
语句项;
}
注意:表达式必须是整型
语句项则是一些case语句
case 整型常量表达式:
语句;
例子:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
return 0;
}
我们发现结果并不正确,我们想打印星期一的,为什么最后全部打印了呢,因为在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支
如果我们需要 输入1-5,输出的是“weekday”; 输入6-7,输出“weekend”,就可以这样写
如果表达式中的值与任何一个case标签的值都不匹配,程序还是会执行,只是所有的语句都会被跳过,如果你并不想忽略不匹配所有标签的表达式的值时,可以加上一条default子句
例子: