第五章 循环结构
5.1 while语句和用 while语句构成的循环结构
while循环的一般形式为,
while(表达式 )
语句 ;
¤ 表达式是逻辑值 。 ( 即返回值为整型 ) 。
¤ 语句必须是一条语句,多条语句必须用复合语句 。
5.1.1 while循环的一般形式
while循环表示当条件为真时,便执行语句(循环体 〕,直到条件为假才结束循环,并继续执行循环程序外的后续语句。
main( )
{ int n,i=1 ; long p=1 ;
printf(“input data n:\n”);
scanf(“%d”,&n);
while( i<=n )
{ p=p*2; i++; }
printf(“p=%ld”,p);
}
5.1.2 while循环的执行过程
i=1,p=1
输入 n
当 i<=n
p=p*2
i++
输出 p
注意,
1,while循环总是在循环的开始检验条件,即先判断,
后执行 这就意味着循环可能一次也不执行就退出。
2,语句可以是语句体,此时必须用 "{"和 "}"括起来,构成复合语句。
3,循环体中应有使循环趋向于结束的语句,否则将出现死循环。
如,while (1)
printf(“why?”);
4,while的 循环体可以是空语句。
5.1.2 while循环的执行过程
do-while 循环的一般格式为,
do
语句 ;
while(表达式 );
¤ 表达式是逻辑值。(即返回值为整型)。
¤ 语句必须是一条语句,多条语句必须用复合语句。
¤ do是 C语言的关键字,必须与 while联合使用。
5.2.1 do-while语句构成的循环结构
5.2 do-while语句和用 do-while语句构成的循环结构先执行循环中的语句,然后再判断条件是否为真,
如果为真则继续循环 ; 如果为假,则终止循环。因此,
do-while循环至少要执行一次循环语句。
¤ 当有许多语句参加循环时,要用 "{"和 "}"把它们括起来。一般最好将 do-while语句的循环体用,{”和,}”
括起来。
¤与 while循环的区别在于,先执行,后判断。 当第一次执行时,若判断条件为假,则 do-while只 执行一次循环语句,而 while一次也 不执行。
5.2.2 do-while循环的执行过程
while和 do-while循环的比较例如,求 s=1+2+3+4…+100
(1) main() (2) main()
{ int sum=0,i=1; { int sum=0,i=1;
while(i<=100) do
{ sum=sum+i; { sum=sum+i;
i++; i++;
} }while(i<=100);
printf("%d\n",sum); printf("%d\n",sum);
} }
5.2.2 do-while循环的执行过程
for语句的一般形式为,
for(表达式 1; 表过式 2; 表达式 3)
语句 ;
¤各表达式之间用“;”隔开
¤循环体中的语句可以是复合语句,用大括号括起来。
5.3.1 for语句构成的循环结构
5.3 for语句和用 for语句构成的循环结构首先计算表达式 1,
接着执行表达式 2,若表达式 2的值不等于 0
(真),则执行语句,
接着计算表达式 3,再判断表达式 2的值。依此重复下去,直到表达式 2的值等于(假)。
例如,求 1+2+...+100
i=1; sum=0;
for(i=1; i<=100; i++)
sum += i;
5.3.2 for循环的执行过程计算表达式 1
语 句计算表达式 3
求表达式 2值
=0(假 )
0(真 )
1,for循环中的,表达式 1”,,表达式 2”和,表达式 3”
都是可选项,即可以缺省,但,;”不能缺省。
*省略表达式 1,表示不对循环控制变量赋初值。
*省略表达式 2,则不做其它处理时便成为死循环。
*省略表达式 3,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句,来保证循环正常结束。如上例可写为:
i=1; sum=0;
for(; i<=100 ; )
{ sum+=i;
i++; }
5.3.3 有关 for语句的说明
2,for语句中表达式 1也可是与循环控制变量无关的表达式;表达式 1和表达式 3可为简单表达式,也可为逗号表达式。
例 1,for(sum=0,i=1; i<=100; i++)
sum += i;
例 2,for(i=0,j=100 ; i<=j ; i++,j - -) k=i+j;
例 3,for(i=1;i<=100;i++,i++) sum=sum+i;
均等价于 for(i=1;i<=100;i=i+2) sum=sum+i;
5.3.3 有关 for语句的说明当循环体中又包含了另一个完整的循环时称为 嵌套。
C有三种循环语句( for,while,do-while),均可以相互嵌套,注意不能交叉。
5.4 循环结构的嵌套
while ( )
{…
while ( )
…{
}
}
for (; ;)
{…
while ( ) { }
do
{ } while ();

}
功能:
1〕 用于开关语句 switch中,可使程序跳出 switch而执行 switch以后的语句 ;
2) 用于 do-while,for,while循环语句中时,可从循环体中跳出,而执行循环后面的语句,通常 break语句总是与 if语句联在一起。即满足条件时便跳出循环。
注意,
1) break语句对 if-else 的条件语句不起作用。
2) 在多层循环中,一个 break语句只向外跳一层。
5.5 break和 continue语句在 循环体中的作用
5.5.1 break语句例,计算圆的面积?r2,半径取 1,2,3,4…,当面积大于 >100时结束。
5.5.1 break语句
for( r=1; r<=10; r++)
{area=pi?r?r;
if (area>100) break;
printf ("%f",area);
}
功能,结束本次循环,即跳过循环体中剩余的语句而接着进行下一次是否执行循环的判定。
continue语句只用在 for,while,do-while等循环体中,常与 if条件语句一起使用,用来加速循环。
例,打印 100~200中不能被 3整除的数。
5.5.2 continue语句
main( )
{ int n;
for(n=100;n<=200;n++)
{ if( n % 3 = =0 ) continue ;
printf(“%d”,n);
}
}
main( )
{ int n;
for (n=100; n<200; n++)
if (n%3!=0) printf("%d",n);
}
5.6 程序举例

7
1
5
1
3
11
4
用公式 求?的值,
直到 最后一项的绝对值小于
10-4为止。
T=1,pi=0,n=1,s=1
|t|>=10-4
pi=pi+t
n=n+2
s=-s
t=s/n
pi=pi*4
输出 pi
#include,math.h”
main()
{int s; float n,t,pi;
t=1;pi=0;n=1.0;s=1;
while ((fabs(t)>=1e-4)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n; }
pi=pi*4;
printf(“pi=%10.6f\n”,pi);
}