首頁  >  文章  >  後端開發  >  掌握填滿模式:帶有程式碼範例的綜合指南

掌握填滿模式:帶有程式碼範例的綜合指南

WBOY
WBOY原創
2024-07-18 21:23:21476瀏覽

Mastering Filled Patterns: A Comprehensive Guide with Code Examples

歡迎來到我們關於在 C 程式設計中使用循環創建各種填充模式的綜合指南!在本教學中,我們將逐步介紹如何繪製 18 種不同的填滿圖案。這些圖案的範圍從方形和三角形等基本形狀到菱形、六邊形和五邊形等更複雜的形狀。每個模式都是使用巢狀循環創建的,這對於初學者來說是練習 C 語言控制結構的絕佳練習。讓我們開始吧!
您可以在我們的 GitHub 儲存庫中找到所有程式碼。

目錄

  1. 巢狀循環簡介
  2. 實心正方形
  3. 實心直角三角形
  4. 實心倒直角三角形
  5. 填入右對齊三角形
  6. 填充右對齊倒三角形
  7. 填充直帕斯卡三角形
  8. 填充左帕斯卡三角形
  9. 實心等邊三角形
  10. 實心倒等邊三角形
  11. 填充金字塔
  12. 填充倒金字塔
  13. 填充鑽石
  14. 裝滿的沙漏
  15. 實心菱形
  16. 填充平行四邊形
  17. 實心六邊形
  18. 實心五邊形
  19. 實心倒五邊形
  20. 結論

嵌套循環簡介

在我們開始使用模式之前,有必要先了解巢狀循環的概念。嵌套循環是另一個循環內的一個循環。此結構對於處理多維數組和生成模式特別有用。在 C 語言中,典型的巢狀循環結構如下所示:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        // Code to execute
    }
}

實心正方形

解釋:

  • 實心方形圖案是最簡單的圖案之一。
  • 它由 n 行 n 列組成,其中每個單元格包含相同的字元。
  • 我們使用兩個巢狀循環來迭代每一行和每一列,列印每個單元格中的字元。
int n = 5; // size of the square
char ch = '*';

printf("1. Filled Square:\n");
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

*  *  *  *  *  
*  *  *  *  *  
*  *  *  *  *  
*  *  *  *  *  
*  *  *  *  *  

實心直角三角形

解釋:

  • 實心直角三角形圖案從第一行中的一個字元開始,並在後續每一行中增加一個字元。
  • 此模式是透過使用兩個巢狀循環來實現的。外循環控制行數,內循環控制每行列印的字元數。
