在上例的循環體中,if語句的條件和while的循環條件相同,隻是巧合,並非必需。
循環體中,循環變量的值不斷變化很重要。例6.2中,如果num的值恒定不變,則循環條件也永不改變,導致死循環。
do-while循環同樣需要循環變量初始化。此外,因為do-while循環在循環體的底部進行循環條件的判定,所以它至少將執行一次循環體。而while語句在循環的頂部進行判斷,有可能一次都不執行循環體。
do-while在許多場合都可以做while能做的事,比如上節中求sum=∑100〖〗n=1n。
[例63]用do-while寫出的完整程序。
voidmain()
{
inti,sum=0;
i=1;
do
{
sum=sum+i;
i=i+1;
}while(i100時,整個循環結束。
如果將for語句的一般形式用while語句來表示,則為如下形式:
表達式1;
while(表達式2)
{
循環體;
表達式3;
}
所以for語句將while或do-while中循環體所用的循環控製放在循環頂部統一表達,顯得更加直觀。除此之外,for語句還充分表現了其靈活性。
(1)表達式1可以省略。此時應在for語句之前給循環變量賦初值。若省略表達式1,其後的分號不能省略。
例如求和運算:
i=1;
for(;i=100)break;
}
等價於:
for(i=1;1;i++)/*表達式2為真(值為1)*/
{
sum+=i;
if(i>=100)break;
}
此處break表示退出循環,詳見681節。
(3)表達式3可以省略。但此時程序員應另外設法讓循環變量遞進變化,以保證循環能正常結束。
例如求和運算:
for(i=1;i100)break;
}
(6)表達式1,表達式2,表達式3都可以為任何類型的表達式。
例如求和運算中可設置sum的初值:
for(sum=0;i