C语言 分支与循环(上)
标签: C语言 分支与循环(上) 博客 51CTO博客
2023-07-25 18:24:13 120浏览
C语言 分支与循环(上),C语言学习过程记录
- C语言是结构化的程序设计语言,C语言支持三种结构:顺序结构,选择结构,循环结构。我们可以使用if,switch实现分支循环,for,while,do while实现循环语句。
一.if语句
1.语法形式
- 表达式成立,语句执行;反之,则不执行。
- num % 2的意义是:判断num除以2的余数,若余数为1,则返回1,表示为真。
- %的用法:表达式 x% y 的结果是 x 除以 y 的余数,当 x 能被 y 整除时,其值为 0。
- == 的用法:在 x == y 中,如果x跟y的值相等,则返回1,表示真;如果x跟y不相等,则返回0,表示假。
2.else
- 与if形成**if……else……**语句
3.分支语句中包含多条语句
- **默认在if语句和else语句中都只控制一条语句,如果想要控制多个分句,要将分句放在大括号中
- 例如当我们在打印完到达十八岁后“成年”时,还想再打印“就可以谈恋爱了”就可以在分支语句中包含多条语句
4.嵌套if
- **在if else语句中,else可以与另一个if语句连用,进而构成多重判断
- 例如:要求输入一个整数,判断输入的整数时0,还是正数或负数
- 第一种写法
- 第二种写法(更加简洁)
- 也可先判断大于0等等,此处只写了一种情况
更复杂的逻辑判断
- 有了嵌套if语句之后,就可以进行更加复杂的逻辑判断
- 例如:输入一个人的年龄
- 如果年龄小于18岁,打印少年;
- 如果年龄在18岁至44岁,打印青年;
- 如果年龄在44岁至59岁,打印中老年;
- 如果年龄在60至89岁,打印老年;
- 如果年龄大于90岁,打印老寿星
- 嵌套结构明显的写法
- 同样也可以合并省略大括号进行简化,else后不能直接跟括号,一条语句大括号可以省略
5.悬空else
- 在有多个if和else的情况下,else总是跟最接近的if匹配。
- 例如:
- 我们可以推测结果是haha吗?a如果都没等于1的话那不就是打印else,最后的结果不就是haha吗
- 然而结果并非如此
- 由打印的结果不难发现,屏幕打印的是空的。这是因为a的值不等于1,那么嵌套在if里的两个语句就没有机会执行。这就印证了开头所说在有多个if和else的情况下,采取就近原则,else总是与相邻最近的if匹配,不管if和else与谁对齐
二.关系操作符
1.基本概念
- **C语言用于比较的表达式叫做关系表达式,其中所用的符号就叫做关系运算符
大于运算符
- <小于运算符
=大于等于运算符
- <=小于等于运算符
- == 相等运算符
- !=不相等运算符
- =赋值
- 在C语言中,0表示假,所有非零值表示真。但关系表达式通常返回1或者0,表示真假。关系表达式常用于if或while结构。
2.易错提醒
- 为了避免混淆赋值和相等运算符号,在常量和变量比较大小时,尽量将常量放在左边。因为当常量放在左边时,发生了错写赋值的情况,编译器会报错。
- 多个关系运算符不宜连用,关系符运算从左到右运算
- 这是一个判断表达式,从左往右判断:8<10判断结果为1,而1<9判断结果也为1,返回值为1,判断为真,打印的是haha。而不是我们所认为的三个值同时进行比较不成立,判断为假,所打印的hehe
- 当我们想进行连续的比较时应使用&&才能达到我们想要的结果。讲求逻辑,不能想当然的去写程序。
三.逻辑操作符:&& ,||, !
- 逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有以下三个逻辑操作符:
1.与运算符 &&
- 与运算符,意为并且(两侧表达式都为真,则为真,否则为假)
2.或运算符 ||
- 或运算符,意为或者(两侧表达式至少有一个为真,则为真,否则为假)
3.逻辑取反运算符 !
- 逻辑取反运算符(改变单个表达式的真假)
4.练习:判断年份是否为闰年
- 输入一个年份year,判断year是否是闰年
- 闰年判断规则:
- 能被4整除且不能被100整除的是闰年
- 能被400整除的是闰年
5.短路
- C语言总是先对左边的表达式求值,在对右边进行求值,这个顺序是保证的。如果左边的表达式满足逻辑运算的条件,就不再对右边的表达式求值,这种情况,我们称为短路。
- 对于与操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
- 对于或操作符来说,左操作数的结果不为0时,就⽆需执⾏右操作数
四.switch语句
- 基本语法:switch语句也是用来实现分支结构的,可以理解为一种特殊形式的if…else语句
- switch后的expression必须是整形表达式
- case后的值,必须是整形常量表达式
- switch语句表达的是一个明确的值,而不是范围
1.if语句和switch语句的对比
- 练习:输入任意一整数值,计算除3之后的余数
- 使用if语句:
- 使用switch语句:
- case和后面的数字之间必须要有空格
- 每一个case语句中的代码执行完成后,都需要加上break,才能跳出这个switch语句。
- 那么如果我们不加break又会如何呢?
2.switch语句中的break
- 不加break会出现的情况:
- 那么,同样都是不加break,为什么第二张图片可以正常执行呢?
- 其实,是因为我们看到的结果只是结果,而不是程序执行的过程。因为没有break的存在,case 0执行的结果是0或1,执行完后会继续往后执行,把case 1,case 2都执行掉了。这里之所以输入8的时候没有出现像7一样的情况,是因为输入8在执行case 1的时候执行的结果是0,不能执行打印。所以输入8是一个巧合数值。我们要规范代码编写步骤,防范这种巧合错误的出现。
- 所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
3.switch语句中的default
- 在使⽤switch语句的时候,我们经常可能遇到⼀种情况,⽐如switch后的表达式中的值⽆法匹配代码中的case语句的时候,这时候要不就不做处理,要不就得在switch语句中加入default⼦句。
4.switch语句中case与default的顺序关系
- 在switch语句中case语句和default语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把default⼦句放在最后处理的。
- 循环语句一共有三种为while循环,for循环,do while循环接下来一一介绍
五.while循环
1.while和if的对比
- while语句的语法结构与if语句非常相似
- 下面通过程序观察
- 可以发现if满足条件只打印一次hehe,而while满足条件是死循环打印hehe
2.while语句的执行流程
3.while循环的实践
- 在屏幕上打印1~10
- 输入4321输出1234
- %代表求余运算符号;/代表除法运算符号。
六.for循环
1.形式
-`` for(表达式1,表达式2,表达式3)
语句;`
- 表达式1用于循环变量的初始化 - 表达式2用于循环结束条件的判断 - 表达式3孕育虚幻变量的调整
2.for循环的执行流程
3.for循环的实践
- 在屏幕上打印1~10
4.while循环和for循环的对比
- 不难发现,for循环更有利于我们对程序进行维护。在代码多的时候,while循环的三个部分就比较的分散,所以从形式上来讲,for循环会更优一点。
5.练习
- 计算1~100之间3的倍数的数字之和![[Pasted image 20230724212023.png]]
七.do-while循环
1.语法形式
![[Pasted image 20230724212523.png]]
- while循环和for循环这两种循环都是先判断,如果满足条件就进入循环,而do-while循环则直接进⼊循环体,执⾏循环语句,然后再执⾏while后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
2.流程图
![[Pasted image 20230724213021.png]]
3.do-while循环实践
- 在屏幕上打印1~10![[Pasted image 20230724213647.png]]
4.练习
- 输入一个正整数,计算这个数是几位数
- 思路:![[Pasted image 20230724214457.png]]
- 程序:![[Pasted image 20230724215127.png]]
八.break和continue语句
- break:永久的终止整个循环。
- continue:作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。
- 在for循环和while循环中,break用法无异,但continue用法不同
- do-while循环中,break和continue的用法和while循环中的作用基本相同。
九.循环的嵌套
- 练习:找出100~200之间的素数,并打印在屏幕上。![[Pasted image 20230724224100.png]]
十.goto语句
- goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。![[Pasted image 20230724225042.png]]
- 同时,goto语句也能快速跳出循环。本来for循环想提前退出得使⽤ break ,⼀个break只能跳出⼀层for循环,如果3层循环嵌套 就得使⽤3个break才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。
- goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论