前面讲到的循环体,貌似能解决生活中的很多问题,毕竟生活中很多事情是在重复的。但有时候也会有些小插曲,比如你在日复一日的上班,但某一天又特殊的事情你失业了,不就没班上了吗,那就得跳出那个上班的循环了,C语言也有这样的跳出机制。
在前面学习switch语句的时候,接触过break,就是跳出switch,在循环结构中,break也有相同的作用,跳出循环,管你循环条件是真是假。
程序示例1:累加到100,到100强制跳出while循环
#include
int main()
{
int i = 1;
int sum = 0;
while (1)
{
sum = sum + i;
if (i == 100)
break; //跳出while循环
i++;
}
printf("i = %d\n", i);
printf("sum = %d\n", sum);
return 0;
}
程序示例2:猜数字游戏
#include
int main()
{
int target = 30;
int input= 0;
for(;;)
{
printf("请输入一个数字:");
scanf_s("%d", &input);
if (input == target)
break;
}
printf("target = %d\n", target);
return 0;
}
如果switch与循环嵌套在一起怎么办,break怎么跳?
1、 就近原则:break离哪个关键字近,就跳出哪个。
2、什么是关键字:switch、 while 、for这种的就是关键字。
程序示例3:判断10以内的奇数与偶数
#include
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
switch (i % 2)
{
case 0:
printf("%d 是偶数\n", i);
break; //跳出switch
case 1:
printf("%d 是奇数\n", i);
break; //跳出switch
}
}
return 0;
}
程序示例3:
#include
int main()
{
int i = 0;
int k = 0;
printf("请输入一个数字\n");
scanf_s("%d",&i);
switch (i % 2)
{
case 0:
printf("case 0\n");
for (k = 0; k < 2; k++)
if (k)
break;//跳出for,那case 0就没有break了,满足case 0的时候case 1也会执行
case 1:
printf("case 1\n");
break;
}
return 0;
}
输入奇数的时候只打印case1,输入偶数,打印了case 0 和case1
咋一看continue不是继续的意思吗,这么跟break扯上关系了?
continue:在循环体中,continue之后的语句不用执行了,进入下一轮条件判断,重新循环;
break是结束整个循环,
continue只是结束当前循环条件中的语句,continue之后的语句就不用执行了。
continue的作用效果可以比较程序示例4和程序示例5的输出结果
程序示例4:
#include
int main()
{
int i = 0;
for (i = 1; i <= 5; i++)
{
printf("序列%d开始\n",i);
printf("序列%d结束\n", i);
}
return 0;
}
输出结果
序列1开始
序列1结束
序列2开始
序列2结束
序列3开始
序列3结束
序列4开始
序列4结束
序列5开始
序列5结束
把示例4的代码稍微修改一下,加个continue,观看输出结果。
程序示例5:
#include
int main()
{
int i = 0;
for (i = 1; i <= 5; i++)
{
printf("序列%d开始\n",i);
continue; //循环体后面的内容不用执行了,重新去判断条件
printf("序列%d结束\n", i);
}
return 0;
}
输出结果是
序列1开始
序列2开始
序列3开始
序列4开始
序列5开始
练习:打印1000以内能被7整除的整数,并统计数量
分析:
1使用循环体遍历1--1000;
2、使用分支选择结构、判断能被7整除的数,能整除的打印并统计,不能整除的直接判断下一个数
程序示6:
#include
int main()
{
int i = 0;
int n = 0;
for (i = 0; i <= 1000; i++)
{
if (i % 7)
continue; //如果i%7不等于0,说明不能被7整除,那就直接判断下一个数
printf("%d能被7整除\n", i);
n++;
}
printf("1000以内能被7整除的数共有%d个\n", n);
return 0;
}