C语言分支语句

本文详细介绍了C语言中的分支结构,包括单分支if、双分支if……else、多分支if……elseif和Switch语句,以及关系操作符、逻辑操作符和条件操作符的使用。同时讨论了代码风格和嵌套if的注意事项,强调了避免过度使用goto语句的原则。
摘要由CSDN通过智能技术生成

分支语句就是隶属于C语言三大结构中的选择结构

其中的内容有:

单分支:if语句;

双分支:if……else语句;

多分支:if……else if语句和Switch语句。


#if,单分支语句

if语句格式为:

其中,需要(表达式)的求值为真,才会执行语句,否则跳过语句,语句内容可以使一条单语句,也可以是复合语句即为:

如图所示,复合语句即为“ { } ”括起来的多条语句。

#注意,即使if语句由复合语句构成,但整个if语句仍被视为一条语句。

表达式中,用逻辑操作符与关系操作符将多个表达式连起来的式子,称为关系表达式,if语句就是通过关系表达式来判断值是否为 “ 非0 ” ,然后执行语句。


#if……else,双分支语句

if……else语句的格式为:

继补充if语句的双分支,当表达式内求值为0时则会执行else后的语句2,同样,这里的语句2,也可以是复合语句,重点:复合语句必须用花括号“ { } ”括起来不然会这样:

编译器会报错,应该改成下面这样:

在C语言中,这些缩进并非必须,但这是标准风格,目的是让以后的自己或别人能够一目了然的读懂这些代码。


#关系操作符与逻辑操作符(条件操作符)

关系操作符有:<(小于),<=(小于等于),>(大于),>=(大于等于)

                         ==(绝对等于),!=(不等于)

操作符含义优先级
<小于四个操作符优先级相等,高于另外两个操作符
<=小于等于
>大于
>=大于等于
==绝对等于两者中==的优先级高于!=
!=不等于

当关系表达式成立时,其值非0(不单指为1),若不成立则为0

在C语言中(非0)为真,(0)为假

逻辑操作符有:&&(逻辑与),||(逻辑或),!(逻辑非)

&&与||属于双目运算符,要求两个运算量,如“a>&&a<c”;

!属于单目运算符,只要求一个运算量,如“!a”。

逻辑操作符的优先级:

&&的优先级高于||;

逻辑运算符的优先级高于赋值运算符(=),又低于关系运算符(<,<=,>,>=,==,!=)!属于单目运算符,单目运算符是优先级仅此于初级运算符的存在!高于算数运算符(+、-、*、/、%)。

#条件运算符

条件运算符:“  ?”属于三目操作符,优先级低于逻辑操作符,高于赋值运算符。

格式如下:

表达式1 ? 表达式2: 表达式3

判断表达式1的值是否为真,若为真,则执行表达式2;若为假,则执行表达式3

所以,可以用条件运算符来代替双分支语句

#注意;“  ?”与“  :”成对出现,不能单独使用


#if……else if语句和Switch语句,多分支语句

单分支和双分支仅能面对一种和两种选择,现实情况是我们会面对多种抉择,这是就需要多分支结构了。

C语言中,使用if……else if,if……else嵌套,及Switch语句来实现多分支

if……else if的结构为:

或这样写:

if(表达式1)

        语句1;

else if(表达式2)

        语句2;

……

else 

        语句n+1;

实际上if……else if为if……else语句的变式,如果表达式1值为真,则执行语句1,若为假则判断表达式2,为真则执行语句2,为假则依次往下判断,直至遇到else,而非else if;其中,只能执行一条语句

#else 与if的匹配

如果程序中有许多if和else,那么编译器该如何知道那个if对应那个else?例如:

if (num > 6)
    if(num > 12)
        printf("num > 12");
else
    printf("num < 6");

结果是else与第二个if匹配。

规则:如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来了:

if (num > 6)
    {
    if(num > 12)
        printf("num > 12");
    }
else
    printf("num < 6");

这样else才会与第一个if匹配。

多层嵌套的if语句

if语句的嵌套其实在前面的if与else的匹配问题中出现了,结构如下:

if(x > 0)
    {
        if(y > 0)
            printf("该点位于第一象限");
        else
            printf("该点位于第四象限");
    }
else
    {
        if(y > 0)
            printf("该点位于第二象限");
        else
            printf("该点位于第三象限");
    }

Switch语句

虽然在面对多个选项的时候,我们可以使用if……else if来完成,但是,在大多数情况下,我们使用Switch语句会更加方便,结构如下:

switch(表达式)
    {
    case 常量1:语句1;break;
    case 常量2:语句2;break;
    ……
    case 常量n:语句n;break;
    case 常量n+1:语句n+1;break;
    default:语句;break
    }

switch语句通过将表达式的值与常量值进行比对,如果相等则执行后面的语句,如果不相等则跳到下一个case语句,若没有相等的,则从default开始往下执行,如果没有default,则跳出Switch,执行Switch之后的代码。其中,执行完语句,若下一句遇到了break,则跳出Switch;

顺带一提,break语句也可用于循环中,但continue只能用于循环中,但当Switch处于一个循环中时,continue便可以作为Switch的一部分

#goto语句

goto语句分为两部分:

goto 标签;

要让这条语句正常执行,函数还必须包含另一条标为标签的语句,该语句以标签名后跟一个冒号开始:

标签:printf("从此处开始运行\n");

一般来说,我们会使用选择结构来使用goto语句,例如:

while(x > 0)
{
    for(i = 1;i <= 100; i++)
        {
            if(表达式)
                goto a;
             其他语句;
        }
        其他语句;
}
其他语句;
a : 语句;

但其实我们在C语言中应当避免使用goto语句,如果习惯使用goto,试着改掉这个毛病。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值