改变循环的执行流程
无论哪种循环语句,正常执行情况下都是由“循环条件”来决定是否结束循环的执行。但在实际程序设计中有时需要根据循环执行情况的变化而“提前”结束循环执行或跳过本次循环的剩余语句进入下一次循环的情况。C语言使用break语句和continue语句解决这些问题。
break语句
1. break语句
break语句可以应用循环语句中,用于跳出循环体。下面对break语句的使用进行详细说明:
(1) 一般形式:break;
(2) break语句只能用于switch、while、do-while和for语句中。
(3) break语句的作用是结束“直接包含”它的循环或switch语句的执行,即它只能跳出包含它的一层语句结构。当break出现循环语句的嵌套结构时,只能跳出包含它的最内层循环;当break出现在循环语句与switch语句的嵌套结构时,同样只能跳出包含它的最内层的switch语句或循环语句。
例:输入一个正整数判断并输出它是否是素数。
思路分析:素数也称为质数,其数学定义为:一个大于1的正整数,除了1和它本身外,不能被整除以其他正整数。
根据定义,该问题可以采用穷举法进行实现,即对于正整数n,从2开始到√n依次尝试每个数是否能够被n整除,如果存在能够这样的数,则n不是素数;如果不存在这样的数,则n是素数。
进一步分析可以知道,在找到第一个可以整除的数后,无需继续检查,直接结束循环即可。
参考答案:
代码语言:javascript复制 #include <stdio.h>
#include <math.h>
int main()
{
int i, n, is_prime, k;
printf("Input a number(>1): ");
scanf("%d", &n);
is_prime = ; //假设n是素数
k = sqrt(n); //计算n的平方根
for(i=; i<=k; i )
{
if(n%i == )
{
is_prime = ; //n不是素数
break; //发现第一个因子就可以确定不是素数,直接结束循环
}
}
if(is_prime)
{
printf("%d is prime numbern", n);
}
else
{
printf("%d is not prime numbern", n);
}
return ;
}
结果示例:
continue语句
2. continue语句
有时并不希望终止整个循环的执行,而只是提前结束本次循环迭代,进入下一次循环迭代。这时可以使用continue语句,其使用方法如下:
(1) 一般形式:continue;
(2) continue语句只能用于while、do-while和for语句中。
(3) continue语句的作用是结束循环体的本次执行,即跳过循环体中continue语句之后的其它语句,转去判定循环条件,决定能否继续执行循环。
用于while和do-while语句中时,跳过循环体中continue语句之后的其它语句后,直接判断循环条件是否成立;而用于for语句中时,跳过循环体中continue语句之后的其它语句后,先执行表达式3,然后再去判断循环条件是否成立。
例:统计在100到1000之间不能被7整除的整数的个数。
思路分析:解决该问题需要对指定范围中的每一个整数进行检查,如果不能被7整除,就进行计数加1;若能被7整除,则不加1。
参考答案:
代码语言:javascript复制#include <stdio.h>
int main()
{
int i, count;
count = ; //计数初始为0
for(i=; i<=; i )
{
if(i% == )
{
continue; //如果整除7,跳过计数语句,继续检查下一个数
}
count = count ; //计数加1
}
printf("count=%dn", count);
return ;
}
结果示例:
goto语句
3. goto语句
goto语句也称为无条件转移语句,其一般格式如下:
goto 语句标号;
如:
label: i ;
loop: while(x<7)
C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。
goto语句通常与条件语句配合使用,可用来实现条件转移、构成循环和跳出循环体等功能。
但是,在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。
例:使用goto语句实现求1 2 3 … 100的值。
参考答案:
代码语言:javascript复制#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=,sum=;
loop:
sum=sum i;
i ;
if(i<=)goto loop;
printf("sum=%dn",sum);
return ;
}
结果示例: