改變循環執行的狀態
上次的語言筆記我們介紹了循環結構,它們都是根據事先指定的循環條件正常執行與終止的循環。但如果我需要提早結束正在執行的循環操作呢?這時就可以用break語句與continue語句來實現提前結束循環了。
用break語句提前終止循環
break語句在上次的筆記中的switch結構裏也出現過,用break語句跳出switch結構,繼續執行switch語句裏的下面一個語句。不僅如此。break語句還可以用來跳出循環體,提早結束循環。緊接着執行循環下面的語句。需要注意的是,break語句只能用於循環語句和switch語句之中,而不能單獨使用。
例如:輸入不超過50個數,當輸入的某個數爲負數時,就表示數字輸入結束,求程序錄入的數字的平均數。
問題分析:輸入數字不超過50,這裏只需要for循環控制即可:
for("i=1;i<=50;i++)
題目要求當輸入的數字爲負數時,便停止錄入數字。所以這裏就可以用break語句處理問題。
代碼實現:
#include<stdio.h>
int main()
{
int num,sum=0,ave;
int i,n=0; /*n爲程序錄入的數字個數*/
for(i=1;i<=50;i++)
{
scanf("%f",&num);
if(num<0) /*如果數字爲負*/
break; /*跳出循環*/
sum+=num; /*數字累加*/
}
n=i-1; /*錄入數字個數減1*/
ave=sum/n; /*求平均數*/
printf("平均數爲:%d",ave);
return 0;
}
3 5 3 -2 2
平均數爲:3.67
用continue語句提前結束本次循環
有時候呢不希望終止整個循環的操作,而只希望提前結束本次循環,而接着執行下次循環。這時可以用continue語句。
例如:我們依然就上個問題延伸,輸入一系列數字,求輸入的數字除負數以外的所有數字的平均數。
問題分析:這個問題與上個問題有什麼區別呢?對於上個問題,當輸入的某個數字爲負數時,程序的數字錄入就中斷了;但對於這個問題,當輸入的某個數字爲負數時,程序選擇不錄入該負數,就該負數後有的非負數選擇錄入並加入後續運算。
continue語句也只是結束本次循環,而不是終止循環的進行,所以這裏我們就能用到了。
代碼實現:
#include<stdio.h>
#define N 5
int main()
{
float num,sum=0,ave;
int i,n=0; /*n爲程序錄入的合格數字個數*/
for(i=1;i<=N;i++)
{
scanf("%f",&num);
if(num<0) /*如果數字爲負*/
{
continue; /*跳過下面語句,結束本次循環*/
}
sum+=num; /*合格數字累加*/
n++; /*合格數字計數*/
}
ave=sum/n; /*求平均數*/
printf("平均數爲:%.2f",ave);
return 0;
}
2 3 -2 3 -2 3
平均數爲:2.67
綜上所述,continue語句與break語句的區別可以總結爲:
continue語句只是結束本次循環,而不是終止循環的執行;而break語句則是結束整個循環過程,不再判斷執行循環的條件是否成立。