概述
1、break语句
break语句是强制结束循环,例如for循环中使用break:
for (表达式1;表达式2;表达式3){
语句1;
break;
语句2;
}
其流程图如下:
从流程图中可以看到,循环有2个出口,分别是表达式2的值为“假”或执行了break语句,这两个条件有一个满足都会结束循环,有时候需要判断循环时如何结束的。
例1:判断素数
输入正整数m,判断它是不是素数。
#include <stdio.h>
#include <math.h>
int main(void)
{
int i, limit, m;
printf("Enter a number:");
scanf("%d", &m);
if (m <= 1){ /*小于等于1的数不是素数*/
printf("No!n");
} else if (m == 2){ /*2是素数*/
printf("%d is a prime number!n", m);
} else { /*其他情况:大于2的正整数*/
limit = sqrt(m)+1;
for (i=2; i<=limit; i++){
if (m%i == 0){
break; /*若m能被某个i整除,则m不是素数,提前结束循环*/
}
}
if (i > limit){ /*若循环正常结束,说明m不能被任何一个i整除*/
printf("%d is a prime number!n", m);
} else { /*m不是素数*/
printf("No!n");
}
}
return 0;
}
Enter a number:13
13 is a prime number!
Enter a number:27
No!
本例题是判断素数的问题。素数是只能被1和它本身整除的数,规定2是最小的素数。一般来说需要判断这个正整数m不能被区间[2,m-1]的所有的数整除才能是素数,但是实际上这种算法做了很多多余的计算。其实这个区间只要是[2, m sqrt{m} m]就可以了。这个是可以证明的。下面是证明过程。
证明:设m是大于2的自然数,且m不能被区间 [ 2 , m ] [2, sqrt{m}] [2,m]的任意整数整除。
假设m不是素数,那么必有一个大于 m sqrt{m} m的整数,设为k,使得 m / k m/k m/k的余数为0,设商为q。
那么有 m = q k m=qk m=qk,即 m / q m/q m/q的余数也为0,m也能被q整除,所以有 q > m q>sqrt{m} q>m。故 m = q k > m m = m m=qk>sqrt{m}sqrt{m}=m m=qk>mm=m,矛盾,即m是素数。
上面的程序就是使用这个算法来判断是不是素数,因为2是最小的素数比较特殊,所以单独判断。且该程序将区间选择为了
[
2
,
m
+
1
]
[2, sqrt{m}+1]
[2,m+1],这是因为平方根的运算结果是浮点数,而浮点数在计算机中是近似表示的,不能够用于精确比较,为了避免因为这个问题而产生的错误,将区间扩展了一下。
break语句用来跳出循环,因为只要能被一个数整除,那么它一定不是素数,就可以不用判断了,提前结束循环;若是素数,则循环会正常结束,正常结束时肯定有i>limit。最后判断循环是正常结束的还是break结束的,来判断是不是素数。
2、continue语句
continue语句的作用是跳过循环体中countinue后面的语句,继续下一次循环,for结构中使用continue语句的流程图如下:
3、break与continue语句总结
break语句在循环语句中表示直接跳出循环,执行循环的下一条语句;而continue语句是跳出本次循环,执行下一次循环,若是for语句则跳到表达式3开始执行,若是while语句,跳到while的判断条件处执行。
break语句还可以用于switch-case语句中,表示跳出switch语句;而continue只能用于循环语句。
例2:猜数游戏
输入你所猜的整数(假定1~ 100),与计算机产生的被猜数比较,若相等,显示猜中;若不等,显示与被猜数的大小关系,最多允许猜7次。
/*猜数游戏*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int count = 0, flag, mynumber, yournumber;
srand(time(0)); /*设定随机数的产生与系统时钟关联*/
mynumber = rand()%100+1; /*计算机随机产生一个1~100之间的被猜数*/
flag = 0; /*flag的值为0表示没猜中,为1表示猜中了*/
while (count < 7){ /*最多能猜7次*/
printf("Enter your number:"); /*提示输入你所猜的整数*/
scanf("%d", &yournumber);
count++;
if (yournumber == mynumber){ /*若相等,显示猜中*/
printf("Lucky You!n");
flag = 1;
break;
} else if (yournumber > mynumber){
printf("Too bign");
} else {
printf("Too smalln");
}
}
if (flag == 0){ /*超过7次还没猜中,提示游戏结束*/
printf("Game Over!n");
}
return 0;
}
Enter your number:50
Too small
Enter your number:75
Too big
Enter your number:67
Too small
Enter your number:70
Too big
Enter your number:68
Too small
Enter your number:69
Lucky You!
该程序中使用了产生随机数的函数:rand()函数。若要产生一个随机数,还需要使用srand()函数用来让随机数与系统时钟相关联;time也是标准库的函数,返回的是当前的时间,这样得到的随机数就比较正常。因为计算机的随机数实际上是一组伪随机数。
0~100之间的整数,用二分法来猜,最多7次肯定能够猜出。
参考 C语言程序设计(第4版)/何钦铭,颜晖
例题及课后习题参考程序https://gitee.com/sgxgitee/mooc-c
最后
以上就是无奈大山为你收集整理的C语言-break与continue语句的全部内容,希望文章能够帮你解决C语言-break与continue语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复