首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言打印圖形訣竅:建立座標系、方程判斷、光標定位三大核心思路

     編輯:程式設計綜合問答

核心思路一:笛卡爾座標系 + 方程判斷(通用、最笨但最強)

將控制台視為座標平面,原點 (0,0) 在左上角或中心。雙層循環遍歷行 (y) 和列 (x),判斷座標是否滿足圖形方程。

例子:空心菱形 |x| + |y| = a

#include <stdio.h>
#include <stdlib.h>

int main() {
    int a = 5; // 菱形「半徑」
    for (int y = -a; y <= a; y++) {
        for (int x = -a; x <= a; x++) {
            if (abs(x) + abs(y) == a) // 滿足方程邊界
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

優點:只要能寫出方程(圓 x²+y²=r²、三角形、心形等)就能打印,邏輯統一。
缺點:雙層循環效率較低,複雜圖形方程難推導。

核心思路二:Windows API 光標定位(靈活、可動畫)

使用 SetConsoleCursorPosition 將光標移動到任意 (x,y) 直接打印,無需逐行填充空格。

#include <windows.h>
#include <stdio.h>

void gotoxy(int x, int y) {
    COORD pos = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

int main() {
    // 打印菱形:只在邊界點輸出 *
    for (int i = 0; i <= 5; i++) {
        gotoxy(10 + i, 5 - i); printf("*");
        gotoxy(10 - i, 5 + i); printf("*");
        gotoxy(10 + i, 5 + i); printf("*");
        gotoxy(10 - i, 5 - i); printf("*");
    }
    return 0;
}

優點:精確控制、支援動畫效果(如旋轉、移動)。
缺點:Windows 專用,跨平台需用 ANSI 轉義序列 (\033[y;xH) 或 ncurses。

核心思路三:預先生成文本文件/字符串陣列(最簡暴力)

在編輯器中手工畫好圖形,存為文本文件或字符串陣列,程序啟動時直接讀取/遍歷輸出。

const char *diamond[] = {
    "    *    ",
    "   * *   ",
    "  *   *  ",
    " *     * ",
    "*       *",
    " *     * ",
    "  *   *  ",
    "   * *   ",
    "    *    "
};
for (int i = 0; i < 9; i++) puts(diamond[i]);

優點:零算法、極簡代碼、任意複雜圖形皆可。
缺點:不靈活、無法動態參數化(如可變大小)。

綜合建議:按場景選擇

場景推薦思路
教學/算法練習/需參數化大小座標系 + 方程判斷
控制台遊戲/動畫/光標遊戲API 光標定位 (SetConsoleCursorPosition / ANSI)
固定 Logo/裝飾/一次性輸出預存文本/字符串陣列

進階技巧:分解複雜圖形

  • 空心菱形 = 上三角 + 下三角,分別用單層循環控制每行星號數量與前導空格。
  • 實心三角形:每行星號數 = 2*行號-1,前導空格 = 總行數-行號。
  • 掌握「行號 i、列號 j、星號條件」三要素關係,畫草稿推導規律。

總結

打印圖形三大核心思路:**座標系方程判斷(通用)、光標定位(動態)、預存文本(靜態)**。初學者先練「行、列、條件」分析法,畫草稿找規律,再轉為代碼;進階學習光標控制實現動畫;實際項目中固定圖形直接預存最省事。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved