1. 程式人生 > >C語言代碼訓練(一)

C語言代碼訓練(一)

color tro 題型 blank adding bsp 喜歡 add 方便

今天我們先來講解一道C語言的經典例題,也是從零開始系列中的一道課後練習題。

請用控制臺程序繪制如下圖案。

技術分享

循環經典例題

分析情況

這個題目是要求打印30行"*",每行打印的個數不同。通過這個信息,我們應該立刻反映出運用循環來完成。那麽我們想想,在循環部分我們都學到了什麽。

關於循環,我首先會想到一些例題:

例題1

打印30個"*",每個"*"占一行。

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

例題2

打印一行"*",個數為30

int i;for (i = 0; i < 30; i++)
{    printf("*");
}

這兩個題目的代碼只差一個\n,結果卻完全不同。掌握了這兩個例題,我們自然能夠完成下面這個例題了。

例題3

打印一個由"*"組成的30行30列的矩陣。

int main(){    int i, j;    for (i = 0; i < 30; i++)
    {        for (j = 0; j < 30; j++)
        {            printf("*");
        }        printf("*\n");
    }    return 0;
}

執行結果如下:

技術分享

30*30矩陣

我們再把例3的要求改一改,要求如下

例題4

打印30行“*”。第一行打印1個“*”,第二行打印3個“*”,第三行打印5個“*”,... ,第三十行打印59個“*”。

在前面的程序中,我們用變量i控制行的循環,變量j控制列的循環。i的範圍0~29,j的範圍0~29。那麽在例題4中,i和j有什麽樣的關系呢?

  • 第一行:i = 0; j循環1次

  • 第二行:i = 1; j循環3次

  • 第三行:i = 2; j循環5次

  • ...

  • 第三十行:i = 29; j循環59次

於是得到這樣一個關系:

第n行:i = n - 1; j循環2i + 1次

那麽如何實現循環2i + 1次呢,就是讓j從0到2i + 1。

按照這個思路,可以得到下面的代碼:

#include <stdio.h>#define LINE 30int main(){    int i, j;    for (i = 0; i < LINE; i++)
    {        for (j = 0; j < 2 * i + 1; j++)
        {            printf("*");
        }        printf("\n");
    }    return 0;
}

執行結果如下:

技術分享

例題4

這裏要說一個問題,其實for循環有兩種常見形式:

for (i = 0; i < n; i++)

for (i = 1; i <= n; i++)

這種寫法執行的次數相同,可以相互代替。大部分C語言程序員喜歡第一種方式,因為數組的下標訪問是從0開始的,這樣寫更方便。目前大家可以選擇自己喜歡的方法。

好了,回到例題中來。現在我們的代碼距離目標輸出已經很接近了,缺少的是在每行“*”之前需要輸入不同數量的空格。我們分析i和空格數量,可以得到如下關系:

每行輸出LINE - i個空格

於是,我們得到了最終的實現程序。

答案

#include <stdio.h>#define LINE 30int main(){    int i, j;    for (i = 0; i < LINE; i++)
    {        for (j = 0; j < (LINE - i); j++)
        {            printf(" ");
        }        for (j = 0; j < 2 * i + 1; j++)
        {            printf("*");
        }        printf("\n");
    }     return 0;
}

運行一下這段代碼,你會看到打印結果就是最前面的那張圖。

課後練習

自己編寫代碼,打印出下面這張圖。

技術分享

菱形 更多的題型請點擊這裏

C語言代碼訓練(一)