C语言实现空中矩形图案的多种方法及优化223


本文将详细讲解如何在C语言中输出各种形式的“空中矩形”,即在控制台中打印出由字符组成的矩形图案。我们将探讨多种实现方法,从基础的嵌套循环到利用函数进行代码复用和优化,并分析不同方法的优缺点,最终实现灵活且高效的空中矩形绘制功能。

一、基础方法:嵌套循环

最直接的方法是使用嵌套循环。外层循环控制行数,内层循环控制列数。通过判断当前位置是否在矩形的边界或内部,决定输出字符。以下代码实现了一个简单的实心矩形:```c
#include
int main() {
int rows, cols;
printf("请输入矩形的行数和列数:");
scanf("%d %d", &rows, &cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("*");
}
printf("");
}
return 0;
}
```

这段代码简单易懂,但缺乏灵活性。如果需要绘制空心矩形或其他类型的矩形,就需要修改大量的代码。

二、空心矩形

为了绘制空心矩形,我们需要在输出字符时增加条件判断。只有在矩形的边界上才输出字符,内部则输出空格:```c
#include
int main() {
int rows, cols;
printf("请输入矩形的行数和列数:");
scanf("%d %d", &rows, &cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == 0 || i == rows - 1 || j == 0 || j == cols - 1) {
printf("*");
} else {
printf(" ");
}
}
printf("");
}
return 0;
}
```

这段代码通过判断 `i` 和 `j` 是否等于边界值来控制输出字符,实现了空心矩形的绘制。

三、利用函数进行代码复用

为了提高代码的可读性和可重用性,我们可以将矩形绘制功能封装到函数中:```c
#include
void printRectangle(int rows, int cols, char fillChar, char emptyChar) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == 0 || i == rows - 1 || j == 0 || j == cols - 1) {
printf("%c", fillChar);
} else {
printf("%c", emptyChar);
}
}
printf("");
}
}
int main() {
int rows, cols;
printf("请输入矩形的行数和列数:");
scanf("%d %d", &rows, &cols);
printf("绘制实心矩形:");
printRectangle(rows, cols, '*', ' ');
printf("绘制空心矩形:");
printRectangle(rows, cols, '*', ' ');

return 0;
}
```

这个函数 `printRectangle` 接受行数、列数、填充字符和空字符作为参数,可以绘制各种类型的矩形,极大地提高了代码的复用性。

四、更复杂的图案

我们可以进一步扩展这个函数,使其能够绘制更复杂的图案。例如,我们可以添加参数来控制矩形的边框样式:```c
#include
void printRectangle(int rows, int cols, char cornerChar, char edgeChar, char fillChar) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == 0 || i == rows - 1) {
if (j == 0 || j == cols - 1) {
printf("%c", cornerChar);
} else {
printf("%c", edgeChar);
}
} else {
if (j == 0 || j == cols - 1) {
printf("%c", edgeChar);
} else {
printf("%c", fillChar);
}
}
}
printf("");
}
}
int main() {
int rows, cols;
printf("请输入矩形的行数和列数:");
scanf("%d %d", &rows, &cols);
printRectangle(rows, cols, '+', '-', '*');
return 0;
}
```

这个版本允许自定义矩形的拐角字符、边框字符和填充字符,使得图案更加多样化。

五、错误处理与输入验证

为了提高程序的健壮性,我们需要添加错误处理和输入验证。例如,检查用户输入的行数和列数是否为正整数:```c
#include
// ... (printRectangle 函数保持不变) ...
int main() {
int rows, cols;
do {
printf("请输入矩形的行数和列数(正整数):");
if (scanf("%d %d", &rows, &cols) != 2 || rows

2025-06-18


上一篇:C语言数组输出详解:从基础到进阶技巧

下一篇:C语言实现中文字符串逆序输出的多种方法及效率分析