C語言程序設(shè)計(jì)(第3章程序控制語句)4

字號:

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;