目录
一、用while语句实现循环
二、do……while语句实现循环
while循环和do……while循环的比较
三、用for语句实现循环
四、改变循环执行的状态
1.用break语句提前终止循环
2.用continue语句提前结束本次循环
3.break语句和continue语句的区别
前言:在上一次的内容中我们介绍了选择结构,但在我们的程序中只有这两种结构是不够的,需要用到今天将要学习的循环结构。在我们的日常生活中或是在程序所处理的问题中常常会遇到需要重复处理的问题。例如:
要处理以上问题,最原始的方法是分别编写若干个相同或相似的语句或程序段进行处理。例如:统计50名同学5课成绩
//输入一个同学的5门成绩
scanf("%f %f %f %f %f",&score1,&score2,&score3,&score4,&score5);
然后再重复写49个同样的程序。这样虽然可以完成要求,但这种做法不可取,因为工作量大,程序冗长,难以阅读和维护。我们可以利用计算机提供的循环结构解决需要重复的操作。
int i=0;
while(i<=50)
{
scanf("%f %f %f %f %f",&score1,&score2,&score3,&score4,&score5);
i++;
}
我们可以看到一个while语句,就解决了需要重复执行50次程序的问题。
注意:顺序结构、选择结构和循环结构是结构化程序设计的3种基本结构,它们是各种复杂程序的基本构成单元。熟练掌握选择结构和循环结构的概念和使用是进行程序设计最基本的要求。
//while语句的一般形式
while(表达式)
语句
“语句”就是循环体。循环体只能是一个语句,可以一个简单的语句,也可以是复合语句(用花括号括起来的若干语句)。执行循环体的次数是由循环条件控制的,循环条件就是一般形式中的“表达式”,它也称为循环条件表达式。当表达式的值为“真”(非零值表示),就执行循环体语句;表达式值为“假”(以0表示),就不执行循环体结构。
while语句可简单的记为:只要循环条件表达式为真(即给定的条件成立),就执行循环体语句。
注意:while循环的特点是先判断条件表达式,后执行循环体语句。
如图:这个程序执行过程是:开始时变量i=1,while语句首先判断变量i是否小于或等于50.如果成立,则执行while语句后面的语句(循环体)。循环体最后的“i++”的作用,是使i的值加1,现在i的值为2,然后流程返回到while的开头,重新执行,直到i的值大于50结束循环。
//do……while语句的一般形式
do
语句
while(表达式)
注意:do……while语句的特点是,先无条件的执行循环体,然后判断循环条件是否成立。
1.while循环
#include
int main()
{
int i = 0;
int sum = 0;
scanf("%d", &i);
while (i<=10)
{
sum += i;
i++;
}
printf("sum=%d\n", sum);
return 0;
}
运行结果(两次)
2.do……while循环
#include
int main()
{
int i = 0;
int sum = 0;
scanf("%d", &i);
do
{
sum += i;
i++;
} while (i <= 10);
printf("sum=%d\n", sum);
return 0;
}
执行结果(两次)
可以看到,当输入i的值小于或等于10,二者得到的结果相同;而当i的值大于10,二者的结果就不同了,这是因为i>10(表达式的值为假)此时对于while循环来说,一次也不执行循环体,而对于do……while循环来说至少执行一次循环体。
//for语句的一般形式
for(表达式1;表达式2;表达式3)
// 初始化 判断 调整
语句
3个表达式的作用:
表达式1:循环体变量的初始化,只执行一次,可以为零个、一个或多个。例:i=1
表达式2:循环体条件表达式,用来判断是否执行循环。在每次循环执行先执行此表达式,决定时候继续执行循环。
表达式3:循环体变量的调整,执行完循环体才进行的。
说明:
1.表达式1可以省略,即不设置初始值,但表达式1后面的分号不能省略。例如:
for(;i<100;i++)
注意:由于省略了表达式1,没有对初始变量赋值,因此,要在for语句之前给循环变量赋值。
2.表达式2省略,即不用表达式2来作为循环条件表达式,不设置和检查循环的条件,也就是表达式2恒为真,循环将无止境的进行,程序死循环。例如:
for(i=1;;i++)
如前所述,用break语句可以可以是流程跳出switch结构,可以继续执行switch语句中下一个语句。break还可以用在循环结构中跳出循环体,即提前跳出循环。
#include
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
if (5 == arr[i])
{
break;
}
printf("%d ", arr[i]);
}
}
注意:break语句只能用于循环语句和switch语句之中,不能单独使用。
有时候并不希望结束整个循环的操作,只希望提前结束本次循环,而接着执行下次循环。这时可以用continue语句
#include
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
if (5 == arr[i])
{
continue;
}
printf("%d ", arr[i]);
}
}
程序分析:当arr[i]等于5时,执行continue语句,流程跳过printf函数语句,结束本次循环,然后进行循环变量的调整,只要i<10,就会接着执行下一次循环。
continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不在判断执行循环的条件是否成立。
(1)
while(表达式1)
{
语句1;
if(表达式2)
break;
语句2;
}
(2)
while(表达式1)
{
语句1;
if(表达式2)
continue;
语句2;
}
程序(1)的流程图如图5.13所示,程序(2)的流程如图5.14所示
如果双重循环,在内循环内有一个break语句,会提前终止内循环。(流程跳到内循环之外)
希望这篇博客对大家有所帮助,可以有所收获,希望各位可以点个免费赞,感谢大家的支持。
如果大家 有什么疑问或者意见,可以在评论区留言。