浅谈C语言分支循环结构(2)

一. break语句

1.1 适用范围:

只能用于循环while, for, do while)和switch语句中。

1.2 作用:

1.2.1 在循环中的作用:

直接终止当前循环,不再进行后续迭代;但在嵌套循环中,break仅终止最近一层的循环

1.2.2 在switch语句中的作用:

防止“case穿透”(即执行完一个case后继续执行下一个case)     

1.3 while循环中的break

1.3.1 代码演示

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

1.3.2 代码分析

       程序从main函数进去之后,先创建一个变量i并初始化为0,接着来到while循环语句这里,进行条件判断,看i是否满足条件(如果满足条件就进入while循环里面,执行循环体;如果不满足条件,就不进入循环体里面,直接到 return 0;结束程序的运行),当然我们这里  (i==0;)小于10,满足判断条件,进去了while循环里面接着又判断i是否会等于5(等于5则执行break,跳出循环,结束程序运行;不等于5则不必理会该语句,跳过它,执行printf语句,再执行i++语句)当然我们这i==0;不执行if语句,直接执行printf 语句,再执行i++语句。这时屏幕上会打印0,i也由0自增成了1;然后代码又跳到while(i<10)这里进行条件判断,(i==1)<10,满足条件,进入while循环里面,(i==1)!=5,跳过if语句,执行printf语句,屏幕上打印1,再执行i++语句,i变成2。以此类推,时当i自增到5,(i==5)<10,满足条件进入while循环,这时满足if语句的条件,会进入if语句里面执行break;语句,执行break;语句直接会跳出while循环,来到return 0;这里结束程序的运行。所以屏幕上会打印 0 1 2 3 4

1.4 for循环中的break

1.4.1 代码演示

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

1.4.2 代码分析

参照1.3.2代码分析,执行逻辑一样。

1.5 do while 循环中的break 

1.5.1 代码演示

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

1.5.2 代码分析

        程序从main函数进去之后,先创建一个变量i并初始化为0,接着来到do语句这里,直接进去do语句里面,然后判断i是否会等于5(等于5则执行break,跳出循环,结束程序运行;不等于5则不必理会该语句,跳过它,执行printf语句,再执行i++语句),当然我们这i==0;不执行if语句,直接执行printf 语句,再执行i++语句。这时屏幕上会打印0,i也由0自增成了1;,然后来到while(i <10);这里,这时(i==1)<10,满足条件,又进去do语句里面,这时(i==1)不满足if语句的条件,直接跳过,去执行printf语句,屏幕上会打印1,再去执行i++语句,i变成了2。以此类推,当i自增到(i==5)时,(i==5)<10,满足条件,再一次进入do 语句,这时(i ==5)满足if语句的条件,代码进入if语句里面,执行break;语句,跳出 do while循环,来到return 0;这里,程序结束运行,屏幕上会打印 0 1 2 3 4 

1.6嵌套循环中的break

1.6.1 代码演示

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

1.6.2 代码分析

       程序从main函数进去之后,先创建一个变量i并将其初始化为0来到for循环这,这时i被赋值为1,小于5,满足循环条件,进入第一个for循环内部创建一个变量j,并将其初始化为0来到第二个for循环这,j被赋值为1,小于5,满足循环条件进入第二个for循环内部j这时为1,不满足if表达式的条件,直接来到printf这,打印i=1  j=1完成之后,j自增为2,又来到第二个for循环这,2<5,进入循环,不满足if表达式,直接来到printf这,打印i=1  j=2完成之后,j自增为3,又来到第二个for循环这,2<5,进入循环,满足if表达式,执行break语句,跳出第二个for循环来到第一个for循环这,i自增为2,2<5,进入循环内部,又创建一个变量j,并将其初始化为0,,来到第二个for循环这,j被赋值为1,小于5,满足循环条件进入第二个for循环内部,j这时为1,不满足if表达式的条件,直接来到printf这,打印i=2  j=1。完成之后,j自增为2,又来到第二个for循环这,2<5,进入循环,不满足if表达式,直接来到printf这,打印i=2  j=2。完成之后,j自增为3,又来到第二个for循环这,2<5,进入循环,满足if表达式,执行break语句,跳出第二个for循环,来到第一个for循环这,i自增为3。以此类推,最终打印的结果如上图所示。

1.7 switch 语句里面的break 

1.7.1 代码演示(基础版)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int day = 0;
	while (scanf("%d", &day) != -1)
	{
		switch (day)
		{
		case 1:
			printf("工作日\n");
			break;
		case 2:
			printf("工作日\n");
			break;
		case 3:
			printf("工作日\n");
			break;
		case 4:
			printf("工作日\n");
			break;
		case 5:
			printf("工作日\n");
			break;
		case 6:
			printf("休息日\n");
			break;
		case 7:
			printf("休息日\n");
			break;
		default:
			printf("输入的信息有误,请从新输入:\n");
			break;
		}
	}
	return 0;
}

1.7.2 代码演示(进阶版)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int day = 0;
	while (scanf("%d", &day) != -1)
	{
		switch (day)
		{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
			break;
		case 6:
		case 7:
			printf("休息日\n");
			break;
		default:
			printf("输入的信息有误,请从新输入:\n");
			break;
		}
	}
	return 0;
}

1.7.3 代码分析

      程序从main函数进入以后,先创建一个变量day并将其初始化为0来到while循环,使用scanf读取用户输入,尝试将输入解析为整数并存入day,这时如果输入成功,scanf 返回1,循环继续,如果输入失败或遇到文件结束符,scanf返回-1,循环终止;读取成功时,进入循环内部,来到switch分支判断,根据不同的day选择不同的分支;(case 1-5:输出 工作日\n, break跳出switch。)(case 6-7:输出 休息日\n, break跳出switch。)输入不符合的数字会进入default语句,屏幕上会打印输入的信息有误,请重新输入:每次break结束后,回到while循环开头,继续等待输入;当用户触发EOF或输入错误时,循环结束,执行return 0,退出程序。

注:用户输入的数据只能为数字,如果是非数字,scanf无法解析,返回值为0,不等于-1,也符合循环的条件,将进入循环体里面,但是因为输入的是非数字,day的值未被改变,还是上一个day的值,输出的还是上一个day所反应的信息,然后又再一次来到while循环这里,因为缓存区里的无效数据未被清除,保留了上一个非数字,scanf无法解析,返回值为0,不等于-1,也符合循环条件,一直循环往复,导致陷入死循环。

二.continue语句

2.1适用范围:

循环内部(while , for , do while )

2.2 作用:

while循环:continue 跳过本次循环中continue后面的代码,直接进入下一次循环条件判断部分

for循环:使程序跳过当前迭代中continue之后的部分,直接进行下一次迭代。

do while 循环:跳过本次循环中continue之后的代码,回到循环条件判断出。

2.3 while循环中的continue

2.3.1 代码演示(打印1~50之间5的倍数的数字)

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

                                                                                                                                         2.3.2 代码分析       

       程序从main函数进去,先创建一个变量i,并将其初始化为0,来到while循环这,进行条件判断,因为0<50,进入循环内部,i自增为1,因为(1%5==1)为非0,表达式为真,进入 if语句,执行continue语句,跳过continue语句后面的代码,直接来到循环条件判断部分,因为1<50,进入循环内部,i自增为2,因为(2%5==2)为非0,表达式为真,进入if语句,执行continue语句,跳过continue语句后面的代码,直接来到循环条件判断部分。以此类推,当i自增为5,10,15,20,25,30,35,40,45,50的时候(i%5==0)不再满足if语句,也不再进入if语句,不执行continue语句,执行printf语句,屏幕上将打印5,10,15,20,25,30,35,40,45,50这些数字。 

2.4 for循环中的continue

2.4.1 代码演示

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

  

  2.4.2 代码分析                                                                                                                     程序从main函数进入以后 , 先创建一个变量i,并将其初始化为0,来到for循环这,将i赋值为1,小于50,进入for循环内部,因为(1%5==1)为非0,满足if语句判断条件,执行continue语句,跳过continue语句后的代码,直接来到变量调整部分(i++),i变成2。以此类推,当i的值为5,10,15,20,25,30,35,40,45 时if语句不再执行,直接执行printf语句,屏幕上会打印 5,10,15,20,25,30,35,40,45             

2.5 do while 循环中的continue                                                              

2.5.1 代码演示                                                                                                                   

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

                                                                                                                                                                                                                                                                                        2.5.2 代码分析 

        程序从main函数进入以后 , 先创建一个变量i,并将其初始化为0,然后直接进入do while循环内部,i自增为1,因为(1%5==1)为非0,满足if语句,执行continue语句,跳过continue后面的代码,直接来到循环条件判断处,因为 (1<50)  进入循环内部,i自增为2,因为(2%5==2)为非0,满足if语句,执行continue语句, 跳过continue后面的代码,直接来到循环条件判断处,因为 (2<50),进入循环内部。以此类推,i的值为5 ,10 ,15 ,20 ,25 ,30 ,35 ,40 ,45 ,50,不满足if语句,直接执行printf语句,屏幕上会打印 5 ,10 ,15 ,20 ,25 ,30 ,35 ,40 ,45 ,50。    

2.6 continue 执行的差别   

       while循环中,当i自增到49时,执行continue语句后,来到循环条件判断处因为(49<50)进入循环内部,i由49自增到50,不满足if语句的执行条件,不会执行continue语句,执行printf语句,屏幕上会打印50;在for循环中, 当i自增到49时,执行continue语句后,来到变量调整部分i由49自增到50,因为(50<50)显然不成立,不在进入for循环内部,直接来到return 0这里,结束程序的运行,最后屏幕上打印的数字为45在do while 循环中,当i自增到49时,执行continue语句后,来到循环条件判断处因为(49<50)进入循环内部,i由49自增到50,不满足if语句的执行条件,不会执行continue语句,执行printf语句,屏幕上会打印50。                                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值