00)
{
sum = sum+i;
i++;
}
显然,用for语句简单、方便
说明:
(1)for语句的一般形式
for(表达式1;表达式2;表达式3)语句
可以改写成while循环的形式:
表达式1;
while (表达式2)
{
语句
表达式3
}
二者无条件等价。
(2)“表达式1”可以省略,即不设置初值,但“表达式1”后的分号不能省略。如:
for(;i<=100;i++) sum = sum +i;
注意:由于省略了“表达式1”,没有对循环变量赋初值;因此,为了能正常执行循环,应该在for语句之前给循环变量赋以初值。
(3)“表达式2”也可以省略,即不用“表达式2”来作为循环条件表达式,不设置和检查循环的条件。如:
for(i=1;;i++) sum = sum +i;
此时循环无终止地执行下去,相当于
i = 1;
while(1)
{
sum = sum+I;
i++;
}
(4)表达式3可以省略,但此时程序设计者应另外设法保证循环能正常结束。
for(i=1;i<=100;)
{
sum = sum +i;
i++;
}
(5)如果表达式1和表达式3都没有,只有表达式2,即只给循环条件,情况会怎么样?如:
for(;i<=100;)
{
sum = sum +i;
i++;
}
应当在for语句前给循环变量赋初值,否则循环无法正常进行;即
i = 1;
for(;i<=100;)
{
sum = sum +i;
i++;
}
相当于:
i = 1;
while(i<=100)
{
sum = sum + i;
i++;
}
(6)甚至可以将3个表达式都可省略,如:
for(;;)
{
sum = sum +i;
i++;
}
相当于
while(1)
{
sum = sum + i;
i++;
}
当然,这是没有实用价值的,只是用于学习这种写法也是可以的。
(7)表达式1可以设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:
for(sum=0;i<=100;i++) sum = sum + i;
(8)表达式1和表达式3可以是一个简单的表达式,也可是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。
for(sum=0,i=1 ; i<=100 ; i++) sum = sum + i;
或
for(i=0, j=100;i<=100;i++,j--) k = i+j;
在逗号表达式内按自左向右顺序求解,整个逗号表达式的值为最后边的表达式的值。如:
for(i=1;i<=100;i++,i++) sum = sum + i;
等价于
for(i=1;i<=100;i=i+2) sum = sum +i;
(9)表达式2一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可是数值表达式或字符表达式,只要其值为非零,就执行循环体。如:
for(i = 0; (c = getchar())!=’\n’;i+=c);
注意:此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。
(10)C99允许在for语句的“表达式1”中定义标量并赋初值,如:
for(int i=1;i<=100;i++) sum = sum + i;
5.5 循环的嵌套
一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。
3种循环(while循环、fo…while循环、for循环)可以相互嵌套。下面是合法的格式:
(1)
while ()
{ ……
while()//内层循环
{……}
}
(2)
do
{
……
do
{
……
}while ();//内层循环
}while ();
(3)
for(;;)
{
for(;;)//内层循环
{……}
}
(4)
while()
{
……
do
{
……
}while ();//内层循环
……
}
(5)
for(;;)
{
……
while()//内层循环
{
……
}
……
}
(6)
do
{
……
for(;;)//内层循环
{……}
}while ();
5.6几种循环的比较
(1)3中循环都可以用来处理同一问题,一般情况下它们可以相互代替。
(2)在while循环和do…while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++或i+=1等)
for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for循环的功能更强,凡是用while循环能完成的,for循环也能胜任。
(3)用while和do…while循环时,循环变量初始化的操作应在while和do…while语句之前完成。而for语句可以在表达式1实现循环变量的初始化。
(4)while循环、do…while循环、for循环,都可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见后面)
5.7 改变循环执行的状态
5.7.1 用break语句提前结束循环。
例:当sum大于或等于1000时循环结束
1 //break语句的使用
2 #include <stdio.h>
3 int main()
4 {
5 int sum = 0;
6 int i = 0;
7 for(;i<=100;i++)
8 {
9 if(sum>=1000) //如果sum>1000提前结束循环
10 break;
11 sum += i;
12 }
13 printf("循环的次数为:%d,sum的值为:%d\n",i,sum);
14 return 0;