天天看點

循環語句(while、do...while、for)

1 循環語句分析

  • 循環語句的基本工作方式:
    • 通過條件表達式判定是否執行循環體;
    • 條件表達式遵循if語句表達式的原則。
  • do、while、for的差別
    • do語句先執行後判斷,循環體至少執行一次;
    • while語句先判斷後執行,循環體可能不執行;
    • for語句先判斷後執行,相比while更簡潔。

2 do…while語句的循環方式

循環語句(while、do...while、for)

3 while語句的循環方式

循環語句(while、do...while、for)

4 for語句的循環方式

循環語句(while、do...while、for)

程式設計實驗:三種循環語句使用對比

#include <stdio.h>

int f1(int n)
{
    int ret = ;

    if( n >  )
    {
        do
        {
            ret += n;
            n--;
        }
        while( n >  );
    }

    return ret;
}

int f2(int n)
{
    int ret = ;

    while( n >  )
    {
        ret += n;
        n--;
    }

    return ret;
}

int f3(int n)
{
    int ret = ;
    int i = ;

    for(i=; i<=n; i++)
    {
        ret += i;
    }

    return ret;
}

int main()
{
    printf("%d\n", f1());
    printf("%d\n", f2());
    printf("%d\n", f3());

    return ;
}
           

5 循環語句分析

  • break和continue的差別:
    • break表示終止循環的執行;
    • continue表示終止本次循環,進入下次循環執行。
  • 思考:switch能否用continue關鍵字?為什麼?
    • switch是分支語句,continue隻能用于循環語句。

執行個體分析:continue和break的差別

#include <stdio.h>

void f1(int n)
{
    int i = ;

    for(i=; i<=n; i++)
    {
        if( (i % ) ==  )
        {
            break;
        }

        printf("%d ", i);
    }

    printf("\n");
}

void f2(int n)
{
    int i = ;

    for(i=; i<=n; i++)
    {
        if( (i % ) ==  )
        {
            continue;
        }

        printf("%d ", i);
    }

    printf("\n");
}

int main()
{
    f1();
    f2();

    return ;
}
           

執行個體分析:do和break的妙用

#include <stdio.h>
#include <malloc.h>

int func(int n)
{
    int i = ;
    int ret = ;
    int* p = (int*)malloc(sizeof(int) * n);

    do
    {
        if( NULL == p ) break;

        if( n <  ) break;

        if( n > ) break;

        for(i=; i<n; i++)
        {
            p[i] = i;
            printf("%d\n", p[i]);
        }

        ret = ;
    }while(  );

    printf("free(p)\n");

    free(p);

    return ret;
}

int main()
{
    if( func() )
    {
        printf("OK\n");
    }
    else
    {
        printf("ERROR\n");
    }

    return ;
}
           

6 小結

  • for循環先進行判斷再進入循環體。
  • for循環适合于循環次數固定的場合。
  • while循環先進行判斷再進入循環體執行。
  • while循環體适合于循環次數不定的場合。
  • do…while循環先執行循環體再進行條件判斷。
  • do…while循環體至少執行一次循環體。