C語言學習筆記(七)--循環程序設計

1循環語句

1.1循環語句主要包括三種:whiledo-whilefor

2while語句處理循環

2.1while語句基本形式:

While(表達式)

{循環體語句}

2.2執行流程:首先計算while表達式的值,當非零時執行循環體內的語句,執行完之後繼續判斷while表達式的值,如果非零,繼續執行循環體,直到表達式值爲零時,跳出循環,執行後續的語句。

例子代碼:

#include "stdio.h"
main (){
 int  i,sum;
 i=1; 
 sum=0;
 while ( i<=100 )       /* 累加的數i 小於或等於終止數n就循環累加,否則結束循環*/
{ sum=sum+i;
       i++;
     }
  printf ("sum=%d\n",sum);
}

注:使用sumi時一定要賦初始值。

2.3while語句使用注意:

循環體要是多條語句必須使用符合語句形式;在循環體表達式中一定要有控制循環趨向結束的語句,否則循環將無限進行;循環體可爲空;

2.4while實例:a+aa+aaa+....

代碼:

#include  "stdio.h"
main( )
{
  int a,x;
  long  sum=0,n=1,tn ;
  scanf("%d%d",&a,&x);
  tn=a;
  while(n<=x)                /*n超過x則中止*/
  {sum+=tn;
  tn=tn*10+x;
  n++;
  } 
  printf("result is %ld",sum);
}

思考問題:求階乘。

3do while語句處理循環

3.1do while語句基本形式:

do{循環體語句}

while(表達式)

3.2執行流程:先執行do後面的循環體,然後計算while裏的表達式值,當值非零時繼續執行do的循環體,當值爲零時,跳出循環。

例子代碼:

#include "stdio.h"
main (){
 int  i,sum;
 i=2;
 sum=0;
 do                                     /*先執行循環*/
  {
   sum+=i;
   i+=2;
  }while(i<=100);                          /*判斷條件*/
 printf ("sum=%d\n", sum );
}

3.3whiledo while的區別:就是while首先要判斷while的表達式是否成立再執行循環體,而do while是無論while的表達式是否成立,都會先執行一次do的循環體。

4for語句處理循環

4.1基本語法形式:

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

循環體;

注:forc語言關鍵字,括號裏的3個表達式可以是任意的表達式,當循環體內有多條語句時,注意使用複合語句。

4.2先計算表達式1,表達式1只執行一次,一般是賦值語句,用於初始化變量;然後求解表達式2,若值爲零,則退出循環,若非零,則執行循環體;接着執行表達式3,然後繼續判斷表達式2,再執行循環體,直到表達式2不成立。

例子代碼:

#include  "stdio.h"
main( )
{
int i,sum;
sum=0;
for( i=1; i<=100; i++)
  sum+=i;
printf("sum=%d",sum);
}

4.3for語句的特點:表達式123都可以省略,但“;”分號不能省略;表達式可以是任意形式的表達式;循環體可以爲空;for的括號裏可以使用多個控制循環的變量。

判斷素數例子代碼:

#include "stdio.h"
#include "math.h"    
main()
{ int n,m,flag;
  flag=1;                /*flag變量爲旗幟變量,值爲1則n爲素數,否則不是素數。初值爲1*/
  printf("\n enter n:");         /*輸入n*/
  scanf("%d",&n);
  for(m=2;m<n&&flag;m++)         /*判斷n能否被2~n-1之間的數整除*/
    if(n%m==0)
        flag=0;                      /*n不是素數*/  
  if(flag==1)                       /*若flag的值沒有變化,則爲素數*/
    printf("\n%d is a prime number.",n);
  else
    printf("\n %d is not a prime number.",n);
}


4.4思考問題:

1.求階乘。

2.輸出斐波那契數列。

3.輸出水仙花數。

4.輸出如下圖形:

*****

 ****

  ***

   **

    *

5流程控制語句

有時我們在執行循環的過程中,可能需要在中途中斷循環或者跳過本次循環,這時我們就需要使用流程控制語句。

5.1break:在switch語句中我們常使用break用來跳出switch分支,其實break同樣也可以使用在循環語句中用來跳出循環。在循環中使用break讓循環語句可以有多個出口,使程序變的更加靈活。

break語句可以使循環在未達到結束條件時提前跳出循環。

例子代碼:

for(i=0;i<10;i++){

printf("%d",i);

if(i==0) break;

}

思考問題:使用break語句修改判斷素數問題。

5.2continue:在循環過程中使用continue可以根據條件判斷是否執行本次循環,使用continue之後,後面的代碼就不再執行,直接執行下次循環。但是不像break既可以用在分支也可以用在循環中,continue只能用在循環結構中。

例子代碼:

for(i=0;i<10;i++){

if(i==0) continue; /*i==0時不執行循環*/

printf("%d",i);

}

思考練習:使用continue實現求1000內能被357整除的數。

5.3goto:也叫無條件轉向語句.

它的一般格式爲:goto 標號;

例子代碼:

#include <stdio.h>
main() { 
  int i,s=0;
  i=1;
  loop:if(i<=100){     /*標號,表示出goto語句轉向的位置*/
      s+=i;
      i++;
      goto loop;
  }          
  printf("1+2+3+…100=%d\n",s);
}

在結構化程序設計中不提倡使用goto語句,但有時使用goto卻比較方便,比如在一個多層的循環體中,要跳出到最外層的循環就要使用多個break,但使用goto直接就可以實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章