標籤:目標 fine 執行 菱形 資訊 ret 距離 數組 log
今天我們先來講解一道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語言代碼訓練(一)