1循環語句
1.1循環語句主要包括三種:while、do-while、for。
2while語句處理循環
2.1while語句基本形式:
While(表達式)
{循環體語句}
2.2執行流程:首先計算while表達式的值,當非零時執行循環體內的語句,執行完之後繼續判斷while表達式的值,如果非零,繼續執行循環體,直到表達式值為零時,跳出循環,執行後續的語句。
例子代碼:
<span style="font-size:18px;">#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);
}</span>
注:使用sum和i時一定要賦初始值。
2.3while語句使用注意:
循環體要是多條語句必須使用符合語句形式;在循環體表達式中一定要有控制循環趨向結束的語句,否則循環將無限進行;循環體可為空;
2.4while實例:a+aa+aaa+....
代碼:
<span style="font-size:18px;">#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);
}</span>
思考問題:求階乘。
3do while語句處理循環
3.1do while語句基本形式:
do{循環體語句}
while(表達式);
3.2執行流程:先執行do後面的循環體,然後計算while裡的表達式值,當值非零時繼續執行do的循環體,當值為零時,跳出循環。
例子代碼:
<span style="font-size:18px;">#include "stdio.h"
main (){
int i,sum;
i=2;
sum=0;
do /*先執行循環*/
{
sum+=i;
i+=2;
}while(i<=100); /*判斷條件*/
printf ("sum=%d\n", sum );
}</span>
3.3while和do while的區別:就是while首先要判斷while的表達式是否成立再執行循環體,而do while是無論while的表達式是否成立,都會先執行一次do的循環體。
4for語句處理循環
4.1基本語法形式:
for(表達式1;表達式2;表達式3)
循環體;
注:for是c語言關鍵字,括號裡的3個表達式可以是任意的表達式,當循環體內有多條語句時,注意使用復合語句。
4.2先計算表達式1,表達式1只執行一次,一般是賦值語句,用於初始化變量;然後求解表達式2,若值為零,則退出循環,若非零,則執行循環體;接著執行表達式3,然後繼續判斷表達式2,再執行循環體,直到表達式2不成立。
例子代碼:
<span style="font-size:18px;">#include "stdio.h"
main( )
{
int i,sum;
sum=0;
for( i=1; i<=100; i++)
sum+=i;
printf("sum=%d",sum);
}</span>
4.3for語句的特點:表達式1、2、3都可以省略,但“;”分號不能省略;表達式可以是任意形式的表達式;循環體可以為空;for的括號裡可以使用多個控制循環的變量。
判斷素數例子代碼:
<span style="font-size:18px;">#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);
}</span>
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內能被3、5、7整除的數。
5.3goto:也叫無條件轉向語句.
它的一般格式為:goto 標號;
例子代碼:
<span style="font-size:18px;">#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);
}</span>
在結構化程序設計中不提倡使用goto語句,但有時使用goto卻比較方便,比如在一個多層的循環體中,要跳出到最外層的循環就要使用多個break,但使用goto直接就可以實現