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岁,打印中老年
    • 如果年龄在6089岁,打印老年
    • 如果年龄大于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的倍数的数字之和在这里插入图片描述

七.do-while循环

1.语法形式

在这里插入图片描述

  • while循环和for循环这两种循环都是先判断,如果满足条件就进入循环,而do-while循环则直接进⼊循环体,执⾏循环语句,然后再执⾏while后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环

2.流程图

在这里插入图片描述

3.do-while循环实践

  • 在屏幕上打印1~10在这里插入图片描述

4.练习

  • 输入一个正整数,计算这个数是几位数
    • 思路:在这里插入图片描述

    • 程序:在这里插入图片描述

八.break和continue语句

  • break永久的终止整个循环
  • continue作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现
  • 在for循环和while循环中,break用法无异,但continue用法不同
  • do-while循环中,break和continue的用法和while循环中的作用基本相同。

九.循环的嵌套

  • 练习:找出100~200之间的素数,并打印在屏幕上。在这里插入图片描述

十.goto语句

  • goto 语句可以实现同⼀个函数内跳转到设置好的标号处在这里插入图片描述

  • 同时,goto语句也能快速跳出循环。本来for循环想提前退出得使⽤ break ,⼀个break只能跳出⼀层for循环,如果3层循环嵌套 就得使⽤3个break才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。

  • goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值