C語言基礎(4)——改變循環執行的狀態


上次的語言筆記我們介紹了循環結構,它們都是根據事先指定的循環條件正常執行與終止的循環。但如果我需要提早結束正在執行的循環操作呢?這時就可以用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語句則是結束整個循環過程,不再判斷執行循環的條件是否成立。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章