c语言离开多重循环多级break与goto

如何离开多级循环

相信大家都应该做个一个很经典的题目,叫做百钱买百鸡,这是一个很经典的关于for循环应用的题目,我们下面看到的题目与这个类似,我们需要计算出1角硬币和2角硬币和5角硬币来组成几元钱具有多少组合。废话不多说我们来开始写出下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
int one,two,five;
int x;
int exit = 0
scanf("%d",&x);

for (one = 0; one < x*10; one++) {
for (two = 0; two < x*10/5; two++) {
for (five =0; five < x*10/2; five++) {
if (one + two*2 + five*5 == x*10) {
printf("可以用%d个一角和%d个2角和%d个五角组成%d元",one ,two ,five ,x);
exit = 1;
break;
}
}if (exit) break;
} if (exit) break;
}

}

从上面的代码我们可以看出,如果我们想在得到一组结果之后就退出所有循环,就必须使用break; , 但是我们的break只能跳出一个循环,因此我们就只能在外面的循环中进行一个判断 如果exit的值发生了改变,那么就执行判断,这样就做到了,在得到一组结果之后就退出循环,然后就结束掉整个程序,事实上多级的break是非常的不方便的,我们也可以使用goto来解决这个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int main()
{
int one,two,five;
int x;
scanf("%d" &x);
for (one = 0; one < x*10; one++) {
for (two = 0; two <x*10/2; two++) {
for (five = 0; five < x*10/5) {
if (one + two*2 + five*5 == x*10) {
printf("可以用%d个一角和%d个2角和%d个5角组成%d元",one ,two ,five ,x);
goto out;
}
}
}
}
out:
return 0;
}

这段代码没有使用break而是使用了goto,虽然goto在c语言中的名声可能不太好,但是在这种多重的循环之中非常大的适合使用goto来跳出这样多重的循环,但是也正是应为goto的存在可能会导致我们的代码让别人难以理解,所以除了在这种多级循环的场合之外尽量别使用goto。

你的支持是我最大的动力!
0%