#include <stdio.h>

int max(int a, int b) { return a > b ? a : b; }

/*

  • 判断坐标 coord 是否在 offset (包含) 和 offset + size (不包含) 之间 */ int isInRange(int coord, int offset, int size) { if (coord >= offset && coord < offset + size) { return 1; } else { return 0; } }

/*

  • 判断坐标 coord 是否位于 offset 或 offset + size 的边界上 */ int isAtBorder(int coord, int offset, int size) { if (coord == offset || coord == offset + size) { return 1; } else { return 0; } }

/*

  • 绘制由 '#' '*' 和空格组成的方块图案
  • 参数:
  • size1: 外层方块的边长
  • x_offset: 内层方块相对于外层方块 x 轴方向的偏移量
  • y_offset: 内层方块相对于外层方块 y 轴方向的偏移量
  • size2: 内层方块的边长 */ void squares(int size1, int x_offset, int y_offset, int size2) { // 计算外层方块和内层方块在 x 轴方向的最大值,记为 w int w = max(size1, x_offset + size2); // 计算外层方块和内层方块在 y 轴方向的最大值,记为 h int h = max(size1, y_offset + size2);

// 遍历 y 轴方向 for (int y = 0; y < h; y++) { // 遍历 x 轴方向 for (int x = 0; x < w; x++) { // 如果满足以下条件之一,则打印 '' // 1. x 坐标在内层方块 x 轴范围内,并且 y 坐标位于内层方块的上下边界 // 2. y 坐标在内层方块 y 轴范围内,并且 x 坐标位于内层方块的左右边界 if ((isInRange(x, x_offset, size2) && (y == y_offset || y == y_offset + size2 - 1)) || (isInRange(y, y_offset, size2) && (x == x_offset || x == x_offset + size2 - 1))) { printf(''); // 否则,如果满足以下条件之一,则打印 '#' // 1. x 坐标在外层方块 x 轴范围内,并且 y 坐标位于外层方块的上下边界 // 2. y 坐标在外层方块 y 轴范围内,并且 x 坐标位于外层方块的左右边界 } else if ((x < size1 && (y == 0 || y == size1 - 1)) || (y < size1 && (x == 0 || x == size1 - 1))) { printf('#'); // 否则,打印空格 } else { printf(' '); } } // 换行 printf('\n'); } }

C语言图形绘制:使用函数绘制方块图案

原文地址: https://www.cveoy.top/t/topic/RTJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录