C语言的分支语句

    C语言是一门结构化的程序设计语言,其中将实现的结构分为了顺序,选择和循环三类,顺序结构就是按语句顺序实现程序,这里不多讲,本次内容我们着重介绍C语言的选择结构,也就是分支语句,以及相关会用到的知识。

一、if语句

  1. if语句使用格式如下:
 if (表达式)
    语句

    表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏,C语言中0为假,非0为真
    接下来我们举个例子就懂了,我们试着来实现:输入一个整数,判断是否为奇数,首先判断方法就是让这个整数模2,如果返回1,那么它就是一个奇数,示例如下:
在这里插入图片描述

  1. else
    如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢?就要用上else(其他的情况),在这里也可以翻译为否则,写法如下:
if (表达式)
 语句1 
else

具体示例:其含义为,输入一个整数,判断是否为奇数,是奇数就打印,否则为偶数,再打印
在这里插入图片描述

  1. 分支语句中包含多条语句:
    默认if和else都只能控制一条语句,比如:
    在这里插入图片描述

可以发现,虽然输入的年龄小于18,可是还是会打印“可以谈恋爱了”,但是不会打印“成年了”,这就是上面说的if默认只能控制一条语句,那怎么可以让它控制多条语句呢,只需要把要一起控制的语句用大括号括起,如图:
在这里插入图片描述
这下输入15就不会打印“可以谈恋爱了”。同理,如果else后想要控制多条语句,也要用大括号括起。

  1. 嵌套if:
    在 if else 语句中,else 可以与另⼀个 if 语句连⽤,构成多重判断。⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
    在这里插入图片描述
    上面的if语句就嵌套在else语句中。再比如实现这样的程序:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数,如图:
    在这里插入图片描述
    如上就是对if语句进行了嵌套。

if语句练习

输⼊⼀个⼈的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁及以上打印"⽼寿星"

答案放在本文最下方

二、关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个

  1. 运算符分类
    • >是大于运算符
    • < ⼩于运算符
    • >= ⼤于等于运算符
    • <= ⼩于等于运算符
    • == 相等运算符
    • != 不相年龄在表达等运算符

  2. 关系表达式返回值:一般返回逻辑值,默认返回0表示假,返回1表示真,也就是如果表达式成立返回1,不成立返回0。要注意的一点是:C语言中0是假,非0为真,这里只是用1表示真,并不表示真就是1

  3. 注意事项:
    (1)不要把相等操作符==写成了赋值操作符=,容易出现逻辑错误,比如if( n = 3),原本想判断n是否等于3,现在的含义是把3赋值给n,是永远为真的条件
    (2)多个关系符不能连用,比如想表达年龄在18到30岁之间时,不能写成18=<age<=30,编译器会报错,要写成age >=18 && age <=30,在后面的逻辑操作符会详细讲到

三、条件操作符

条件操作符属于三目操作符,也是C语言唯一一个三目操作符,需要用三个操作数,大致用法是:
条件 ?表达式1 : 表达式2,如果条件成立,即条件为真,那么执行表达式1,条件不成立,即条件为假,执行表达式2,比如将如下代码改造为使用条件操作符的表达式:
在这里插入图片描述
在这里插入图片描述
解析:b后面用的赋值操作符,就是把表达式a >5 ? 3 : -3的结果赋给b,如果输入的值大于5,那么就执行表达式1,结果就为3,如果输入的值小于等于5,那么执行表达式2,结果就为-3。
    从该例子可以看出,一些简单的条件判断就可以使用条件操作符,会比if语句简单一些

条件操作符练习

使⽤条件表达式实现找两个数中较⼤值

答案在本文最后

四、逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符
• ! :逻辑取反运算符(改变单个表达式的真假)
• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
• || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
接下来我们进行一一介绍:

  1. 逻辑取反操作符!:可以将原表达式的逻辑值取反,比如原表达式为真,那么取反后就为假,原表达式为假,取反后为真,例如:
    在这里插入图片描述
    解析:a的值为10,b的值为20,a>b,返回的就是假,然后取反过后就是真,那么以上表达式!(a>b)返回值就是真,那么满足了if语句的判断,就在屏幕上打印了“hello world”

  2. 逻辑与操作符&&:它的意思就是并且,比如表达式1 && 表达式2,它的含义就是既要满足表达式1,也要满足表达式2,即两个表达式同时为真,结果才为真,比如我们想表达3月到5月是春天,那么月份必须满足大于等于3月,并且小于等于5月,否则就不满足题意,举例为:
    在这里插入图片描述

