You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于VSCode+MinGW64,用C语言绘制16行对称五角星的最简高效方法

用C语言生成16行对称五角星的最简实现方法

我用Visual Studio Code搭配MinGW64编译器,想用C语言生成一个16行、由星号组成的对称五角星,目标样式如下:

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

之前尝试的代码输出了菱形(如下),未达到预期,现在想要最简高效的实现方法,而非修正现有代码:

错误代码

#include <stdio.h>

int main() {
    int i, j, k;
    int size = 16; 
    int mid = size / 2; 

    for (i = 1; i <= mid; i++) {
        // Print leading spaces
        for (j = i; j < mid; j++) {
            printf(" ");
        }
        
        for (k = 1; k <= (2 * i - 1); k++) {
            printf("*");
        }
        
        printf("\n");
    }

    
    for (i = 1; i <= mid; i++) {
        
        for (j = 1; j < i; j++) {
            printf(" ");
        }
        
        for (k = (2 * (mid - i + 1) - 1); k > 0; k--) {
            printf("*");
        }
        
        printf("\n");
    }
    
    return 0;
}

错误输出(菱形)

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

最简实现代码

观察目标五角星的结构,可分成5个逻辑块处理,代码逻辑直观,适合初学者理解:

#include <stdio.h>

int main() {
    int i, j;

    // 第1-5行:顶部小三角形
    for (i = 0; i < 5; i++) {
        // 打印前置空格
        for (j = 0; j < 15 - i; j++) {
            printf(" ");
        }
        // 打印星号
        for (j = 0; j < 2 * i + 1; j++) {
            printf("*");
        }
        printf("\n");
    }

    // 第6行:全星号(32个)
    printf("**********************************\n");

    // 第7-10行:中间倒梯形
    for (i = 0; i < 4; i++) {
        // 前置空格
        for (j = 0; j < 3 + 2 * i; j++) {
            printf(" ");
        }
        // 星号数量:32 - 4*(i+1)
        for (j = 0; j < 32 - 4*(i+1); j++) {
            printf("*");
        }
        printf("\n");
    }

    // 第11行:和第10行对称的梯形
    printf("       ********************\n");

    // 第12-16行:底部带空格的对称行
    for (i = 0; i < 5; i++) {
        // 前置空格
        for (j = 0; j < 4 - i; j++) {
            printf(" ");
        }
        // 左侧星号:11 - 2*i
        for (j = 0; j < 11 - 2*i; j++) {
            printf("*");
        }
        // 中间空格:4*i
        for (j = 0; j < 4*i; j++) {
            printf(" ");
        }
        // 右侧星号:11 - 2*i
        for (j = 0; j < 11 - 2*i; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

代码说明

  • 顶部小三角形:共5行,每行前置空格从15递减到10,星号从1递增到9
  • 中间全星号行:直接打印32个星号,对应目标第6行
  • 中间倒梯形:共4行,前置空格从3递增到9,星号从28递减到20
  • 对称梯形行:单独打印第11行,和第10行对称
  • 底部对称行:共5行,前置空格从4递减到0,左右侧星号从11递减到1,中间空格从0递增到16

这种分块实现的方式无需复杂数学公式,直接对应目标图案的每一部分,逻辑清晰,便于调试。

内容的提问来源于stack exchange,提问作者tsukimiwo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:13:18