C语言分支语句---if语句与switch语句详解

分支语句

什么是分支语句?
首先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 1printf("星期一\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子句
例子:
请添加图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值