目录
三种循环结构
·while语句
while语句属于当型循环,一般形式为:
while(循环控制表达式)
{
语句序列
}
循环控制表达式成为“循环条件”,可以是任何类型的表达式(一般为关系型或逻辑型)。表达式为真则进入循环。语句序列成为“循环体”,可以是多条语句,也可以是空语句。
注:
1.while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。
(循环体有执行0次的可能)
2.当循环体由多条语句组成时,必须用{}括起来,形成复合语句。
在循环体中一般应该包含改变循环条件表达式的值的语句,即使循环趋于结束的语句,避免造成无限循环的发生。
3.赋初值的语句的位置一定在循环前面。
如下就是一个死循环。
int i;
while(i<=100)
{
i=0; //每次循环i都被赋值为0
...
i++;
}
·do-while语句
do-while循环属于直到型循环,一般形式为:
do
{
语句序列;
}while(循环控制系统);
先执行循环体语句一次,再判别表达式的值。
注:
1.无论表达式的值是否为“真”,循环体至少执行一次。
2.在if,while语句中,表达式后面都不能加分号,do-while语句的表达式后面则必须加分号。
3.do和while之间的循环体由多条语句组成时,也必须用{}括起来组成一个复合语句,避免“死循环”的要求和while循环相同。
·for语句
for语句是C语言中最常用的循环结构之一,既可以用于循环次数确定的情况,也可以用于循环次数未知的情况,一般形式为:
for (初始化表达式; 条件表达式; 更新表达式)
{
// 循环体语句
}
每个表达式都可以由多个表达式组成。
初始化表达式只会在循环开始执行一次(允许在for语句外给循环变量赋初值,此时可省略初始化表达式);条件表达式在每次循环前都会被求值,如果为真,则继续执行循环体语句,否则跳出循环(条件表达式省略时,相当于表达式的值永远为“真”,此时循环体内应有控制循环结束的语句);更新表达式在每次循环结束后都会被执行(通常用来修改循环变量的值,以便在某次循环后退出循环)。
注:
1.for后面的括号()不能省,三个表达式都是任选项,可以省掉一个、两个或全部,但是括号内的分号一个都不能省。
2.如果第二个表达式为空,则相当于第二个表达式的值为真。
3.for语句后面不能直接加分号。
4.while循环是for循环的一种简化形式,即默认初始化表达式和更新表达式,实现形式如下:
初始化表达式;
while(条件表达式)
{
语句序列
循环表达式;
}
循环的嵌套
一个循环的循环体中套有另一个完整的循环结构称为循环嵌套。一个循环外面包含一层循环成为双层循环,一个循环外面包含多余两层循环称为多重循环。外面的语句称为“外层循环”,外层循环的循环体中的循环称为"内层循环"。
先内后外,外一次,内一趟。
辅助控制语句(转移语句)
·break语句
在循环体中可以通过break语句立即终止循环的执行,而转到循环结构的下一条语句处执行。使用形式如下:
//表达式 1是条件表达式,表达式 2是决定是否执行break语句
#do-while语句
do
{
...
if(表达式2) break;
...
}while(表达式1);
#while语句
while(表达式1)
{
...
if(表达式2) break;
...
}
#for语句
for(;表达式1;)
{
...
if(表达式2) break;
...
}
说明:
1.break语句只能用在循环语句的循环体中或switch语句中。在循环体中,break常常和if语句一起使用。
2.在循环体中单独使用break语句是无意义的。
3.当break语句处于嵌套结构中时,它将使break语句所处的该层及内各层结构循环终止,跳出所在循环,对外层结构无影响。要实现跳出外层循环,可以设置一个标志变量(标签),逐层跳出。
举例如下:
#include <stdio.h>
int main()
{
int i, j,flag=0;
for (i = 1; i <= 3; i++)
{
printf("外部循环: i = %d ", i);
for (j = 1; j <= 3; j++)
{
if (i == 2 && j == 2) {flag=1;break;}// 使用带有标签的 break 语句来跳出外部循环
printf(" 内部循环: j = %d ", j);
}
if(flag==1)break;//通过break语句跳出外层for循环
}
printf("结束 ");
return 0;
}
输出结果为:
i
的值等于 2 并且 j
的值等于 2 时,程序使用带有标签的 break
语句跳出外部循环。因此,程序只输出了一次 "结束。" 的信息。
·continue语句
continue语句只能出现在3种循环语句的循环体中,用于结束本次循环。当在循环体中遇到continue语句时,程序将跳过continue后面尚未执行的语句,开始下一次循环。(以当前条件进行是否执行下一次循环的判定)使用形式如下:
//表达式 1是条件表达式,表达式 2决定是否执行continue语句
#do-while语句
do
{
...
if(表达式2) continue;
...
}while(表达式1);
#while语句
while(表达式1)
{
...
if(表达式2) continue;
...
}
#for语句
for(;表达式1;)
{
...
if(表达式2) continue;
...
}
说明:
1.continue语句通常是和if语句配合使用
2.continue语句只是结束本次循环,即跳过循环体中尚未执行的语句,然后进行下一次是否执行循环的判定,而不是结束整个循环。
·break语句和continue语句的主要区别
1.continue语句是终止本次循环,break语句是终止本层循环;
2.continue语句用于强制继续循环,break语句用于强制中断循环;
3.break语句还可用在switch语句中。
常用循环的算法
求和(累加),阶乘(累乘),Fib数列(迭代),素数,最大公约数,字符转换等
此文不再详细阐述上述问题,具体问题可见专栏“C语言练习”后续文章