解析:我们输入的月份必须必须满足大于等于3月,并且小于等于5月,即表达式1和2都要为真才行,如果有一个为假那么就不会打印“春天”,故我们可以总结出规律:
• 真 && 真结果为真
• 真 && 假结果为假
• 假 && 真结果为假
• 假 && 假结果为假

  1. 逻辑或操作符||:它的含义是或者,比如表达式1 || 表达式2,只需要其中一个表达式满足条件,即其中一个表达式为真,那么结果为真,比如同样表达3月到5月之间是春天,使用逻辑或表达如下:
    在这里插入图片描述
    解析:这里有三个条件,要么月份等于3,要么月份等于4,要么月份等于5,只要其中一个成立就会打印春天,只有都不满足这三个条件的月份才不会打印春天,即只有所有表达式为假,才会返回假,其余都返回真,可以总结规律如下:
    • 真 || 真结果为真
    • 真 || 假结果为真
    • 假 || 真结果为真
    • 假 || 假结果为假

逻辑操作符练习

输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则:

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年

答案在文末

五、switch语句

    除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式,特点就是大部分情况需要知道表达式准确的返回值,其语法为:
switch (表达式)
{
        case 值1: statement
        case 值2: statement
        default: statement
                                }
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀

  1. switch语句和if语句对比:比如要实现:输⼊任意⼀个整数值,计算除2之后的余数,使用if语句为:
    在这里插入图片描述
    使用Switch语句为:
    在这里插入图片描述
    上述的代码中,我们要注意的点有:
    (1)case 和后边的数字之间必须有空格
    (2)每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

  2. Switch语句中的break:
    如果前面的代码我们去掉break会怎么样呢?
    在这里插入图片描述
        我们会发现原本余数是0,结果还继续打印了余数是1,原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了case 0 的语句,还执行了case 1 中的语句

  3. Switch语句中的default:
    如果我们输入的值不在我们的case中,那么我们就会用到default,用来排除其他情况,比如:输⼊⼀个1~7的数字,打印对应的星期⼏,例如输入1就打印星期一,代码如下:
    在这里插入图片描述
    试想如果用户没有按要求输入1~7的数字呢?此时就可以使用default,比如:
    在这里插入图片描述
    此时如果用户输入1~7之外的数字,也就是不在case中的数字,就会显示输入错误,相当于一个提示信息

  4. default的顺序:
    不少人认为default必须放在最后,实际上default和case语句没有严格的顺序要求,只不过习惯将default放在最后,实际上是可以放在前面,甚至放在第一个也可以

Switch语句练习

如果上述需求发⽣变化,变为:

  1. 输⼊1~5,输出的是“⼯作⽇”
  2. 输⼊6~7,输出“休息⽇”
  3. 如果输入其他数字,那么打印输入错误

如何简便地将要求完成
答案在本文末尾

六、答案

  1. if语句练习答案:
    在这里插入图片描述

  2. 条件操作符练习答案:
    在这里插入图片描述

  3. 逻辑操作符练习答案:
    在这里插入图片描述

  4. Switch语句练习答案:
    在这里插入图片描述
        这里我们利用了Switch语句中如果没有break,那么从对应case进入,并且实现对应语句后,并不会直接停下来,而是继续执行代码。输入1,2,3,4,5都会打印工作日,那么不如直接将打印工作日放在case 5,然后用break结束,假设从case 1进入,什么也没有,就会往下面继续执行,知道碰见了case 5,打印了工作日后,break停止了,输入2~4也是同理。根据这个逻辑,输入6,7都会打印休息日,就直接把打印休息日放在case 7,然后用break结束,原理同上。
        由此可见,我们可以根据需求,灵活使用break,不能太呆板

如果有什么疑问,欢迎在评论区留言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值