分支与循环

C语言是结构化的程序设计语言,这里的结构是指顺序结构,选择结构,循环结构,C语言是能够实现这三种结构的。我们可以使用if,switch实现分支结构(顺序和选择),使用for,while,do whle实现循环结构。

1.if语句

1.1if

if语句的语法形式如下:

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

下面我为大家举一个例子:

if语句的执行流程如下:

1.2else

上面的例子中判断一个数是否是奇数,那么一个数不是奇数那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?

这里就需要用到if....else.....语句了,语法形式如下:

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

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

1.3分支中包含多条语句

默认在if和else语句中默认都只控制一条语句,比如:

上面的代码,你会发现输入的值不管是不是>=18还是小于18,“可以交女朋友”都会打印在屏幕上。

这是因为 if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了, if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真 假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来, else后也可以跟上⼤括号。如下:

1.4嵌套if

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

比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。

在上面的代码中就用到了嵌套if语句。

再比如:

输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数就输出负数。

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

注:如果有多个if和else,就可以记住这样一条规则,else总是和最近的if匹配。所以建议每次用if...else语句都加一个大括号,就像上面的代码一样。

2.关系操作符

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

> ⼤于运算符

< ⼩于运算符

>= ⼤于等于运算符

<= ⼩于等于运算符

== 相等运算符

!= 不相等运算符

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

C语言中,0表示假,所有非0的值表示真。比如:20>12返回1,12>20返回0.

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

注意:相等运算符==和赋值运算符=是两个不一样的运算符。有时可能会不小写写错它可以运行但很容易出现意料之外的结果。

另⼀个需要避免的错误是:多个关系运算符不宜连⽤。

上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的 表达式。

上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i 和 k 之间,应该使⽤下⾯的写法。

比如:我们输入一个年龄,如果年龄在18到30之间,我们输出青年。

如果我们这样写

当我们输入10的时候,依然输入青年这是因为,我们先拿18和age中存放的10⽐较,表达式18<=10为假,18<=age的结果是0,再拿0和 36⽐较,0<=36为真,所以打印了青年,所以即使当age是10的时候,也能打印青年,逻辑上是有问题的,所以这个代码我们应该这样写:

3.条件操作符

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

 条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

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⽉是冬天,那么我们怎么使⽤代码体现呢?

C语言的逻辑运算符还有一个特点,他总是对左侧的表达式求值,再对右侧的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件,就不在对右边的表达式求值,这种情况称为“短路”。

5.switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。

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

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀。

注:

switch 后的 expression 必须是整型表达式

case 后的值,必须是整形常量表达式

5.1if语句和switch语句的对比

如:输入任意一个整数,计算除三之后的余数

if语句

switch语句

上述的代码中,我们要注意的点有:

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

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

5.2switch语句中的break

前⾯的代码中,如果我们去掉case语句中的break,会出现什么情况呢?

我们发现,7除以3本来余数是1,但是我们发现程序运行的结果多了一行“余数是2”的打印。

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。

所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

5.3switch语句中的default

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句。

例:

我们通常是把 default ⼦句放在最后处理的。

6.while循环

C语言提供了三种循环语句,while就是其中的一种,接下来介绍while语句

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

实践

在屏幕上打印1到10的数:

7.for循环

for循环的语法形式如下:

表达式1用于循环变量的初始化

表达式2用于循环结束条件的判断

表达式3用于循环变量的调整

⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。

整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

for循环的实践

在屏幕上打印1到10的值:

计算1~100之间3的倍数的数字之和

8.do-while循环

它的语法形式如下:

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳 出循环;

⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表 达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的 结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。 所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

do-while 的实践

在屏幕上打印1到10的值

9.break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中 提供了 break 和 continue 两个关键字,就是应用到循环中的。

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执行。

continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

9.1while循环中的break和continue

break举例

 打印了1,2,3,4后,当i等于5的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。

所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。

continue举例

continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏下⼀次循环的判断。

到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接 到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成 死循环。

9.2for循环中的break和continue

for循环的break和while循环一样不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。

continue举例

所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调 整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。

do while循环中的break和continue的作用几乎和while循环中一模一样。

10.循环的嵌套

例:

找出100~200之间的素数,并打印在屏幕上。注:素数⼜称质数,只能被1和本⾝整除的数字。

题目解析:

1.要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。

2.假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤ 循环解决。

3.如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

11.goto语句

C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到设置好的标号处

例如:

goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了。

感谢大家的浏览

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值