1. 程式人生 > >黑馬程式設計師-C語言回顧-迴圈

黑馬程式設計師-C語言回顧-迴圈

一、迴圈結構介紹

1、概述

     迴圈結構是程式中一種很重要的結構。其特點是:在給定條件成立時,反覆執行某程式段,知道條件不成立為止。給定的條件稱為村換條件,反覆執行的程式段稱為迴圈體。

    迴圈結構簡單來說就是:迴圈是一次又一次的執行相同的程式碼塊。

C語言提供了多種迴圈語句,可以組成各種不同形式的迴圈結構:

用goto語句和if語句構成迴圈;

用while語句;

用do-while語句;

用for語句;

2、構成迴圈結構的幾個條件:

1)迴圈控制條件

迴圈退出的主要依據,來控制迴圈到底什麼時候退出

2)迴圈體

迴圈的過程中重複執行的程式碼段

3)能夠讓迴圈結束的語句(遞增、遞減、真、假等)

能夠讓迴圈條件為假的依據,否則退出迴圈

二、while迴圈介紹及基本格式

1、while迴圈的格式

while(條件)

{

語句1;

語句2;

····

}

2、while迴圈使用方法:

1)while迴圈的特點

如果while中的條件一開始i不成立,那麼迴圈體中的語句永遠不會執行

2)while語句的語義是:

如果條件成立,就會執行迴圈體中的語句(“迴圈體”就是while後面大括號中的內容)。然後再次判斷條件,重複上述過程,直到條件不成立就結束while迴圈。

思考&實現:

1、用while語句計算從1到100的值。

思路:

1)定義一個變數i,定義一個變數存放和計算和

2)迴圈條件

3)進行加法  i自增。

    int i = 1,sum = 0;
    while (i<=100) {
        sum = sum + i;
        i++;
    }
    printf("從1加到100的值是:%d",sum);


2、改進:輸入一個整數n計算從1到n的值。

int i = 1,sum = 0,a = 0;
    printf("請輸入一個數字:\n");
    scanf("%d",&a);
    while (i<=a) {
        sum = sum + i;
        i++;
    }
    printf("從1加到%d的值是:%d",a,sum);


三、while迴圈使用陷阱

1、while迴圈的陷阱

死迴圈:就是一直都執行迴圈體中的程式碼,不會退出

   while(條件)

思考&實現

統計從鍵盤輸入一行字元的個數

思路:

1)接受使用者輸入的字串

2)判斷使用者是不是敲了換行。

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int count = 0;
    char ch;
    printf("請輸入一行字元:\n");//字母字元都可以
    scanf("%c",&ch);
    while (ch!='\n') {
        scanf("%c",&ch);
        count++;
    }
    printf("你輸入的字元的個數是:%d",count);
    return 0;
}


四、while迴圈的應用

 1、遊戲方向控制

  1)不知道要迴圈的次數的時候使用死迴圈

2)在某個範圍內查詢滿足條件的值

思考&實現

使用while迴圈實現控制w(上) s(下) a(左) d(右)  方向控制

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int flag = 1;
    char ch;
    printf("請控制小人移動:w,s,a,d\n");//如果在whil內列印,會列印兩次。

    while (flag) {
               scanf("%c",&ch);
        switch (ch) {
            case 'w':
            case 'W':
                printf("上\n");
                break;
            case 's':
            case 'S':
                printf("下\n");
                break;
            case 'a':
            case 'A':
                printf("左\n");
                break;
            case 'd':
            case 'D':
                printf("右\n");
                break;
            case 'q':
            case 'Q':
                printf("程式已經退出!\n");
                flag=0;
            
            
        }
    }
    return 0;
}


2、應用:《瘋狂猜數》

思考&實現

使用隨機數隨機產生一個1~1000之間的數,給使用者10詞競猜的機會。

遊戲分析

思路:

1)定義變數

2)儲存計算機產生的隨機數和輸入的數字

3)儲存隨機數產生的範圍

4)儲存總的次數

5)儲存已經競猜的次數

產生隨機數

1)匯入標頭檔案  stdlib.h

2)呼叫隨機數函式,產生隨機數。

arc4ranom_uniform(1000);  產生0~999之間的隨機數

產生m到n之間的隨機數

 arc4random_uniform(n-m+1)+m

死迴圈判斷

 判斷次數是否小於10

如果<10,可以猜

提示使用者輸入一個數,然後判斷是大了還是小了

>10,提示,退出程式。

程式碼實現:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
    int randomNum = 0,inputNmu = 0;
    int count = 1;
    int flag = 1;
    randomNum=arc4random_uniform(1000)+1;
    while (flag) {
        if (count<=10) {
            printf("請輸入一個1~1000之間的數字\n");
            scanf("%d",&inputNmu);
            if (inputNmu<randomNum) {
                printf("這是第%d次輸入,你還有%d次機會\n對不起,你猜小了\n",count,10-count);
            } else if(inputNmu>randomNum){
                printf("這是第%d次輸入,你還有%d次機會\n對不起,你猜大了\n",count,10-count);
            }else{
                printf("恭喜你,你在第%d次時猜對了\n",count);
                flag=0;
            }
            count++;
        
        
        } else {
            printf("你的智商不適合這個遊戲!\n");
            flag = 0;
        }
    
    
    
    }
    return 0;
}


五、while迴圈使用注意

1、死迴圈:任何數值都有真假性。

while(-1){

 }

2、當一個變數與一個常量進行==或!=的時候,通常把常量寫在前面

3 == num

3、while後如果只有一條語句它可以省略大括號

  1)空語句它也是一條語句

  2)while小括號後面不可以直接寫分號

4、作用域:內部程式碼塊中定義的變數不可以在外邊程式碼塊中訪問

5、作用域紊亂

  while(1<3)

      int num = 5;

6、最簡單死迴圈

  while(1);

六、do···while迴圈的基本格式

1、基本格式

do{

語句1;

語句2;

···

}while(條件);

直到型迴圈:先執行迴圈體,然後判斷條件,直到條件為假就結束。

2、do  while語句用法

1)do while語句的語義是:

當執行do-while迴圈是,首先會執行一遍迴圈體中的語句。接著判斷while中的條件,如果條件成立,就執行迴圈體中的語句。然後再次判斷條件,重複上述過程,直到條件不成立就結束while迴圈

2)do-while迴圈的特點:

不管while中的條件是否成立,迴圈體中的語句至少會被執行一遍。

七、do-while和while對比

1)當迴圈控制條件第一次判斷不為假的時候

while和do-while迴圈體執行的次數相同

2)當迴圈控制條件第一次判斷為假的時候

while迴圈的迴圈體執行0次

do-while執行1次。

八、for迴圈結構及執行過程

1、for迴圈的語法格式

 C語言中的for語句使用最為靈活,不僅可以用於迴圈次數已經確定的情況,而且可以用於迴圈次數不確定而只給出迴圈結束條件的情況,它完全可以代替while語句。

一般形式:

for(表示式1;表示式2;表示式3){語句;}

2、for迴圈執行過程

1)先求解表示式1。

2)求解表示式2,若其值為真(值為非0),則執行for語句中制定的內嵌語句,然後執行下面第3)步。若為假(值為0),則結束迴圈,轉到第5)步。

3)求解表示式3

4)轉會上面第2)步繼續執行

5)迴圈結束,執行for語句下面的一個語句。

注意:

1)初始化語句只會被執行1次

2)當條件不滿足的時候,迴圈就結束

九、for迴圈的其他形式

1、表示式省略(三個表示式都可以省略)

如:for(;;)語句相當於while(1)語句,即不設初值,不判斷條件(認為表示式2為真),迴圈變數不增值。無終止地執行迴圈體。

2、迴圈控制無關的任意表達式

表示式1和表示式3可以是一個簡單的表示式,也可以是逗號表示式,即包含一個以上的簡單表示式,中間用逗號隔開。

    在逗號表示式內按自左至右順序求解,整個逗號表示式的值為其最右邊的表示式的值。

如:

for(i = 1; i<=100;i++,i++)

相當於

for(i=1;i<=100; i = i+2)

十、for迴圈巢狀應用

1、列印圖形(一)

思考&實現1

列印圖形

*

  • *
  • * *
  • * * *
  • * * * *
for (int i = 0; i<5; i++) {
        for (int j = 0; j<=i; j++) {
            printf("* ");
        }
    printf("\n");
    }


思考&實現2

使用者輸入一個整數N,輸出如下圖形,如:N=5

1

2 2

3 3 3

4 4 4 4

5 5 5 5 5

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int N=0;
    printf("請輸入一個正整數:\n");
    scanf("%d",&N);
    for (int i =0; i<N; i++) {
        for (int j =0; j<=i; j++) {
            printf("%d",i+1);
        }
        printf("\n");
    }
    return 0;
}


2、列印圖形(二)

列印正三角形

#include <stdio.h>

int main(int argc, const char * argv[]) {
    for (int i = 0; i<6; i++) {
        //第一個內迴圈控制空格。
        for (int j = 0 ; j<6-i; j++) {
            printf(" ");
        }
        //第二個內迴圈控制*的個數。
        //注意每行*的個數和行數的關係 2*i-1。
        for (int k = 0; k<2*i-1; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}


3、列印9*9乘法表

#include <stdio.h>

int main(int argc, const char * argv[]) {
    for (int i = 1; i<=9; i++) {
        for (int j = 1; j<=i; j++) {
            printf("%d*%d = %d  ",j,i,j*i);
        }
        printf("\n");
    }
    return 0;
}


十一、break關鍵字及break語句

break和continue語句都可以用在迴圈中,用來跳出迴圈(結束迴圈)

break語句還可以在switch語句中,用來跳出switch語句。

1、break語句用法

當break語句用於do-while、for、while迴圈語句中時,可是程式終止迴圈而執行迴圈後面的語句,通常break語句總是與while語句聯在一起,及滿足條件時便跳出迴圈。

注意:

1)break語句對if-else的條件語句不起作用;

2)在多層迴圈中,一個break語句只向外跳一層。

#include <stdio.h>

int main(int argc, const char * argv[]) {
    float area = 0.0f;
    for (int r = 1; r<=10; r++) {
        area = 3.14f*r*r;
        if (area>100) {
            printf("半徑是%d,圓面積是%.2f",r,area);
            break;
        }
    }
    return 0;
}


十二、continue關鍵字及continue語句

1、continue語句(結束本次迴圈,繼續下次迴圈)用法

     continue語句的作用是跳過迴圈體中剩餘的語句而繼續下一次。continue語句只用在for、while、do-while等迴圈體中,常與if條件語句一起使用,用來加速迴圈。

/*
 contin語句的使用:
 作用,跳出本次迴圈,進行下次迴圈。加速迴圈。
 思考題:
 把100~200之間不能被3乘除的數輸出。
 */


#include <stdio.h>

int main(int argc, const char * argv[]) {
    printf("100~200之間不能被3乘除的數是:\n");
    for (int i = 100; i<=200; i++) {
        if (i%3==0) {
            continue;
        }
        printf("%d  ",i);
    }
    return 0;
}