分支和循环

发布于:2024-10-13 ⋅ 阅读:(129) ⋅ 点赞:(0)

一、关系运算符

在 C 语言中,关系运算符通常用来比较两个值之间的关系。关系运算符有:>、>=、<、<=、== 和 !=。分别对应数学上的:大于、大于等于、小于、小于等于、等于和不等于。

关系运算符的作用和数学上雷系,如:大于(>)用来判断左边的值是否大于右边,如果大于则返回真(通常为 1),否则返回假(0)。

在 C 语言中,关系表达式的值是真和假,真是非 0 值(通常为 1),假是 0。

代码如下:
在这里插入图片描述
5 > 3 为真,所以输出的值为 1,而 5 < 3 为假,所以输出的值为 0。其他关系运算符的用法也是一样的。

二、if 条件判断语句

if 语句中,若条件表达式为真,则执行紧跟在 if 后面的第一条语句;否则跳过该语句。在 C 语言中,非 0 为真,0 为假。

1. if 一般格式

if 语句的一般格式如下:

if (条件表达式)
 语句 1
语句 2

如果条件表达式的值为真,那么执行语句 1,否则跳过语句 1,执行语句 2。如下代码:
在这里插入图片描述
上述代码中,表达式 5 > 3 的值为真,所以执行语句 if 后的语句打印 xixi。若改成 5 < 3,那么便不会打印 xixi。如下代码:
在这里插入图片描述

2. if else 格式

if else 语句的一般格式如下:
if (条件表达式)
 语句 1
else
 语句 2
语句 3

如果条件表达式的值为真,那么执行语句 1,然后再执行语句 3;否则执行语句 2,再执行语句 3。代码如下:
在这里插入图片描述

3. if else 嵌套格式

如下代码:
在这里插入图片描述
上述代码中,先判断 a > b,若 a > b 则输出 a > b;否则判断 a == b,若 a== b 则输出 a == b;否则输出 a < b。可以看到若第一个 if 被否定之后,就判断下一个 if,以此类推,直到所有的 if 都被否定,那么执行 else 语句。

而上述代码中 if 语句的实质其实就是下面的代码:

// 判断
if (a > b)
{
	printf("a > b\n");
}
else
{
	if (a == b)
	{
		printf("a == b\n");
	}
	else
	{
		printf("a < b\n");
	}
}

只不过第一种形式的代码更加美观易懂。

4. if else 语句的注意事项

else 语句会和离他最近的 if 语句进行配对,所以不要写出如下的代码:
在这里插入图片描述
这里因为 else 语句是和离它最近的 if (2 > 3) 语句配对的,所以当表达式 2 > 3 的结果为假时,执行 else 语句。正确的写法是使用花括号将对应的语句括起。

三、条件操作符(?:)

条件操作符的使用格式为:表达式1 ? 表达式2 : 表达式 3
若表达式 1 的值为真,则结果为表达式 2 的值,否则为表达式 3 的值。
如下代码:
在这里插入图片描述
上述代码中的条件表达式的结果为变量 a 和变量 b 之间的较大值,若 a > b,则结果为 a,否则结果为 b。当然,条件运算符中的三个表达式都可以使用括号括起的复杂表达式。

四、逻辑操作符

在 C 语言中有三个逻辑操作符,逻辑与(&&)、逻辑或(||)和逻辑非(!)。

1. 逻辑与(&&)

逻辑与表达式的一般格式为:表达式 1 && 表达式 2
当左右两边的表达式均为真时,结果为真;否则为假。如下代码:
在这里插入图片描述

该操作符的计算顺序为从左到右,若表达式 1 为假,则结果为假。跳过表达式 2,不进行计算。
在这里插入图片描述
第一个逻辑与表达式由于 0 为假,则不计算 a++ 表达式,则 a 的值仍为 0。第二个逻辑与表达式由于 1 为真,计算表达式 a++,则 a 的值为 1。

2. 逻辑或(||)

逻辑或表达式的一般格式为:表达式 1 || 表达式 2
当左右两边的表达式均为假时,结果为假;否则结果为真。如下代码:
在这里插入图片描述

该操作符的计算顺序也是从左到右,若表达式 1 的值为真,则结果为真。跳过表达式 2,不进行计算。
在这里插入图片描述
第一个逻辑或表达式中左侧表达式为真,则不计算右侧表达式。第二个逻辑或表达式中左侧表达式为假,计算右侧表达式。

3. 逻辑非(!)

逻辑非表达式的一般格式为:!表达式
把当前表达式的结果取反,也就是真变假,假变真。如下代码:
在这里插入图片描述
由于逻辑非运算符的优先级较高,一般对后面的表达式加上括号。

五、switch 语句

在 C 语言中,switch 语句是一种多分支选择结构,当我们有多个选项时,就可以使用该结构,如下代码:

// switch 语句演示
printf("你最喜欢的水果是什么?\n");
printf("1)苹果                    2)香蕉\n");
printf("3)橘子                    4)火龙果\n");
// 输入
int input;
scanf("%d", &input);
// switch 判断
switch (input)
{
case 1 :
	printf("Apple\n");
	break;
case 2 :
	printf("Binana\n");
	break;
case 3 :
	printf("Orange\n");
	break;
case 4 :
	printf("Pitaya\n");
	break;
default:
	printf("输入错误,选择结束\n");
}

上述代码中,该 switch 语句会根据圆括号中变量的值去寻找 case 后面对应的标签,然后执行相应的语句,然后 break 跳出 switch 语句,继续后面的代码。倘若没有对应的标签,那么执行 default。

如下,输入 1,打印 Apple。
在这里插入图片描述

输入 5,如下:
在这里插入图片描述

1. switch 语句的注意事项

(1)去掉 break
如果把里面的 break 语句都去掉,那么该 switch 语句会根据你选择的标签一直向下执行,直到该 switch 语句结束。如下:
在这里插入图片描述

(2)default 可以没有
在 switch 语句中,如果没有 default,且没有对应的标签,那么直接跳过该 switch 语句,执行下一条语句。如下:
在这里插入图片描述

(3)类型限定
switch 后圆括号中只能是整型表达式,case 后的标签只能是整形常量表达式。字符也是整型,也可以使用字符进行选择和标签。

六、while 循环

while 循环的一般格式如下:
while (条件判断)
{
  循环体
}

如下代码打印 1 - 10:
a
在上述代码中,只要满足条件 i <= 10,那么就执行循环体,然后继续判断,再执行循环体,如此反复,直到不满足条件,也就是条件为假。其中,int i = 1 称为初始化循环变量,i <= 10 称为条件判断,++i 称为更新循环变量。剩余部分就是每次循环需要完成的任务。

while 循环的逻辑如下图所示:
在这里插入图片描述

七、for 循环

for 循环的逻辑和 while 循环一样,但是它的初始化循环变量、条件判断和更新循环变量三个步骤是放在一起的,而 while 循环是分开的。

如下代码,打印 1 - 10:
在这里插入图片描述
上述代码中,圆括号中的三个部分使用分号隔开,且初始化循环变量 i = 1,只在进入 for 循环后执行一次。后面就是判断条件、循环体和更新循环变量,然后再次判断条件,直到条件不满足,如此反复。

1. for 循环的变体

for 循环的变体实际上就是圆括号中三个表达式的省略,可以省略其中的任意个,但是两个分号需要保留。如下两个代码,还是打印 1 - 10:
在这里插入图片描述

在这里插入图片描述
前一个代码把初始化循环变量放在了 for 循环前面,而后一个代码把更新循环变量放在了循环体中。

**注意:**如果省略了判断条件,那么默认为真,也就是该循环一直执行,除非使用 break 语句跳出。如下代码:
在这里插入图片描述

八、do - while 循环

do - while 循环的逻辑与前面两个循环稍有差异,该循环先执行一遍循环体,然后再判断条件。如下代码,打印 1 - 10:
在这里插入图片描述
该循环的逻辑如下:
在这里插入图片描述

九、break 和 continue 语句

在 C 语言中,break和continue语句都用于控制循环的执行流程,但它们的作用有所不同。

1. break

break 语句用在循环中,可以跳出离它最近的当前循环,如下代码:
在这里插入图片描述
由于该 while 循环的判断条件恒为真,该循环本来该是一个死循环,但是里面有一条 if 条件语句,当 i 为 5 时,执行 break 跳出循环。

break 语句还可以用在前面所讲述的 switch 语句中,其作用是当执行完对应标签的语句时,跳出 switch 语句。

2. continue 语句

continue 语句只能在循环中使用,其作用是跳过本次循环体的剩余语句,进入下一次循环。如下代码:
在这里插入图片描述
可以看到上述代码中并没有打印 5,倘若没有 continue 语句,那么该代码的运行结果应该是打印 1 - 10。当 i 为 5 时,执行 continue 语句,跳过 printf(),进行下一次条件判断。

十、嵌套循环

嵌套循环就是一个循环里面包含着另一个循环,如果我们要打印 1 - 100,且 10 个数字为一行,那么就需要使用嵌套循环。外层循环控制行,内层循环控制列,如下代码:
在这里插入图片描述
外层循环 10 次,对应 10 行,内层循环也是 10 次,对应每行 10 列。变量 n 需要在外面定义,因为整个嵌套循环它都在变化,若在内部定义,则每次外层循环 n 都要被重新初始化。

十一、goto 语句

在 C 语言中使用 goto 语句可以转到代码的任何地方,它是一种无条件跳转语句,其使用格式为:
goto 标签名;
标签名: 语句;

倘若我们继续使用上面的打印 1 - 100 的代码,但是打印到 50 的时候就停止打印,这个时候就需要使用 goto 语句。如果使用 break 语句的话,需要使用两次,因为 break 语句只能跳出离它最近的当前循环。如下代码:
在这里插入图片描述
可以看到上述代码只打印 1 - 50,当 n 为 51 时,goto 语句跳转打印 Bye. 。倘若使用 break 需要判断两次,如下:
在这里插入图片描述

注意: 由于 goto 语句会破坏代码的逻辑性,一般不再代码中使用 goto 语句。但是从多个嵌套循环中跳出的时候,通常需要使用 goto 语句。


网站公告

今日签到

点亮在社区的每一天
去签到