前言

畫星星的問題在網路上真的是被問到爛掉,
最後寫了這篇主要教怎麼解星星的問題,
下面的例子是以等腰三角形為例,
如果整個分析流程都會的話,
接下來要畫什麼直角三角度、菱形都不是問題了
就是不要問我 C 語言能不能畫出林志玲出來
那也要我有繪畫的天份才行

我們分析的時候,以下面的圖形為例在做說明..

分析

以上面為例,假設要畫高度為 N 的等腰三角度,此處的 N 暫用 5 代替

1.  我們可以發現,它總共有 N 行,等於是換了 N 次行,於是我們可以寫下來了..

        for(i=1; i<=N; i++){ 
                // 總共 N 行
                printf("\n");
        }

2. 接著我們把注意力放在圖形左半邊紅色部份,
    第 1 行 -> 4個空格
    第 2 行 -> 3個空格
    第 3 行 -> 2個空格
    ....
    第 i 行 -> N - i 個空格

   於是我們又可以再寫下來了..

      for(i=1; i<=N; i++){

                // 第 i 行印出第一個 * 前,
                // 先印出 N-i 個空白
                for(j=1; j<=N-i; j++) printf(" ");

                .........                
                // 總共 N 行
                printf("\n");
        }

3. 接著我們把注意力放在圖形中間淡藍色部份,
    第 1 行 -> 1個*
    第 2 行 -> 3個*
    第 3 行 -> 5個*
    .....
    第 i 行 ->  2i-1個 *

   接著我們又可以繼續寫下來了

        for(i=1; i<=N; i++){

                // 第 i 行印出第一個 * 前,
                // 先印出 N-i 個空白
                for(j=1; j<=N-i; j++) printf(" ");

                // 第 i 行有 2i-1 個 *
                for(j=1; j<= 2*i-1 ; j++) printf("*");

               
                // 總共 N 行
                printf("\n");
        }

打完收工。完整的 code 如下所示:

#include <stdio.h>
#define N  5
int main()
{
        int i=0, j=0;
        for(i=1; i<=N; i++){

                // 第 i 行印出第一個 * 前,
                // 先印出 N-i 個空白
                for(j=1; j<=N-i; j++) printf(" ");

                // 第 i 行有 2i-1 個 *
                for(j=1; j<= 2*i-1 ; j++) printf("*");
               
                // 總共 N 行
                printf("\n");
        }
        return 0;
}

其實畫星星的問題都一樣,
"常見"的都是外層回圈包二個內層回圈
再加上  if-else 的判斷,幾乎什麼圖形都畫得出來了
外層回圈大多是換行,
第一個內層回圈大多是 "印出 *" 之前的空白數
第二個內層回圈大多是 "要印出幾個 *"
當然還有些圖型要加上 if-else 方式去完成,
但分析技巧都是由上面三個步驟下來的..
下面有四個圖形,就當作是自己另一個練習
個人覺得難度為 (圖2 = 圖3) > (圖1) > (圖4),
可以依序做練習,
如果下面圖畫不出來的話,
那請再好好參考上面整個分析的流程
加油!!!

 

文章標籤
全站熱搜
創作者介紹
創作者 Edison 的頭像
Edison

藍影

Edison 發表在 痞客邦 留言(0) 人氣(23,078)