【C语言】分支与循环(上)

目录

1.  if 语句

2.  关系操作符

3.  条件操作符

4.  逻辑操作符:&&,||,!

5.  switch 语句


正文开始——

C语言是一门结构化的程序设计语言,这里的结构指:顺序结构、选择结构、循环结构

1.  if 语句                                                                                        

1.1  if

语法形式如下:

1    if (表达式)

2            语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行

在C语言中,0为假,非0为真,也就是表达式的结果如果是0,则语句不执行,表达式的结果非0,则语句执行。

例如:输入一个整数,判断是否为奇数

1.2  else

if...esle 语句

语法形式如下:

1   if (表达式)

2          语句1

3   else

4           语句2

例如:输入一个整数,判断是否为奇数,如果是奇数打印奇数,否则打印偶数。

练习:输入一个年龄,>=18就输出:成年,否则就输出:未成年。



1.3  分支中包含多条语句

默认在 if 和 else 语句中都只控制一条语句。

比如:

有代码运行结果可知:无论输入的值是否大于等于18,“可以恋爱了” 都会打印在屏幕上。

why?

因为 if 语句只能控制后面的一条语句,第二条 printf()语句是独立存在的,不管 if 语句为真假,第二条 printf()语句都会执行。此时,可以用 { } 将代码括起来,else 同理。

1.4  嵌套 if 

在 if   else 语句中,else 可以与另一个 if 语句连用,构成多重判断。

比如:

有了 if 语句的嵌套用法,就可以完成更多复杂逻辑的判断。 

1.5  悬空 else 问题

如果有多个 if 和 else ,可以记住一条规则,else 总是跟最接近的 if 匹配。 

此代码运行的结果就是啥都不输出。

why?

else 与最近的 if 匹配,但是第一个 if 语句就不成立,嵌套的 if 和 else 就没机会执行,所以最终啥都不打印。代码进行下面的改写比较容易理解。

 或者我们希望 else 确实和第一个 if 匹配,就可以这样写:

适当的加上大括号 { } 可以让代码逻辑变得更清晰,提高其可读性。

2.  关系操作符                                                                                

C语言用于比较的表达式叫做关系表达式里面的运算符就称为关系运算符,主要有下面6个:

  •    >   大于运算符
  •    <   小于运算符
  •   >=    大于等于运算符
  •   <=    小于等于运算符
  •   ==    相等运算符
  •  !=    不相等运算符

下面是一些例子:

1   a == b;

2   a !=  b;

3   a > b;

4   a < b;

5   a >= b;

6   a <= b; 

关系表达式通常返回0或1表示真假

C语言中,0 表示假,所有非 0 值表示真。

比如,20 > 12,返回1,12 > 20,返回 0。

关系表达式常用于 if 或while 结构

1   if (x==3)

2   {

3         printf ("x is 3.\n");

4   }

注意1:

相等运算符  ==  与赋值运算符  = 是两个不一样的运算符不要混淆有时候不小心写成下面的代码它可以运行但结果不可预料

1   if (x=3)...

上面的代码中,目的是 x==3,但是写成了x=3。这个式子表示对变量 x 赋值3,它的返回值为3,所以 if 判断为真。 

为了防止出现这种错误我们可以把变量写在等号的右边

1   if (3==x)...

这样的话,如果把 == 写成 = 编译器就会报错。 

注意2:

多个关系运算符不宜连用

1   i < j < k

上面代码中,连续使用两个小于运算符。这是合法表达式,不会报错,但通常达不到想要的结果,既不是保证变量 j 的值在 i 和 k 之间。因为关系表达式是从左到右计算,所以实际执行的是下面的计算逻辑。

1   (i < j)< k

上面代码中,i < j 实际返回的是0或1,所以最终是0或1与变量  k 进行比较。如果想要判断 j 是否在 i 和 k 之间,应使用下面的写法:

1   i < j && j < k 

例如:我们输入一个年龄,如果年龄在18~36之间,我们输出青年。

当我们输入56时依然输出青年。

why?

因为18先与我们输入的56比较,表达式18<=56为真,所以其表达式结果为1,再拿1与36比较,为真,所以打印青年。那么我们该如何修正呢?见下:

