3.4 循環(huán)控制語句
3.4.1 while語句
3.4.2 do... while 語句
3.4.3 for 語句
3.4.4 break與continue語句
3.4.5 程序應(yīng)用舉例
3.4 循環(huán)控制語句
循環(huán)控制結(jié)構(gòu)(又稱重復(fù)結(jié)構(gòu))是程序中的另一個(gè)基本結(jié)構(gòu)。在實(shí)際問題中,常常需要進(jìn)行大量的重復(fù)處理,循環(huán)結(jié)構(gòu)可以使我們只寫很少的語句,而讓計(jì)算機(jī)反復(fù)執(zhí)行,從而完成大量類同的計(jì)算。
C語言提供了while語句、do . . . while語句和for語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
3.4.1 while語句
while語句是當(dāng)型循環(huán)控制語句,一般形式為:
while <表達(dá)式> 語句;
語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時(shí),應(yīng)使用復(fù)合語句。
while語句的流程圖見圖3 - 8,其特點(diǎn)是先判斷,后執(zhí)行,若條件不成立,有可能一次也不執(zhí)行。
[例3 - 11] 求n!
分析: n!= n* (n - 1)*(n - 2)* .. 2*1, 0 ! = 1。即S0= 1,Sn= Sn - 1* n??梢詮腟0開始,依次
求出S1、S2、. . . Sn。
統(tǒng)一令S等于階乘值, S的初值為0!= 1;變量i為計(jì)數(shù)器, i從1變到n,每一步令S = S * i,則最終S中的值就是n!。
程序如下:
main( )
{
int n,i;
long int s;
printf(" please input n (n>=0) :");
scanf("%d" , &n);
if (n>=0)
{
s = 1 ;
if (n>0)
{
i = 1 ;
while (i<=n)
{
s * = i ;
i = i + 1 ;
}
}
printf("%d! = %ld \n",n,s);
}
else
printf("Invalid input! \n");
}
運(yùn)行結(jié)果如下:
please input n(n>=0): 0
0!= 1
please input n(n>=0): 6
6!= 720
please input n(n>=0): - 2
Invalid input!
考察圖3- 9中循環(huán)部分的流程圖可以看出,在循環(huán)前各變量應(yīng)有合適的值( s = 1 ),另外,控制循環(huán)結(jié)束的變量(此處為i )必須在循環(huán)體中被改變,否則,循環(huán)將無限進(jìn)行下去,成為死循環(huán)。
[例3-12] 利用格里高利公式求p :
p/4 = 1 - 1/3 + 1/5 - 1/7 + ...
直到最后一項(xiàng)的絕對值小于等于1 0- 6為止。
程序如下:
# include
# include
{
main( )
{
double e,p i ;
long int n,s ;
t = 1.0;
n = 1;
s = 1;
pi = 0.0;
while (fabs(t)>=1e-6)
{
p i = p i + t ;
n = n + 2 ;
s = -s;
3.4.1 while語句
3.4.2 do... while 語句
3.4.3 for 語句
3.4.4 break與continue語句
3.4.5 程序應(yīng)用舉例
3.4 循環(huán)控制語句
循環(huán)控制結(jié)構(gòu)(又稱重復(fù)結(jié)構(gòu))是程序中的另一個(gè)基本結(jié)構(gòu)。在實(shí)際問題中,常常需要進(jìn)行大量的重復(fù)處理,循環(huán)結(jié)構(gòu)可以使我們只寫很少的語句,而讓計(jì)算機(jī)反復(fù)執(zhí)行,從而完成大量類同的計(jì)算。
C語言提供了while語句、do . . . while語句和for語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
3.4.1 while語句
while語句是當(dāng)型循環(huán)控制語句,一般形式為:
while <表達(dá)式> 語句;
語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時(shí),應(yīng)使用復(fù)合語句。
while語句的流程圖見圖3 - 8,其特點(diǎn)是先判斷,后執(zhí)行,若條件不成立,有可能一次也不執(zhí)行。
[例3 - 11] 求n!
分析: n!= n* (n - 1)*(n - 2)* .. 2*1, 0 ! = 1。即S0= 1,Sn= Sn - 1* n??梢詮腟0開始,依次
求出S1、S2、. . . Sn。
統(tǒng)一令S等于階乘值, S的初值為0!= 1;變量i為計(jì)數(shù)器, i從1變到n,每一步令S = S * i,則最終S中的值就是n!。
程序如下:
main( )
{
int n,i;
long int s;
printf(" please input n (n>=0) :");
scanf("%d" , &n);
if (n>=0)
{
s = 1 ;
if (n>0)
{
i = 1 ;
while (i<=n)
{
s * = i ;
i = i + 1 ;
}
}
printf("%d! = %ld \n",n,s);
}
else
printf("Invalid input! \n");
}
運(yùn)行結(jié)果如下:
please input n(n>=0): 0
0!= 1
please input n(n>=0): 6
6!= 720
please input n(n>=0): - 2
Invalid input!
考察圖3- 9中循環(huán)部分的流程圖可以看出,在循環(huán)前各變量應(yīng)有合適的值( s = 1 ),另外,控制循環(huán)結(jié)束的變量(此處為i )必須在循環(huán)體中被改變,否則,循環(huán)將無限進(jìn)行下去,成為死循環(huán)。
[例3-12] 利用格里高利公式求p :
p/4 = 1 - 1/3 + 1/5 - 1/7 + ...
直到最后一項(xiàng)的絕對值小于等于1 0- 6為止。
程序如下:
# include
# include
{
main( )
{
double e,p i ;
long int n,s ;
t = 1.0;
n = 1;
s = 1;
pi = 0.0;
while (fabs(t)>=1e-6)
{
p i = p i + t ;
n = n + 2 ;
s = -s;