站長資訊網
        最全最豐富的資訊網站

        C語言入門之循環結構

           循環結構是程序中一種很重要的結構。其特點是, 在給定條件成立時,反復執行某程序段,直到條件不成立為止。 給定的條件稱為循環條件,反復執行的程序段稱為循環體。 C語言提供了多種循環語句,可以組成各種不同形式的循環結構。

           while語句

           while語句的一般形式為: while(表達式)語句; 其中表達式是循環條件,語句為循環體。

           while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體語句。其執行過程可用圖3—4表示。 統計從鍵盤輸入一行字符的個數。

        #include
        void main(){
        int n=0;
        printf(“input a string:n”);
        while(getchar()!=’n’) n++;
        printf(“%d”,n);
        } int n=0;
        printf(“input a string:n”);
        while(getchar()!=’n’)
        n++;
        printf(“%d”,n);

           本例程序中的循環條件為getchar()!=’n’,其意義是, 只要從鍵盤輸入的字符不是回車就繼續循環。循環體n++完成對輸入字符個數計數。從而程序實現了對輸入一行字符的字符個數計數。

           使用while語句應注意以下幾點:

           1.while語句中的表達式一般是關系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續循環。

        void main(){
          int a=0,n;
          printf(“n input n: “);
          scanf(“%d”,&n);
          while (n–)
          printf(“%d “,a++*2);
        } int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        while (n–)
        printf(“%d “,a++*2);

           本例程序將執行n次循環,每執行一次,n值減1。循環體輸出表達式a++*2的值。該表達式等效于(a*2;a++)

           2.循環體如包括有一個以上的語句,則必須用{}括起來, 組成復合語句。

           3.應注意循環條件的選擇以避免死循環。

        void main(){
          int a,n=0;
          while(a=5)
           printf(“%d “,n++);
        } int a,n=0;
        while(a=5)
        printf(“%d “,n++);

           本例中while語句的循環條件為賦值表達式a=5, 因此該表達式的值永遠為真,而循環體中又沒有其它中止循環的手段, 因此該循環將無休止地進行下去,形成死循環。4.允許while語句的循環體又是while語句,從而形成雙重循環。

           do-while語句

           do-while語句的一般形式為:

        do
          語句;
        while(表達式);

           其中語句是循環體,表達式是循環條件。

           do-while語句的語義是:

           先執行循環體語句一次, 再判別表達式的值,若為真(非0)則繼續循環,否則終止循環。

           do-while語句和while語句的區別在于do-while是先執行后判斷,因此do-while至少要執行一次循環體。而while是先判斷后執行,如果條件不滿足,則一次循環體語句也不執行。

           while語句和do-while語句一般都可以相互改寫。

        void main(){
          int a=0,n;
          printf(“n input n: “);
          scanf(“%d”,&n);
          do printf(“%d “,a++*2);
          while (–n);
        }
        int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        do printf(“%d “,a++*2);
        while (–n);

           在本例中,循環條件改為–n,否則將多執行一次循環。這是由于先執行后判斷而造成的。

           對于do-while語句還應注意以下幾點:

           1.在if語句,while語句中, 表達式后面都不能加分號, 而在 do-while語句的表達式后面則必須加分號。

           2.do-while語句也可以組成多重循環,而且也可以和while語句相互嵌套。

           3.在do和while之間的循環體由多個語句組成時,也必須用{}括起來組成一個復合語句。

           4.do-while和while語句相互替換時,要注意修改循環控制條件。

           for語句

           for語句是C語言所提供的功能更強,使用更廣泛的一種循環語句。其一般形式為:

        for(表達式1;表達式2;表達3)

           語句:

           表達式1 通常用來給循環變量賦初值,一般是賦值表達式。也允許在for語句外給循環變量賦初值,此時可以省略該表達式。

           表達式2 通常是循環條件,一般為關系表達式或邏輯表達式。

           表達式3 通??捎脕硇薷难h變量的值,一般是賦值語句。

           這三個表達式都可以是逗號表達式, 即每個表達式都可由多個表達式組成。三個表達式都是任選項,都可以省略。

           一般形式中的“語句”即為循環體語句。for語句的語義是:

           1.首先計算表達式1的值。

           2.再計算表達式2的值,若值為真(非0)則執行循環體一次, 否則跳出循環。

           3.然后再計算表達式3的值,轉回第2步重復執行。在整個for循環過程中,表達式1只計算一次,表達式2和表達式,3則可能計算多次。循環體可能多次執行,也可能一次都不執行。for 語句的執行過程如圖所示。

        void main(){
        int n,s=0;
        for(n=1;n<=100;n++)
        s=s+n;
        printf(“s=%dn”,s);
        }

           用for語句計算s=1+2+3+…+99+100

        int n,s=0;
        for(n=1;n<=100;n++)
        s=s+n;
        printf(“s=%dn”,s);

           本例for語句中的表達式3為n++,實際上也是一種賦值語句,相當于n=n+1,以改變循環變量的值。

        void main(){
        int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        for(;n>0;a++,n–)
        printf(“%d “,a*2);
        }

         

           用for語句修改例題。從0開始,輸出n個連續的偶數。

        int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        for(;n>0;a++,n–)
        printf(“%d “,a*2);

           本例的for語句中,表達式1已省去,循環變量的初值在for語句之前由scanf語句取得,表達式3是一個逗號表達式,由a++,n– 兩個表達式組成。每循環一次a自增1,n自減1。a的變化使輸出的偶數遞增,n的變化控制循次數。

           在使用for語句中要注意以下幾點

           1.for語句中的各表達式都可省略,但分號間隔符不能少。如:for(;表達式;表達式)省去了表達式1。for(表達式;;表達式)省去了表達式2。

          for(表達式;表達式;)省去了表達式3。for(;;)省去了全部表達式。

           2.在循環變量已賦初值時,可省去表達式1,如例3.27即屬于這種情形。如省去表達式2或表達式3則將造成無限循環, 這時應在循環體內設法結束循環。例題即屬于此情況。

        void main(){
        int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        for(;n>0;)
        { a++;n–;
          printf(“%d “,a*2);
        }
        } int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        for(;n>0;)
        { a++;n–;
        printf(“%d “,a*2);
        }

           本例中省略了表達式1和表達式3,由循環體內的n–語句進行循環變量n的遞減,以控制循環次數。

        void main(){
        int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        for(;;){
        a++;n–;
        printf(“%d “,a*2);
        if(n==0)break;
        }
        }
        int a=0,n;
        printf(“n input n: “);
        scanf(“%d”,&n);
        for(;;){
        a++;n–;
        printf(“%d “,a*2);
        if(n==0)break;
        }

           本例中for語句的表達式全部省去。由循環體中的語句實現循環變量的遞減和循環條件的判斷。當n值為0時,由break語句中止循環,轉去執行for以后的程序。在此情況下,for語句已等效于while( 1)語句。如在循環體中沒有相應的控制手段,則造成死循環。

           3.循環體可以是空語句。

        #include”stdio.h”
        void main(){
          int n=0;
          printf(“input a string:n”);
          for(;getchar()!=’n’;n++);
           printf(“%d”,n);
        }

           本例中,省去了for語句的表達式1,表達式3也不是用來修改循環變量,而是用作輸入字符的計數。這樣, 就把本應在循環體中完成的計數放在表達式中完成了。因此循環體是空語句。應注意的是,空語句后的分號不可少,如缺少此分號,則把后面的printf 語句當成循環體來執行。反過來說,如循環體不為空語句時, 決不能在表達式的括號后加分號, 這樣又會認為循環體是空語句而不能反復執行。這些都是編程中常見的錯誤,要十分注意。

           4.for語句也可與while,do-while語句相互嵌套,構成多重循環。以下形成都合法的嵌套。

        (1)for(){…
           while()
            {…}
           …
             }
        (2)do{
            …
           for()
            {…}
           …
           }while();
        (3)while(){
               …
               for()
                {…}
               …
              }
        (4)for(){
             …
             for(){
             …
              }
             }
        void main(){
        int i,j,k;
        for(i=1;i<=3;i++)
        {
          for(j=1;j<=3-i+5;j++)
           printf(” “);
           for(k=1;k<=2*i-1+5;k++)
           {
            if(k<=5) printf(” “);
            else printf(“*”);
           }
           printf(“n”);
          }
        }

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 四虎国产精品永久地址99| 国产精品哟女在线观看| 国产A√精品区二区三区四区| 亚洲国产婷婷综合在线精品| 久久九九有精品国产23百花影院| 亚洲国产精品久久电影欧美| 精品少妇一区二区三区在线 | jizz国产精品网站| 亚洲欧洲成人精品香蕉网| 久久人搡人人玩人妻精品首页| 亚洲人成亚洲精品| jizz国产精品网站| 精品福利一区二区三区免费视频 | 四虎永久在线精品国产免费| 国产日韩精品中文字无码| 亚洲精品V欧洲精品V日韩精品| 欧美精品91欧美日韩操| 久久九九久精品国产| 国产精品一区二区三区99| 9191精品国产免费久久| 国产精品亚洲欧美一区麻豆| 国内精品九九久久久精品| 久久精品一本到99热免费| 全球AV集中精品导航福利| 亚洲AV无码久久精品色欲| 亚洲乱码精品久久久久..| 亚洲日韩中文在线精品第一| 亚洲一级Av无码毛片久久精品| 亚洲av无码成人精品区在线播放 | 最新国产成人精品2024| 亚洲无线观看国产精品| 亚洲精品无码成人AAA片| 亚洲色精品aⅴ一区区三区| 亚洲精品国产成人片| 无码人妻精品一区二区三区久久| 亚洲色精品88色婷婷七月丁香| 人人妻人人澡人人爽精品日本 | 亚洲AV永久无码精品水牛影视| 中文字幕无码精品三级在线电影| 午夜DY888国产精品影院| 精品无码国产自产拍在线观看|