3.  条件操作符                                                                                

条件操作符也叫三目操作符,需要接受三个操作数的,形式如下:

1   exp1  ? exp2  : exp3

 计算逻辑:

如果exp1为真exp2计算计算的结果是整个表达式的结果如果exp1为假exp3计算计算的结果是整个表达式的结果

练习1:使用条件操作符表示下面代码的逻辑

练习2:使用条件表达式实现找两个数中较大值。

4.  逻辑操作符:&&,||,!                                                          

逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。

  • !:逻辑取反运算符 (改变单个表达式的真假)。
  • &&:逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
  •   || :逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

4.1  逻辑取反运算符 ! 

逻辑取反运算符

比如,我们有一个变量叫 flag,如果 flag 为假,要做一个什么事情,就可以这样写代码:

如果 flag 为真,!flag就是假,如果 flag 为假,!flag就是真

所以上面代码的意思就是 flag 为假,执行 if 语句中的代码。 

4.2  逻辑与运算符

逻辑与

&& 就是与运算符也是并且的意思&& 是一个双目操作符使用的方式是 a&&b&& 两边的表达式都是真的时候整个表达式才为真只要有一个是假则整个表达式为假

练习:如果我们说月份是3月到5月,是春天,用代码实现。

这里的 month 就是大于等于3,小于等于5,都要满足,用 && 正合适 。

4.3  逻辑或运算符

|| 就是或运算符也就是或者的意思|| 也是一个双目操作符使用的方式是 a || b|| 两边的表达式只要有一个是真整个表达式就是真两边的表达式都为假的时候才为假

练习:我们说一年中月份是12月或者1月或者2月是冬天。

4.4  练习:闰年的判断 

闰年的判断规则:

1.  能被4整除并且不能被100整除

2.  能被400整除是闰年

4.5  短路

C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值再对右侧的表达式求值,这个顺序是保证的。

如果左边的表达式满足逻辑运算符的条件就不再对右边的表达式求值 这种情况称为“短路”

1   if ( month >= 3 && month <= 5 )

表达式中 && 的左操作数是 month >= 3,右操作数是 month <= 5,当左操作数 month >= 3 的结果是0的时候,即使不判断 month <= 5,整个表达式的结果也是0(不是春季)。

1   if ( month==12 || month==1 || month==2 )

如果 month==12,则不用再判断 month是否等于1或2,整个表达式的结果也是1(冬季)。

所以,|| 操作符的左操作数的结果不为0时,就无需执行右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值

思考思考,如果是 ||  结果又是什么呢? 

5.  switch 语句                                                                               

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构

switch 语句是一种特殊形式的 if...else 结构用于判断条件有多个结果的情况它把多重的 else if 改成更易用、可读性更好的形式。

1   switch (expression)

2 {     

3        case  value1:statement

4        case  value2:statement

5        default:statement

6 }

上面代码中,根据表达式 expression 不同的值,执行相应的 case 分支。如果找不到对应的值,就执行 default 子句。

注: 

  •  switch 后的 expression 必须是整型表达式
  •  case 后的值,必须是整型常量表达式

5.1  if 语句和 switch 语句的对比

练习:输入任意一个整数值,计算除3之后的余数

如果使用 if 语句完成,如下:

注:

1.  case 和后边的数字之间必须有空格

2.  每一个 case 语句中的代码执行完成后,需要加上 break,才能跳出这个 switch 语句 

5.2  switch 语句中的 break 

前面的代码中,我们去掉 break,会出现怎样的情况呢?

why?

原因是 switch 语句也是有分支效果的,只有在 switch 语句中使用 break 才能跳出 switch 语句,如果某一个 case 语句后边没有 break 语句,代码会继续向下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面代码就执行了 case 中的语句。  

所以在 switch 语句中 break 语句是非常重要的能实现真正的分支效果。  

练习:输入一个1~7的数字,打印对应的星期几

 现需求发生变化 :

1.   输入1~5,输出的是“工作日”

2.   输入6~7,输出的是“休息日”

上面的练习中,我们发现可以根据实际需求,来在代码中决定是否使用 break,或者在哪里使用 break。

5.3  switch 语句中的 default

在使用 switch 语句时如果 switch 后的表达式中的值无法匹配代码中的 case 语句的时候这时候要不就不做处理要不就得在 switch 语句中加入 default

例如,在前面打印星期几的时候,若 day 的输入不是1~7的值,我们要提示:输入错误,则可以这样:

5.4  switch 语句中的 case 和 default 的顺序问题  

其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序满足实际需求就可以。

不过我们通常是把 default 子句放在最后处理。 


完——

          Try everything       

Try Everything_Shakira_高音质在线试听_Try Everything歌词|歌曲下载_酷狗音乐酷狗音乐为您提供由Shakira演唱的高清音质无损Try Everythingmp3在线听,听Try Everything,只来酷狗音乐!icon-default.png?t=N7T8https://t4.kugou.com/song.html?id=3ZOKhaeCOV2


结束——

拜拜~~~ (喜欢就点赞+收藏+关注哦!)

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
下面只是目标目录 ├─第1章-Shiro权限实战课程介绍 │ 1-1Shiro权限实战课程介绍.mp4 │ 1-2权限控制和初学JavaWeb处理访问权限控制.mp4 │ ├─第2章-大话权限框架核心知识ACL和RBAC │ 2-1权限框架设计之ACL和RBAC讲解.mp4 │ 2-2主流权限框架介绍和技术选型讲解.mp4 │ ├─第3章-ApacheShiro基础概念知识和架构讲解 │ 3-1Shiro核心知识之架构图交互和四大模块讲解.mp4 │ 3-2用户访问Shrio权限控制运行流程和常见概念讲解.mp4 │ ├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-详细讲解ApacheShirorealm实战 │ 5-1Shiro安全数据来源之Realm讲解.mp4 │ 5-2快速上手之Shiro内置IniRealm实操.mp4 │ 5-3快速上手之Shiro内置JdbcRealm实操.mp4 │ 5-4ApacheShiro自定义Readl实战.mp4 │ 5-5深入Shiro源码解读认证授权流程.mp4 │ ├─第6章-Shiro权限认证Web案例知识点讲解 │ 6-1Shiro内置的Filter过滤器讲解.mp4 │ 6-2Shiro的Filter配置路径讲解.mp4 │ 6-3Shiro数据安全之数据加解密.mp4 │ 6-4Shiro权限控制注解和编程方式讲解.mp4 │ 6-5Shiro缓存模块讲解.mp4 │ 6-6ShiroSession模块讲解.mp4 │ ├─第7章-ApacheShiro整合SpringBoot2.x综合案例实战 │ 7-10使用ShiroLogout和加密处理.mp4 │ 7-1Shiro整合SpringBoot2.x案例实战介绍.mp4 │ 7-2基于RBAC权限控制实战之Mysql数据库设计.mp4 │ 7-3SpringBoot2.x项目框架和依赖搭建.mp4 │ 7-4案例实战之权限相关服务接口开发.mp4 │ 7-5案例实战之用户角色权限多对多关联查询SQL.mp4 │ 7-6案例实战自定义CustomRealm实战.mp4 │ 7-7项目实战之ShiroFilterFactoryBean配置实战.mp4 │ 7-8前后端分离自定义SessionManager验证.mp4 │ 7-9API权限拦截验证实战.mp4 │ ├─第8章-权限控制综合案例实战进阶 │ 8-1实战进阶之自定义ShiroFilter过滤器上集.mp4 │ 8-2实战进阶之自定义ShiroFilter过滤器下集.mp4 │ 8-3性能提升之Redis整合CacheManager.mp4 │ 8-4性能提升之Redis整合SessionManager.mp4 │ 8-5ShiroConfig常用bean类配置.mp4 │ ├─第9章-大话分布式应用的鉴权方式 │ 9-1单体应用到分布式应用下的鉴权方式介绍.mp4 │ 9-2Shiro整合SpringBoot下自定义SessionId.mp4 │ ├─第10章-Shiro课程总结 │ 10-1Apacheshiro从入门到高级实战课程总结.mp4 │ 10-2高级工程师到架构师-解决问题思路+学习方法.mp4 │ └─课件资料.zip

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值