分支语句入门基础讲解(从入门到精通)

 

目录

什么是语句?

1.分支语句

1.1if语句

1.1 单分支if语句

1.2 双分支if语句:

1.3多分支if语句:

1.2 “悬挂”else问题

switch语句

2.1switch语句中的case

2.3switch语句中的break

2.3default子句


C语言是结构化的程序设计语言!

把分支循环看作生活

无非就三种结构

1.顺序结构:从清晨到中午到晚上

2.选择结构:生活每时每刻都有种种选择

3.循环结构:日复一日的干一些事情

什么是语句?

C语句可分为以下五类:

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

分支语句属于控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。

分为以下三类:

1.条件判断语句:也叫分支语句:if语句,switch语句

2.循环执行语句:do while 语句,while语句,for语句

3.转向语句:break语句,goto语句,continue语句,return语句

以上九种都属于控制语句

1.分支语句

1.1if语句

if语句的语法结构:

语法结构

1.1 单分支if语句

if(表达式)//表达式的结果为非0为真,为真执行,为0假不执行
    语句;

C语言是如何表示真假的?

非0就是真

例如 -1 真

0 假

如果表达式的结果为真,则语句执行。

1.2 双分支if语句

    
if(表达式1)//如果为真,执行语句1
    语句1;
else//如果为其他执行语句2
    语句2;

满足if语句,执行语句,打印成年

不满足if语句,进入else语句,打印未成年

1.3多分支if语句:

if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

例如:

应该注意的点:

else if(18<=age<=30)可不可以这样写?

如果出现这种情况怎么办?

if 默认控制一条语句,如果条件成立,要执行多条语句,应该使用代码块。

一个大括号相当于一个代码块

这里的 { } 就是一个代码块

1.2 “悬挂else问题

这是《C陷阱与缺陷》的一个经典例题

#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; 
}

仔细思考一下

你是不是这么想的?如果不是,那么你很棒哈哈哈哈,当时我也掉入的这个陷阱之中

else不与第一个if匹配,else不是和对齐的if匹配,else与离他最近的if语句匹配。

有人问:if 不是只能控制一条语句吗,也没加大括号,怎么控制多条语句?

if else是一条分支语句,if else合起来是一条语句,是一个整体

 所以说代码的书写方式和风格很重要,他人可能会第一眼被误导,我们现在要养成一个好的编码风格和习惯

这样看起来就不会一眼被误导了。

switch语句

2.1switch语句中的case

switch语句是一种分支语句

常常用于多分支的情况。

比如:

输入1,输出星期一

输入2,输出星期二

.................

输入6,输出星期六

输出7,输出星期天

如果使用if会很麻烦。

如果把这些条件写成if形式太复杂,那我们就得有不一样的语法形式,这时就用从switch语句

switch(整型表达式)
{
    语句项;
}

//语句项是什么?
//是一些case语句:
//如下:
//    case 整型常量表达式:
//        语句;

如果不懂,先看例子:

 switch表达式后面结果是几,就从case几进去,case语句和switch后面那个表达式结合起来决定你的入口从哪进去

2.3switch语句中的break

输入3,应该只打印星期3,为什么星期4星期5...他们也被打印出来了?

day的值只是从哪进去,没说从哪里出去,程序一直会向下进行,就会用到break

break//跳出停止

那我们在每个语句后加入break来看看效果,好像是完美的解决了

 

这时候我们的需求变了: 1. 输入1-5,输出的是“weekday”; 2. 输入6-7,输出“weekend”

这时候代码是不是看起来太冗余一些?很麻烦,还可以简化代码吗?

break语句 的实际效果是把语句列表划分为不同的分支部分。

break 不是语法强制要求的,根据具体情况而定。

2.3default子句

只让输入1到7,但是用户输入其他数字或符号,得不到任何信息,该怎么提示他(她)

其实也没什么,结构就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C语言中并不认为是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。

它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

但是 但是!default放在前面一定要加入break!!!不然会继续执行下面case中的语句

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

switch中我们要注意的事情  !!!!

1.switch后面必须是整型

 这时候我们拿一个浮点型是不可以的

2.case后必须整形常量表达式

下面这种情况是不可以的

 

有同学问:为什么我case后面可以加字符?不是只能是整型常量表达式嘛?

因为字符底层存储的是字符的ASCII码值,也是整型

要养成好习惯

在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现再想增加语句的时候忘记添加产生bug。

感谢大家能看到最后, 如果有不足的地方多多指出,会持续更新的!码字不易,求三连

大家一起加油加油加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值