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

C語言圖形輸出:菱形星號列印完整指南

     編輯:關於C

從固定大小到動態生成:菱形列印演算法進化

在螢幕上列印菱形是控制迴圈與數學規律結合的經典練習。本文展示從固定 13 行菱形到動態行數的完整演進。

版本一:固定 13 行菱形(硬編碼版)

#include <stdio.h>

int main() {
    int i, j, k;
    
    // 上半部:第 0-6 行(共 7 行)
    for (i = 0; i < 7; i++) {
        // 列印前導空格
        for (j = 0; j < 6 - i; j++) printf(" ");
        // 列印星號:2*i+1 個
        for (k = 0; k < 2 * i + 1; k++) printf("*");
        printf("\n");
    }
    
    // 下半部:第 7-12 行(共 6 行)
    for (i = 7; i < 13; i++) {
        for (j = 0; j < i - 6; j++) printf(" ");
        for (k = 0; k < 2 * (13 - i) - 1; k++) printf("*");
        printf("\n");
    }
    
    return 0;
}

版本二:動態行數菱形(通用版)

#include <stdio.h>

int main() {
    int lines;
    int i, j, k;
    
    printf("請輸入菱形上半部行數(建議 3-20): ");
    if (scanf("%d", &lines) != 1 || lines < 1) {
        printf("輸入無效\n");
        return 1;
    }
    
    // 上半部(含中線)
    for (i = 0; i < lines; i++) {
        // 空格數:lines - 1 - i
        for (j = 0; j < lines - 1 - i; j++) printf(" ");
        // 星號數:2*i + 1
        for (k = 0; k < 2 * i + 1; k++) printf("*");
        printf("\n");
    }
    
    // 下半部(不含中線)
    for (i = lines - 2; i >= 0; i--) {
        for (j = 0; j < lines - 1 - i; j++) printf(" ");
        for (k = 0; k < 2 * i + 1; k++) printf("*");
        printf("\n");
    }
    
    return 0;
}

數學規律總結

行號 (0-based)前導空格數星號數
上半部第 i 行lines - 1 - i2*i + 1
下半部第 i 行lines - 1 - i2*i + 1

進階變體

  • 空心菱形:只列印首尾星號,中間填空格
  • 字符菱形:用字母 A-Z 遞增/遞減填充
  • 彩色菱形:配合 ANSI 轉義碼輸出彩色終端圖形

常見錯誤

  • 下半部迴圈起始值錯誤(應從 lines-2 遞減到 0)
  • 星號數公式混淆(上半 2i+1,下半對稱)
  • 未處理輸入驗證,導致負數或過大值造成輸出異常
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved