文章目录
分支与循环
本节继续学习分支与循环
一、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
代码看关机小游戏

525

被折叠的 条评论
为什么被折叠?



