目录一、 if语句1.if2.else3.多条语句4.多分⽀5.嵌套if语句6.悬空else问题二、关系操作符三、条件操作符四、逻辑操作符 , || , 1.逻辑取反运算符 2.逻辑与运算符3.逻辑或运算符||4.练习1闰年的判断5.短路⽬标1. 掌握分支语句ifelseswitch2. 掌握关系操作符、条件操作符、逻辑操作符在代码中的应用能够熟练使用3. 掌握循环语句for、while、do.while以及break和continue4. 理解并熟练应用循环嵌套解决问题5. 锻炼自己阅读代码的能力注:不要让自己的懒惰和学校的扫盲式教育阻碍你的前进;“能不能…”、”…会不会更好”的问题尽量自己去敲代码试试只有亲自摸索出的答案才会印象深刻。C语⾔是结构化的程序设计语⾔这⾥的结构指的是顺序结构、选择结构、循环结构C语⾔是能够实现这三种结构的其实仔细分析,我们的⽇常事都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤if、switch实现分⽀结构使⽤for、while、do while实现循环结构。一、if语句1.ifif 语句的语法形式如下:表达式成⽴为真则语句执⾏表达式不成⽴为假则语句不执⾏。在C语⾔中0为假⾮0表⽰真也就是表达式的结果如果是0则语句不执⾏表达式的结果如果不是0则语句执⾏。例⼦输⼊⼀个整数判断是否为奇数思路:只要是奇数它除以二时一定余一※为判断相等2.else⼀个正整数不是奇数就是偶数。给定⼀个任意的正整数要判断是奇数还是偶数怎么表⽰呢就需要if...else...语句了语法形式如下:举例输⼊⼀个正整数如果是奇数打印是奇数否则打印偶数。练习:输⼊⼀个成绩成绩 60就输出拿捏拿捏否则就输出补考补考3.多条语句默认在 if 和 else 语句中默认都只控制⼀条语句⽐如:上⾯的代码你会发现输⼊的值不管是60 还是60庆祝⼀下 都会打印在屏幕上。这是因为if语句只能控制⼀条语句就是 printf(拿捏拿捏~\n); if语句为真则打印;if语句为假则不打印对于 printf(庆祝⼀下\n); 是独⽴存在的不管if语句的条件的真假都会被执⾏。那如果我们要if语句同时控制2条语句怎么办呢那就要使⽤{}将代码括起来 else 后也可以跟上⼤括号。如:4.多分⽀在 if else 语句中 else 可以与另⼀个 if 语句连⽤构成多分⽀的场景。⽐如总价“满50减15满30减8满20减5不满20元不参与活动”怎么实现练习暗恋对象回消息速度和⼼情指数如果回复时间⼩于等于1分钟秒回今天⼀定有戏如果回复时间在1分钟到10分钟还⾏ta可能在忙如果回复时间在10分钟到1⼩时ta可能没看到信息……我去打游戏了如果回复时间超过1⼩时别等了代码不香吗5.嵌套if语句有时候我们需要在if语句中嵌套if语句形成多层嵌套的判断。⽐如评奖学⾦资格1. 成绩 85没有挂科没有记过处分有奖学⾦2. 其中任意⼀个条件不满⾜都不能评奖怎么实现※嵌套的if语句是没有顺序要求的但当多项条件不满足时程序会输出相对最外层的理由,此处若全不满足会输出成绩不满足一栏。6.悬空else问题如果有多个if和else可以记住这样⼀条规则else总是与前⾯最近的、还没有配对的if结合。看下⾯代码执⾏的结果是空。为什么呢这就是悬空 else 的问题如果有多个 if 和 else 可以记住这样⼀条规则 else 总是与前⾯最近的、还没有配对的 if 匹配。上⾯的代码排版让 else 和第⼀个 if 语句对⻬让我们以为 else 是和第⼀个if匹配的当 if语句不成⽴的时候⾃然想到的就是执⾏ else ⼦句打印 haha 但实际上 else 是和第⼆个 if进⾏匹配的这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的如果第⼀个 if 语句就不成⽴嵌套 if 和 else 就没机会执⾏了最终啥都不打印。※此处还要注意一种代码风格问题,不要因为凌乱的排版加重矫正代码的工作量:若想了解更多代码的书写风格记得看《高质量C/C编程指南》尤其是前三章。如果代码改成下⾯这样就更加容易理解了。或者如果我们希望else确实和第⼀个if匹配可以这样修改代码(用大括号把if二号隔离起来):当然也可以追求一下if一号和else的大括号对齐:只要带上适当的⼤括号代码的逻辑就会更加的清晰所以以后在写代码的时候要注意括号的使⽤让代码的可读性更⾼。二、关系操作符C语⾔⽤于⽐较的表达式称为 “关系表达式”relational expression⾥⾯使⽤的运算符就称为“关系运算符”relational operator主要有下⾯6个。关系表达式通常返回0或1表⽰真假。C 语⾔中 0 表⽰假所有⾮零值表⽰真。⽐如 20 12 返回 1 12 20 返回 0 。关系表达式常⽤于 if 或 while 结构。①相等运算符与赋值运算符是两个不⼀样的运算符不要混淆(具体含义往前翻)。※有个小技巧可以判断一下那就是互换一下变量与数字的位置通过观察代码能否运行来区分它们。不能再从右向左导致系统报错的是赋值。上⾯⽰例中原意是n 5但是不⼩⼼写成n 5。这个式⼦表⽰对变量n赋值5它的返回值为5所以if判断总是为真。为了防⽌出现这种错误有的程序员喜欢将变量写在等号的右边。这样的话如果把误写成编译器就会报错。②多个关系运算符不宜连⽤上⾯⽰例中连续使⽤两个⼩于运算符。这是合法表达式不会报错但是通常达不到想要的结果即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算所以实际执⾏的是下⾯的表达式。上面式子中ij返回0或1所以最终是0或1与变量k进行比较如果想要判断变量j的值是否存在i和k之间应该使用下面的写法:⽐如我们输⼊⼀个年龄如果年龄在18岁~36岁之间我们输出⻘年。如果我们这样写:当我们输⼊10的时候依然输出⻘年这是因为我们先拿18和age中存放的10⽐较表达式1810为假 18age 的结果是0再拿0和36⽐较036为真所以打印了 ⻘年 所以即使当age是10的时候也能打印 ⻘年 逻辑上是有问题这个代码应该怎么写呢以上就是关系操作符我们需要掌握的剩下的只要按照字⾯意思理解使⽤就⾏没有特别注意的。三、条件操作符条件操作符也叫三⽬操作符需要接受三个操作数形式如下。条件操作符的计算逻辑是如果 exp1 为真 exp2 计算计算的结果是整个表达式的结果如果exp1 为假 exp3 计算计算的结果是整个表达式的结果。练习使⽤条件表达式实现找两个数中较⼤值。将:变为:条件操作符也能嵌套使⽤但是不建议嵌套太深如果嵌套要注意换⾏对⻬的⽅式来写。四、逻辑操作符,||,逻辑运算符提供逻辑判断功能⽤于构建更复杂的表达式主要有下⾯三个运算符1.逻辑取反运算符这是一个单目操作符。⽐如我们有⼀个变量叫 flag ,如果flag为假要做⼀个什么事情就可以这样写代码如果 flag 为真 !flag 就是假如果 flag 为假 !flag 就是真2.逻辑与运算符 就是与运算符也是并且的意思 是⼀个双⽬操作符使⽤的⽅式是 ab , 都真才为真有假则为假。⽐如如果我们说⽉份是3⽉到5⽉是春天那如何使⽤代码体现这⾥表达的意思就是month既要⼤于等于3⼜要⼩于等于5必须同时满⾜3.逻辑或运算符|||| 就是或运算符也就是或者的意思 || 也是⼀个双⽬操作符使⽤的⽅式是 a || b ||两边的表达式只要有真就是真都为假才为假。⽐如我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天那么我们怎么使⽤代码体现呢4.练习1闰年的判断输⼊⼀个年份year判断year是否是闰年闰年判断的规则1. 能被4整除并且不能被100整除是闰年2. 能被400整除是闰年两规则的关系是:1可以单独判断就不用启动2判断;若1不行则启动2判断2也不行才不算闰年。※||两边的括号是可以去掉的但不建议。5.短路C语⾔逻辑运算符还有⼀个特点它总是先对左侧的表达式求值再对右边的表达式求值这个顺序是保证的。如果左边的表达式满⾜逻辑运算符的条件就不再对右边的表达式求值。这种情况称为“短路”。如前⾯的代码:表达式中 的左操作数是 month 3 右操作数是 month 5 ,当左操作数 month 3 的结果是0的时候即使不判断 month 5 整个表达式的结果也是0不是春季。所以对于操作符来说左边操作数的结果是0的时候右边操作数就不再执⾏。对于 || 操作符是一样的。如果month 12则不⽤再判断month是否等于1或者2整个表达式的结果也是1是冬季。所以 || 操作符的左操作数的结果不为0时就⽆需执⾏右操作数。像这种仅仅根据左操作数的结果就能知道整个表达式的结果不再对右操作数进⾏计算的运算称为短路求值。练习阅读代码计算代码输出的结果结果是a1b2c3d4另外i0。因为后置导致a0在让识别完后才会加1因此不会再向后运行。再看一个:结果是a2b2c3d4。因为a、b、c用或连接即一旦a1被系统赋给i使i1后后面都不再执行只有a会执行使a3。把a变为0:结果是a1b3c3d4。当代入a0时左边为假则右边有必要判断符号会使程序运行到右边也就是bb为真d就没必要运行。因此i2a、b运行使a1,b3。※阅读代码体会逻辑操作符和短路现象:游戏中同时持有‘钥匙’且血量30%或被诅咒了才能进入隐藏房间。