printf("2. Filled Right Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = 0; j <= i; j++) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

*  
*  *  
*  *  *  
*  *  *  *  
*  *  *  *  *   

實心倒直角三角形

解釋:

  • 實心倒直角三角形圖案與實心直角三角形相反。
  • 第一行以 n 個字元開始,後續每行減少一個字元。
  • 與實心直角三角形類似,此圖案是使用兩個嵌套循環創建的。
printf("3. Filled Inverted Right Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = n; j > i; j--) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

*  *  *  *  *  
*  *  *  *  
*  *  *  
*  *  
*  

填充右對齊三角形

解釋:

  • 實心右對齊三角形圖案與實心直角三角形類似,但三角形是右對齊的。
  • 這種模式是透過在每行之前添加空格來實現的,創建右對齊的外觀。
printf("4. Filled Right Aligned Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
        printf("   ");
    }
    for (int j = 0; j <= i; j++) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

            *  
         *  *  
      *  *  *  
   *  *  *  *  
*  *  *  *  * 

填充右對齊倒三角形

解釋:

  • 實心右對齊倒三角形圖案與實心右對齊三角形相反。
  • 它從第一行中的一個字符開始,並在後續的每一行中增加一個字符,但三角形是右對齊的。
printf("5. Filled Right Aligned Inverted Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = 1; j <= i; j++) {
        printf("   ");
    }
    for (int j = n; j > i; j--) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

*  *  *  *  *  
   *  *  *  *  
      *  *  *  
         *  *  
            *  

填充直帕斯卡三角形

解釋:

  • 實心直角帕斯卡三角形圖案將直角三角形和倒直角三角形組合起來形成類帕斯卡三角形。
  • 圖案的前半部類似實心直角三角形,後半部類似實心倒直角三角形。
printf("6. Filled Right Pascal Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = 0; j < i + 1; j++) {
        printf("%c  ", ch);
    }
    printf("\n");
}
for (int i = 0; i < n; i++) {
    for (int j = n; j > i + 1; j--) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

*  
*  *  
*  *  *  
*  *  *  *  
*  *  *  *  *  
*  *  *  *  
*  *  *  
*  *  
*    

填充左帕斯卡三角形

解釋:

  • 填充的左帕斯卡三角形圖案與填充的右帕斯卡三角形類似,但它是左對齊的。
  • 圖案的前半部類似於填滿的右對齊三角形,後半部類似於填滿的右對齊倒三角形。
printf("7. Filled Left Pascal Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
        printf("   ");
    }
    for (int j = 0; j < i + 1; j++) {
        printf("%c  ", ch);
    }
    printf("\n");
}

for (int i = 0; i < n; i++) {
    for (int j = 0; j < i + 1; j++) {
        printf("   ");
    }
    for (int j = n - 1; j > i; j--) {
        printf("%c  ", ch);
    }
    printf("\n");
}

輸出:

            *  
         *  *  
      *  *  *  
   *  *  *  *  
*  *  *  *  *  
   *  *  *  *  
      *  *  *  
         *  *  
            *   

實心等邊三角形

解釋:

  • 填滿的等邊三角形圖案具有對稱形狀,每行居中。
  • 為了實現這一點,我們在每行之前列印空格以使字元居中。
printf("8. Filled Equilateral Triangle:\n");
for (int i = 0; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j <= i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

輸出:

    * 
   * * 
  * * * 
 * * * * 
* * * * *  

實心倒等邊三角形

解釋:

  • 實心倒等邊三角形圖案是實心等邊三角形的倒轉版本。
  • 它從底部的 n 個字符開始,每行減少一個字符,居中。
printf("9. Filled Inverted Equilateral Triangle:\n");
for (int i = n - 1; i >= 0; i--) {
    for (int j = n - 1; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j <= i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

輸出:

* * * * * 
 * * * * 
  * * * 
   * * 
    *   

填充金字塔

解釋:

  • 填滿的金字塔圖案從頂部的一個字符開始,每行增加兩個字符,形成一個對稱的金字塔。
  • 我們使用空格將每一行置中。
printf("10. Filled Pyramid:\n");
for (int i = 0; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j < (2 * i + 1); j++) {
        printf("%c", ch);
    }
    printf("\n");
}

輸出:

    *
   ***
  *****
 *******
*********  

填充倒金字塔

解釋:

  • 填滿倒金字塔圖案與填滿金字塔相反。
  • 它從頂部 2 * n - 1 個字符開始,每行減少兩個字符,居中。
printf("11. Filled Inverted Pyramid:\n");
for (int i = n; i > 0; i--) {
    for (int j = n - i; j > 0; j--) {
        printf(" ");
    }
    for (int j = 0; j < (2 * i - 1); j++) {
        printf("%c", ch);
    }
    printf("\n");
}

輸出:

*********
 *******
  *****
   ***
    *  

填充鑽石

解釋:

  • 實心菱形圖案是由實心等邊三角形和實心倒等邊三角形組合而成。
  • 它創造了一個對稱的菱形形狀。
printf("12. Filled Diamond:\n");
for (int i = 0; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j <= i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}
for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j <= i; j++) {
        printf(" ");
    }
    for (int j = n - 1; j > i; j--) {
        printf("%c ", ch);
    }
    printf("\n");
}

輸出:

    * 
   * * 
  * * * 
 * * * * 
* * * * * 
 * * * * 
  * * * 
   * * 
    *  

充滿沙漏

解釋:

  • 填滿沙漏圖案將倒等邊三角形和正三角形結合在一起,形成沙漏形狀。
  • 每行透過新增空格居中。
printf("13. Filled Hourglass:\n");
for (int i = 0; i < n; i++) {
    for (int j = 0; j < i; j++) {
        printf(" ");
    }
    for (int j = 0; j < (n - i); j++) {
        printf("%c ", ch);
    }
    printf("\n");
}
for (int i = 1; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j <= i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

Output:

* * * * * 
 * * * * 
  * * * 
   * * 
    * 
   * * 
  * * * 
 * * * * 
* * * * *   

Filled Rhombus

Explanation:

  • The filled rhombus pattern consists of rows where each row is shifted to the right by spaces.
  • This creates a diamond-like shape with equal length sides.
printf("14. Filled Rhombus:\n");
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n - i - 1; j++) {
        printf(" ");
    }
    for (int j = 0; j < n; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

Output:

    * * * * * 
   * * * * * 
  * * * * * 
 * * * * * 
* * * * *  

Filled Parallelogram

Explanation:

  • The filled parallelogram pattern is created by shifting each row to the right.
  • It looks like a rectangle leaning to one side.
printf("15. Filled Parallelogram:\n");
for (int i = 0; i < n; i++) {
    for (int j = 0; j < i; j++) {
        printf(" ");
    }
    for (int j = 0; j < n * 2; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

Output:

* * * * * * * * * * 
 * * * * * * * * * * 
  * * * * * * * * * * 
   * * * * * * * * * * 
    * * * * * * * * * *  

Filled Hexagon

Explanation:

  • The filled hexagon pattern has a wider middle section, with each row increasing and then decreasing in width.
  • This creates a hexagonal shape.
printf("16. Filled Hexagon:\n");
for (int i = 0; i < n / 2; i++) {
    for (int j = n / 2 - i; j > 0; j--) {
        printf(" ");
    }
    for (int j = 0; j < n + 1 * i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}
for (int i = n / 2; i >= 0; i--) {
    for (int j = 0; j < n / 2 - i; j++) {
        printf(" ");
    }
    for (int j = 0; j < n + i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

Output:

  * * * * * 
 * * * * * * 
* * * * * * * 
 * * * * * * 
  * * * * *  

Filled Pentagon

Explanation:

  • The filled pentagon pattern starts with one character at the top and increases, forming a wider base.
  • This creates a pentagon-like shape.
printf("17. Filled Pentagon:\n");
for (int i = 0; i < n + 1; i++) {
    for (int j = n; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j < (i + 1); j++) {
        printf(" %c", ch);
    }
    printf("\n");
}
for (int i = n / 2; i >= 0; i--) {
    for (int j = 0; j < n / 2 - i; j++) {
        printf(" ");
    }
    for (int j = 0; j < n + i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

Output:

      *
     * *
    * * *
   * * * *
  * * * * *
 * * * * * *
* * * * * * * 
 * * * * * * 
  * * * * *  

Filled Inverted Pentagon

Explanation:

  • The filled inverted pentagon pattern is the inverted version of the filled pentagon.
  • It starts with the wider base and decreases, forming an inverted pentagon shape.
printf("18. Filled Inverted Pentagon:\n");
for (int i = 0; i <= n / 2; i++) {
    for (int j = 0; j < n / 2 - i; j++) {
        printf(" ");
    }
    for (int j = 0; j < n + i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}
for (int i = n + 1; i > 0; i--) {
    for (int j = n + 2; j > i; j--) {
        printf(" ");
    }
    for (int j = 0; j < i; j++) {
        printf("%c ", ch);
    }
    printf("\n");
}

Output:

  * * * * * 
 * * * * * * 
* * * * * * * 
 * * * * * * 
  * * * * * 
   * * * * 
    * * * 
     * * 
      *   

Conclusion

Learning to create these filled patterns in C is an excellent way to practice using nested loops and enhance your understanding of how loops work. By experimenting with different values and shapes, you can deepen your understanding of control structures in C and develop a keen eye for detail and logic. Whether you're a beginner or looking to brush up on your skills, these patterns provide a solid foundation for mastering loops in C programming.

We hope this guide has been helpful and encourages you to explore more complex patterns and designs. Happy coding!

For more tutorials and coding tips, be sure to subscribe to our blog and follow us on social media!

以上是掌握填滿模式:帶有程式碼範例的綜合指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn