基于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
相关产品推荐
相关产品推荐

