C語言學習教程第三章-C語言程式設計初步(7)

來源:互聯網
上載者:User

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);
}

在本例中,迴圈條件改為--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 通常可用來修改迴圈變數的值,一般是指派陳述式。
這三個運算式都可以是逗號運算式, 即每個運算式都可由多個運算式組成。三個運算式都是任選項,都可以省略。
一般形式中的“語句”即為迴圈體語句。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=%d\n",s);
}
用for語句計算s=1+2+3+...+99+100

int n,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",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);
}
}
本例中省略了運算式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;
}
}
本例中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");
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.