C语言编程第六节


分支与循环

本节继续学习分支与循环

一、break与continue语句

break与continue语句都有结束循环的作用,只是作用性质不同。在之前的学习中,我们在学习switch语句中使用过break语句,在得到想要的结果的时候就能提前结束代码。这里我们详细讲述一下break语句的内容。

  • break语句的作用:用于永久的停止循环,即只要执行到break语句,立马结束循环,继续执行下一个代码。但这里要注意break只能跳出一个循环,不能跳出所有的循环
  • continue语句的作用:只是跳过本次循环中continue后面的代码,但是不能跳出循环

1. while循环中的break与continue语句的运用

示例:打印1-10的数字

//while循环中的break语句
int main()
{
	int i = 1;

	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	}
	return 0;
}

1 2 3 4

//while循环中的continue语句
int main()
{
	int i = 1;

	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}

1 2 3 4 ——这里程序并不停止,可以观察一下上面结束代码之后会有中文,但这里没有

这里我们执行了break语句和continue语句,上面当i=5时,代码直接跳出循环,结束代码执行;但是continue只是跳过了他之后的代码,即printf("%d ", i);i++;,循环继续,因此当我得到i=5时,经过if语句判断,会直接跳过之后的代码,继续循环,因此代码会一直在循环。但如果想跳出循环,可以改成下列代码:

//while循环中的continue语句
int main()
{
	int i = 1;

	while (i <= 10)
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

2 3 4 6 7 8 9 10 11——这里就可以正常结束代码,因为我们先让i+1,就可以防止i一直是5

2. for循环中的break与continue语句的运用

示例:打印1-10的数字

//for循环中的break语句
int main()
{
	int i = 0;

	for(i=1;i<=10;i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

1 2 3 4

//for循环中的continue语句
int main()
{
	int i = 1;

	
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

1 2 3 4 6 7 8 9 10

对比for循环与while循环,在while循环中如果想结束,我们需将i++放在continue前面才能结束,但是在for循环中我们就不需要,因为for循环里面,continue后面只有printf函数,并不控制i++,所以我们这里可以结束代码

3. do-while循环中的break与continue语句的运用

示例:打印1-10的数字


//do-while循环中的break语句
int main()
{
	int i = 1;

	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

1 2 3 4

//do-while循环中的continue语句
int main()
{
	int i = 1;

	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

1 2 3 4 ——这个跟while循环中一样,并不结束代码

对比for循环与while循环,在while循环中如果想结束,我们需将i++放在continue前面才能结束,但是在for循环中我们就不需要,因为for循环里面,continue后面只有printf函数,并不控制i++,所以我们这里可以结束代码

二、循环的嵌套

学习完while、for、do-while循环后,写代码时为了满足要求,我们需要进行循环包含循环的方式,从而达到目的,这里我们介绍一下循环的嵌套

示例:打印出100-200之间的素数

分析:打印100-200的素数,那么素数定义:除了可以被1或者自身整除意外,都不能被整除
这里假设数为a,那么2到a-1的数都不能整除a

//打印出100 - 200之间的素数
int main()
{
	int a = 0;

	for (a = 100; a <= 200; a++)
	{
		int b = 0;
		int flag = 1;
		for (b = 2; b <= a - 1; b++)
		{
			if (a % b == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
			printf("%d ", a);
	}
	return 0;
}

根据上面分析,我们可以简单写出一个代码,但是要想输出素数,我们需要引入一个flag,令flag=1时,为素数;flag=0时,不是素数。这样我们根据flag的值,就可以正确输出素数。这里要注意
一: if (flag == 1) printf("%d ", a);要放在第一个for循环里面,要是放在第二个里面会输出很多相同的值,例如101,他对2 3 4 5 6 之后的所有数字都不整除,那么他就会输出99个101,没必要,所以放在第一个for循环里面
二:flag一定要在第一个for里面,不能放在外面。如果放在外面之后,100进去循环,得到他不是素数,那么之后跳出循环之后,我的flag将会一直都是0,这样后续我就判断不出素数了,因此放在第一个for循环后面,可以执行完一个循环之后,flag重新变为1

另一种代码形式(无flag)

//打印出100 - 200之间的素数
int main()
{
	int a = 0;
	int b = 0;

	for (a = 100; a <= 200; a++)
	{
		for (b = 2; b <= a - 1; b++)
		{
			if (a % b == 0)
			{
				break;
			}
		}
		if (b>a-1)//表明这个不是break跳出循环,如果跳出循环,那么b一定小于a-1
			printf("%d ", a);
	}
	return 0;
}

三. goto语句

goto语句可以实现在循环嵌套中,在重重循环中,直接跳转到return 0,虽然break也可以跳出循环,但是需要每一个循环中都要输break,并且他可以跳转到代码的任何位置,不受限制,其形式如下:

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

这样代码可以直接跳转到error后面的代码,但是要注意:不可以随意使用goto语句,否则会打乱执行流程。

示例一:

//goto语句
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");
	next:
	return 0;
}

这里直接跳过了haha的输出,只输出hehe,这里的goto后面的词没有规定,只需要前后对应就行

示例二:

//goto语句
int main()
{
next:
	printf("hehe\n");
	goto next;
	return 0;
}

这里会一直打印hehe,程序不会停止,因为会一直跳转到hehe


代码看关机小游戏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值