close

利用C語言來寫出一個渴望大小的聖誕樹,而聖誕樹的符號任你想要的來顯示。在程式設計上有幾個地方說明一下,依下圖將分成樹枝及樹根來介紹,如下:

Xmas tree.png 

樹枝

依上圖來說,樹枝要建立的符號從第一行到最後一行,圖示由上到下依序變多,且每一行都是+2 累積下來(例:若是第3行,就總共5個圖示,第4行的話,就總共7個圖示...依此類推),所以衍伸出兩個式子:

(1) 樹枝當排要建立的空格數目 = 要建立聖誕樹的總排數 - 目前建立第幾排

(2) 樹枝當排要建立的的符號 = (目前建立第幾排 * 2) - 1 (例:若是第3行,就總共5個圖示,第4行的話,就總共7個圖示...依此類推)

樹根

樹根的話,因有把聖誕樹的樹根呈現出來的畫面比例考慮進去,所以,稍微設計一下,如下:

(1) 樹根當排要建立的的符號 = 聖誕樹一行最多會建立多少個圖示 (例如你想要建立5行的聖誕樹,最多就會顯示9個圖示) * 0.15 (備註:0.15 只是感覺對聖誕樹的呈現比較好看,可以自由修改)

(2) 聖誕樹樹根其建立空白的地方,從面積想像的概念來想,我的樹根面積就是這麼大 (如下圖黃色的地方),扣掉填入樹根圖示的地方 (如下圖藍色的地方),剩下就是填入樹根空白的地方。在從寫程式方面呈現的方式來說,再除以2,就是要建立空白的數目

樹根當排要建立的空格數目 = (聖誕樹一行最多會建立多少個圖示  - 樹根當排要建立的的符號) / 2

(3) 至於聖誕樹樹根要多高 = 根據聖誕樹一行最多會建立多少個圖示 * 0.55 (備註:0.55 只是感覺對聖誕樹的呈現比較好看,可以自由修改)

Xmas tree 1.png

[程式碼]

#include <Stdio.h>
#include <Stdlib.h>
#include <math.h>

int main()
{
    int i,s,m;       //i:聖誕樹的高度, s:聖誕樹顯示符號, m:樹根填充空白的地方 
    float k,l;       //k:計算一行全部符號填滿需要多長, l:樹根填充符號的地方
 
    int x,y,z;       //迴圈所需要使用的變數
    
    //Step 01 : 建立聖誕樹所需要的東西 
    printf("請輸入要建立多高的聖誕樹:\n");
    scanf("%d",&i);
    printf("\n");
    
    
    printf("請輸入聖誕樹要顯示的符號:\n");
    scanf("%s",&s);
    
    //Step 02 : 開始建立聖誕樹 
    printf("開始建立聖誕樹.....\n\n");
    
    //Step 02-1 : 建立聖誕樹的樹枝 
    for(x = 1; x <= i; x++)  //目前建立第幾排聖誕樹的樹枝 
    {
        //建立當排一開始的空格 
        for(y = 0; y < i-x; y++)
        {
            printf(" ");
        }
        
        //建立當排空格後的符號 
        for(z = 0; z < (x*2)-1; z++)
        {
            printf("%s",&s);
        }
        printf("\n");
    }
    
    //Step 02-2 : 建立聖誕樹的樹根 
    k = (2 * i) - 1;    //計算一行全部符號填滿需要多長(聖誕樹最寬的地方)
    l = k * 0.15;       //填充符號的地方 = 計算樹根的寬度 (備註:0.15 只是對聖誕樹呈現的比例而言比較好看) 
    m = (k - l) / 2;    //填充空白的地方 = 聖誕樹的寬度 - 扣掉聖誕樹樹根的寬度 (充符號的地方)
    
    
    for(x = 0; x <= i*0.55; x++)  //目前建立第幾排聖誕樹的樹根 (備註:0.55 只是對聖誕樹呈現的比例而言比較好看) 
    {
        //建立當排一開始的空格 
        for(y = 0; y < m ; y++)
        {
            printf(" ");
        }
        
        //建立當排空格後的符號
        for(z = 0; z < l; z++)
        {
            printf("%s",&s);
        }
        printf("\n");
    }
    
    printf("\n\n");    
    printf("聖誕樹建立完成.....\n");    
    system("pause");
    return 0;    

 

[畫面呈現]

Xmas tree final.png

arrow
arrow
    文章標籤
    C語言
    全站熱搜

    ray771124 發表在 痞客邦 留言(0) 人氣()