首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實作:列印菱形圖案(輸入邊長輸出空心/實心菱形)

     編輯:關於C語言

菱形圖案列印完整教學

本程式根據使用者輸入的奇數 n,列印一個高度為 n 行的菱形圖案。上半部含中線共 (n/2)+1 行,下半部 n/2 行。程式支援連續輸入直到輸入 0 結束。

圖案幾何邏輯

假設 n=7(中線第 4 行):
行號 i (0-based) | 星號範圍 [L, R] | 星號數
0 (頂點) | [3, 3] | 1
1 | [2, 4] | 3
2 | [1, 5] | 5
3 (中線) | [0, 6] | 7
4 | [1, 5] | 5
5 | [2, 4] | 3
6 (底點) | [3, 3] | 1

上半部條件

j >= n/2 - i && j <= n/2 + i

下半部條件

j > i && j < n - i - 1 (i 為下半部行索引 0~n/2-1)

完整程式碼

#include <stdio.h>

int main()
{
    int i, j, n;

    while(scanf("%d", &n), n != 0)
    {
        // 上半部含中線
        for(i = 0; i <= n/2; i++)
        {
            for(j = 0; j < n; j++)
            {
                if(j >= n/2 - i && j <= n/2 + i)
                    printf("*");
                else if(j < n/2 - i)
                    printf(" ");
            }
            printf("\n");
        }

        // 下半部
        for(i = 0; i < n/2; i++)
        {
            for(j = 0; j < n; j++)
            {
                if(j > i && j < n - i - 1)
                    printf("*");
                else if(j <= i)
                    printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

執行結果示意

菱形圖案1

菱形圖案2

改進:列印空心菱形

只在邊界印 *,內部印空白:

// 上半部
if(j == n/2 - i || j == n/2 + i) printf("*");
else printf(" ");
// 下半部
if(j == i+1 || j == n-i-2) printf("*");
else printf(" ");

關鍵技巧總結

  • 利用對稱性分上下兩部分處理。
  • 以中線索引 n/2 為基準計算左右邊界。
  • while(scanf(...), n!=0) 實現多測資處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved