C语言 —— 分支与循坏


在这里插入图片描述

1.if语句

1.1 if
if语句的语法形式如下:

 if ( 表达式 )
		语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不
是0,则语句执行。
1.2 else
如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表
示呢?
这里就需要if…else… 语句了,语法形式如下:

 if ( 表达式 )
 		语句1
 else
 		语句2

2.关系操作符

C 语言用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符就称
为“关系运算符”(relational operator),主要有下面6个。
• > 大于运算符
• < 小于运算符
• >= 大于等于运算符
• <= 小于等于运算符
• == 相等运算符
• != 不相等运算符
下面是一些例子。

1 a == b;
2 a != b;
3 a < b;
4 a > b;
5 a <= b;
6 a >= b;

3.条件操作符

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

1 exp1 ? exp2 : exp3

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

4.逻辑操作符

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
注:C语言中,非0表示真,0表示假

4.1 逻辑取反运算符 !
逻辑反操作
比如,我们有一个变量叫flag ,如果flag为假,要做一个什么事情,就可以这样写代码:

#include <stdio.h>
int main()
{
	int flag = 0;
	if (!flag)
	{
		printf("do something\n");
	}
	return 0;
}

如果flag 为真, !flag 就是假,如果flag 为假, !flag 就是真
所以上面的代码的意思就是flag 为假,执行if语句中的代码。

4.2 逻辑与运算符 &&
在这里插入图片描述
&& 就是与运算符,也是并且的意思, && 是一个双目操作符,使用的方式是a&&b , && 两边的表达
式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。
比如:如果我们说月份是3月到5月,是春天,那使用代码怎么体现呢?

int month = 0;
scanf("%d", &month);
if (month >= 3 && month <= 5)
{
	printf("春季\n");
}

这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足。

4.3 逻辑或运算符 ||
在这里插入图片描述
|| 就是或运算符,也就是或者的意思, || 也是一个双目操作符,使用的方式是a || b , ||
两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
比如:我们说一年中月份是12月或者1月或者2月是冬天,那么我们怎么使用代码体现呢?

int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("冬季\n");
}

5.switch语句

除了if 语句外,C语言还提供了switch 语句来实现分支结构
switch 语句是一种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重
的else if 改成更易用、可读性更好的形式。

switch (expression) {
	case value1: statement
	case value2: statement
	default: statement
}

上面代码中,根据表达式expression 不同的值,执行相应的case 分支。如果找不到对应的值,
就执行 default 分支。
注:
• switch 后的expression 必须是整型表达式
• case 后的值,必须是整形常量表达式

6.while循坏

C语言提供了3种循环语句, while 就是其中一种,接下来就介绍一下while 语句。
while 语句的语法结构和if 语句非常相似。
6.1 if和while的的对比

if(表达式)
	语句;


while(表达式)
	语句;//如果循环体想包含更多的语句,可以加上大括号

你可以对比来看一下,具体写个代码吧

//代码1
int main()
{
	if (1)
		printf("hehe\n");	//if后边条件满足,打印一次hehe

	return 0;
}
//代码2
int main()
{
	while (1)
		printf("haha\n");	//while后边条件满足,死循环的打印haha
		
	return 0;
}

这就是他们的区别,while语句是可以实现循环效果的。

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

7.for循坏

7.1 语法形式
for 循环是三种循环中使用最多的, for 循环的语法形式如下:

for(表达式1; 表达式2; 表达式3)
	语句;//如果循环体想包含更多的语句,可以加上大括号

表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整

7.2 for循坏的执行流程
首先执行 表达式1 初始化循环变量,接下来就是执行 表达式2 的判断部分, 表达式2 的结果如果
==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式
3 ,调整循环变量,然后再去表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继
续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循
环。

7.3 while循坏和for循坏的对比
在这里插入图片描述
在这里插入图片描述
for 和while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是for 循环的三个部
分非常集中,便于代码的维护,而如果代码较多的时候while 循环的三个部分就比较分散,所以从形
式上for 循环要更优一些。

9.break和continue语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中
提供了break 和continue 两个关键字,就是应用到循环中的。
• break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执
行。
• continue 的作用是跳过本次循环中continue 后边的代码,在for 循环和while 循环中有所差异的。

9.1 while循坏中的break和continue
9.1.1 break举例

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//当i等于5后,就执行break,循环就终止了
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

执行的结果:
在这里插入图片描述
打印了1,2,3,4后,当i等于5的时候,循环在break 的地方终止,不再打印,不再循环。
所以break 的作用就是永久的终止循环,只要break 被执行, break 外的第一层循环就终止了。
那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。

9.1.2 continue举例
continue 是继续的意思,在循环中的作用就是跳过本次循环中continue 后边的代码,继续进行
下一次循环的判断。
上面的代码,如果把break 换成continue 会是什么结果呢?

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		//当i等于5后,就执行continue,直接跳过continue的代码,去循环的判断的地方
		//因为这里跳过了i = i+1,所以i一直为5,程序陷入和死循环
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

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

9.2 for循环中的break和continue
9.2.1 break举例
其实和while 循环中的break 一样, for 循环中的break 也是用于终止循环的,不管循环还需
要循环多少次,只要执行到了break ,循环就彻底终止,我们上代码。

#include <stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

运行结果:
在这里插入图片描述
break 的作用是永久的终止循环,未来我们在某个条件发生的时候,不想再继续循环的时候,就可以
使用 break 来完成。

9.2.2 continue举例
上面的代码,如果把break 换成continue 会是什么结果呢?

#include <stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;//这里continue跳过了后边的打印,来到了i++的调整部分
		printf("%d ", i);
	}
	return 0;
}

在这里插入图片描述
所以在for 循环中continue 的作用是跳过本次循环中continue 后的代码,直接去到循环的调
整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用
continue 来实现。

在这里我们也可以对比一下while 循环和for 循环中continue 的区别:

在这里插入图片描述
9.3 do while循环中的break和continue
do.while 语句中的break 和continue 的作用和while 循环中几乎一模一样,大家下来可以自行测试并体会。

#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i += 1;
	} while (i <= 10);

	return 0;
}
#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i += 1;
	} while (i <= 10);

	return 0;
}

10.循坏的嵌套

前面学习了三种循环while , do while , for ,这三种循环往往会嵌套在一起才能更好的解决
问题,就是我们所说的:循环嵌套,这里我们就看一个例子。

参考:
链接:https://blog.csdn.net/fj123789/article/details/139564418?spm=1001.2014.3001.5501

11.goto语句

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

#include <stdio.h>
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");
next:
	printf("跳过了haha的打印\n");
	return 0;
}

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

for(...)
{
	for(...)
	{
		for(...)
		{
			if(disaster)
				goto error;
		}
	}

}

error:
	//...

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

  • 34
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无世世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值