分支循环(下)(二)

9 、break和continue语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,此时需要用到C语言提供的break和continue关键字。

break只能用于循环和switch语句中,continue只能用于循环中

break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环(注意:break语句只能跳出一层循环)

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

9.1while循环中的break和continue

9.1.1break举例

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

结果:

代码分析:

上述代码打印了1 2 3 4后,当i==5时,循环执行break语句,循环结束,跳出循环。

所以break的作用就是永久的终止循环,只要break被执行,break外的第一层循环就终止了

因此,以后在循环中,如果想在某种条件下终止循环,则就可以使用break循环。

9.1.2continue举例

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

示例:

cpp 复制代码
//while循环中的continue
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			continue;//当i==5时,就执行continue
		}
		printf("%d ", i);
		i += 1;
	}
	return 0;
}

结果:

执行上述代码时,虽然结果输出了1 2 3 4,但是代码一直陷入了死循环的状态,这是因为:i==5时,就执行continue,直接跳过了continue之后的代码,而直接去执行while后边的代码:i<=10;因为此时i==5,所以去执行i<=10时,始终是真的结果,所以这就是为什么代码会陷入死循环状态的原因。

continue的作用就是可以帮助我们跳过某一次循环continue后边的代码,直接到循环的判断部分,尽心下一次循环的判断,如果循环的调整是在continue后边的话,可能会造成死循环。

9.2for循环中的break和continue

9.2.1break

for循环break与while中的break一样,是用来终止循环的。不管循环需要执行多少次,只要执行了break语句,循环就彻底终止,跳出循环。

cpp 复制代码
//for循环中的break
#include<stdio.h>
int main()
{
	for (int i = 1; i <= 6; i++)
	{
		if (i == 3)
			break;
		printf("%d ", i);
	}
	return 0;
}

结果:

9.2.2continue

cpp 复制代码
//for循环中的continue
#include<stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 6;i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

结果:

对于for循环中的continue语句,continue语句作用是跳过本次循环后的代码,直接去到循环的调整部分。(这是与while中的continue语句的区别)

注意:do... while语句中的break语句和continue语句的作用与while循环中的一样

9.3 总结:

while中的continue和for中的continue有区别:

对于while中的continue,continue被执行后,就去执行while中的判断语句。

而对于for中的continue,continue被执行后,就去执行for后的调整语句。

break只能用于循环和switch语句中;而continue只能用于循环中。

10、循环的嵌套

目前学习了三种循环的方法:for循环、while循环 、do while循环,C语言中是支持这三种循环之间相互嵌套的。

练习:找出100~200之间的素数,如果是素数,直接打印在屏幕上(素数即质数,只能被1和本身整数的数字)

思路:假设100~200之间任意的一个数为num,那么可以让num去除2~num-1之间中的数,如果num整除了2~num-1中的数(即:num%...==0)

那num就不是质数。

代码实现:

cpp 复制代码
//循环嵌套求100~200之间的质数
#include<stdio.h>
int main()
{
	int x = 100;
	int flag = 1;//可以标记该数是不是质数,如果是质数,flag=1,如果不是质数,则flag=0
	//拿到100~200之间的数字
	for (x = 100; x <= 200; x++)
	{
		flag = 1;
		//拿到2~num-1的数字
		for (int j = 2; j <= x - 1;j++)
		{
			if (x % j == 0)
			{
				flag = 0;//说明当前该x不是质数
			}
		}
		if (flag == 1)
		{
			printf("%d\n", x);
		}
	
	}
	return 0;
}

结果:

11、goto语句

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

注意:goto语句只能在本函数内部进行跳转。

示例代码:

cpp 复制代码
//goto语句
#include<stdio.h>
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");
next:
	printf("跳过了haha的打印\n");

	return 0;
}

结果:

goto语句如果使用不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程。

示例:

cpp 复制代码
//goto语句使用不当会导致死循环
#include<stdio.h>
int main()
{
again:
	printf("11");
	printf("22");
	goto again;
	return 0;
}

上述代码在执行的过程中会导致死循环:

因此,在写代码的时候,尽量不适用goto语句。

但是goto语句也不是一无是处,比如:在多层循环的代码中,如果想快速跳出循环,那么此时使用goto语句就非常方便。

示例:

cpp 复制代码
//在多层for循环中使用goto语句
#include<stdio.h>
int main()
{
	for (...)
	{
		for (..)
		{
			,,,,
		}
		,,,
			for (..)
			{
				if (事件发生)
					goto  error;
			}
	}
error:
	....
	return 0;
}

在上述多层嵌套循环中,使用goto语句就非常方便(因为:使用goto语句就可以一步跳出循环,如果要使用break语句进行跳出循环的话,一个break只能跳出一层for循环,所以在多层嵌套循环中,使用goto语句就非常方便)

相关推荐
CSharp精选营15 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假4 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠5 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦12 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
LDR00613 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术13 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园13 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob13 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
小小工匠13 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
源分享13 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm