tft每日頭條

 > 圖文

 > c語言的循環語句如何使用

c語言的循環語句如何使用

圖文 更新时间:2024-09-17 20:58:25

c語言的循環語句如何使用?(七) 循環語句和循環控制Turbo C 2.0提供三種基本的循環語句: for語句、while語句和do-while語句,我來為大家科普一下關于c語言的循環語句如何使用?下面希望有你要的答案,我們一起來看看吧!

c語言的循環語句如何使用(C語言學習之-----)1

c語言的循環語句如何使用

(七) 循環語句和循環控制

Turbo C 2.0提供三種基本的循環語句: for語句、while語句和do-while語句。

一、循環語句

(一)、for循環 它的一般形式為:

for(<初始化>;<條件表格式>;<增量>)

語句;

初始化總是一個賦值語句,它用來給循環控制變量賦初值;條件表達式是一個關系表達式,它決定什麼時候退出循環;增量定義循環控制變量每循環一次後按什麼方式變化。這三個部分之間用;分開。

例如:

for(i=1;i<=10;i )

語句;

上例中先給i賦初值1,判斷i是否小于等于10,若是則執行語句,之後值增加1。再重新判斷,直到條件為假,即i>10時,結束循環。

注意:

(1).for循環中語句可以為語句體,但要用{和}将參加循環的語句括起來。

(2).for循環中的初始化、條件表達式和增量都是選擇項,即可以缺省,但;不能缺省。省略了初始化,表示不對循環控制變量賦初值。省略了條件表達式,則不做其它處理時便成為死循環。省略了增量,則不對循環控制變量進行操作,這時可在語句體中加入修改循環控制變量的語句。

(3).for循環可以有多層嵌套。

例如:

for(;;) 語句;

for(i=1;;i =2) 語句;

for(j=5;;) 語句;

這些for循環語句都是正确的。

main()

{

int i,j;

printf(i j\n);

for(i=0;i<2;i )

for(j=0;j<3;j )

printf(%d %d\n,i,j);

}

輸出結果為:

i j

0 0

0 1

0 2

1 0

1 1

1 2

用for循環求1 2 …… 100的和:

main()

{

int sn=0,i;

for(i=1;i<=100;i )

sn =i; /*1 2 …… 100*/

printf(%d\n,sn);

}

從程序可以看出,使用循環語句可以大大簡化代碼。

(二)、while循環 它的一般形式為:

while(條件)

語句;

while循環表示當條件為真時,便執行語句。直到條件為假才結束循環。并繼續執行循環程序外的後續語句。

例如:

#include stdio.h

main()

{

char c;

c='\0'; /*初始化c*/

while(c!='\n') /*回車結束循環*/

c=getche(); /*帶回顯的從鍵盤接收字符*/

}

上例中,while循環是以檢查c是否為回車符開始,因其事先被初始化為空,所以條件為真,進入循環等待鍵盤輸入字符;一旦輸入回車,則c='\n',條件為假,循環便告結束。與for循環一樣,while循環總是在循環的頭部檢驗條件,這就意味着循環可能什麼也不執行就退出。

注意:

(1).在while循環體内也允許空語句。

例如:

while((c=getche())!='\n');

這個循環直到鍵入回車為止。

(2).可以有多層循環嵌套。

(3).語句可以是語句體, 此時必須用{和}括起來。

用while循環求1 2 …… 100的和:

main()

{

int sn=0,i=0;

while( i<=100)

sn =i; /*求1 2 …… 100*/

printf(%d\n,sn);

}

(三)、do--while循環 它的一般格式為:

do

{

語句塊;

}

while(條件);

這個循環與while循環的不同在于:它先執行循環中的語句,然後再判斷條件是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while循環至少要執行一次循環語句。

同樣當有許多語句參加循環時,要用{和}把它們括起來。

用do--while循環求1 2 …… 100的和:

main()

{

int sn=0,i=1;

do

sn =i; /*求1 2 …… 100*/

while( i<=100);

printf(%d\n,sn);

}

從上面三個程序看出,使用for,while和do--while求解同樣的問題,基本思路都差不多,隻是在第一次計算時,注意初值。

二、循環控制

(一)、break語句

break語句通常用在循環語句和開關語句中。當break用于開關語句switch中時,可使程序跳出switch而執行switch以後的語句;如果沒有break語句,則将成為一個死循環而無法退出。break在switch中的用法已在前面介紹開關語句時的例子中碰到,這裡不再舉例。

當break語句用于do-while、for、while循環語句中時,可使程序終止循環而執行循環後面的語句,通常break語句總是與if語句聯在一起。即滿足條件時便跳出循環。

例如:

main()

{

int sn=0,i;

for(i=1;i<=100;i )

{

if(i==51) break; /*如果i等于51,則跳出循環*/

sn =i; /*1 2 …… 50*/

}

printf(%d\n,sn);

}

可以看出,最終的結果是1 2 …… 50。因為在i等于51的時候,就跳出循環了。自己寫寫怎樣在while和do--while循環中增加break語句。

注意:

1. break語句對if-else的條件語句不起作用。

2. 在多層循環中,一個break語句隻向外跳一層。

例如:

main()

{

int i,j;

printf(i j\n);

for(i=0;i<2;i )

for(j=0;j<3;j )

{

if(j==2) break;

printf(%d %d\n,i,j);

}

}

輸出結果為:

i j

0 0

0 1

1 0

1 1

當i==0,j==2時,執行break語句,跳出到外層的循環,i變為1。

(二)、continue語句

continue語句的作用是跳過循環本中剩餘的語句而強行執行下一次循環。

continue語句隻用在for、while、do-while等循環體中, 常與if條件語句一起使用,用來加速循環。

例如:

main()

{

int sn=0,i;

for(i=1;i<=100;i )

{

if(i==51) continue; /*如果i等于51,則結束本次循環*/

sn =i; /*1 2 …… 50 52 …… 100*/

}

printf(%d\n,sn);

}

從程序中可以看出,continue語句隻是當前的值沒有執行,也就是說當前的值跳過去了,接着執行下次循環。

main()

{

int i,j;

printf(i j\n);

for(i=0;i<2;i )

for(j=0;j<3;j )

{

if(j==1) continue;

printf(%d %d\n,i,j);

}

}

輸出結果為:

i j

0 0

0 2

1 0

1 2

(三)、goto語句

goto語句是一種無條件轉移語句,與BASIC中的goto語句相似。goto語句的使用格式為:

goto 标号;

其中标号是Turbo C 2.0中一個有效的标識符,這個标識符加上一個:一起出現在函數内某處,執行goto語句後,程序将跳轉到該标号處并執行其後的語句。标号既然是一個标識符,也就要滿足标識符的命名規則。另外标号必須與goto語句同處于一個函數中,但可以不在一個循環層中。通常goto語句與if條件語句連用,當滿足某一條件時,程序跳到标号處運行。goto語句通常不用,主要因為它将使程序層次不清,且不易讀,但在多層嵌套退出時,用goto語句則比較合理。

main()

{

int sn=0,i;

for(i=1;i<=100;i )

{

if(i==51) goto loop; /*如果i等于51,則跳出循環*/

sn =i; /*1 2 …… 50*/

}

loop: ;

printf(%d\n,sn);

}

可以看出,這兒的goto語句和break作用很類似。

這兒的loop: ;

printf(%d\n,sn);

也可以寫成loop: printf(%d\n,sn);

main()

{

int sn=0,i;

for(i=1;i<=100;i )

{

if(i==51) goto loop; /*如果i等于51,則跳出本次循環*/

sn =i; /*1 2 …… 50 52 …… 100*/

loop: ;

}

printf(%d\n,sn);

}

可以看出這兒的loop語句和continue的作用類似。

但是某些情況下又必須使用goto語句,否則會讓程序大大臃腫。如:

main()

{

int i,j,k;

printf(i j k\n);

for(i=0;i<2;i )

for(j=0;j<3;j )

for(k=0;k<3;k )

{

if(k==2) goto loop;

printf(%d %d %d\n,i,j,k);

}

loop: ;

}

輸出結果為:

i j k

0 0 0

0 0 1

如果不使用goto語句,而使用break,continue語句,應該這樣

main()

{

int i,j,k;

printf(i j\n);

for(i=0;i<2;i )

{

for(j=0;j<3;j )

{

for(k=0;k<3;k )

{

if(k==2) break;

printf(%d %d %d\n,i,j,k);

}

if(k==2) break;

}

if(k==2) break;

}

}

輸出結果為:

i j k

0 0 0

0 0 1

所以在同時跳出多層循環時,應該使用goto語句。記住,所有的goto語句其實都是可以用break,continue代替的。

下面舉幾個例子:

1.求兩個整數的最大公約數。例如10和15的最大公約數是5。

分析:最大公約數一定小于等于最小的那個數一半,同時能被兩數整除。

main()

{

int num1,num2,i,min;

scanf(%d%d,&num1,&num2);

min=num1

for(i=min/2;i>0;i--)

if(num1%i==0&&num2%i==0) break;

printf(最大公約數為%d\n,i);

}

2.求1! 2! …… n!(n<10)

main()

{

int n,i;

long temp=1,sn=0; /*從9!以後,所得的值就超過了int範圍*/

scanf(%d,&n);

for(i=1;i<=n;i )

{

temp*=i;

sn =temp; /*如果沒有這一步,求的就是n!*/

}

printf(%ld\n,sn);

}

那麼想想,如果求1! 3! 5! …… n!應該怎麼辦?

3.判斷一個整數是不是素數(素數就是隻能被本身和1整除的數)。

#include math.h

main()

{

int num,i,flag=0;

scanf(%d,&num);

for(i=2;i

{

flag=0; /*标志變量複位*/

if(num%i==0)

{

flag=1;

break;

}

}

if(flag==0) printf(是素數\n);

else printf(不是素數\n);

}

可以說,在所有的C語言書上,都有判斷素數的例題。它的編程思想是:把一個變量作為标志變量,用來标志是不是素數;循環體是從2到sqrt(num),因為如果一個數不是素數的話,一定能分解成num=num1*num2,它們中的最小值一定小于sqrt(num),所以循環的時候隻要到sqrt(num)就可以了。同時要注意變量複位的問題。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved