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
Java方法栈日志的艺术:从错误定位到性能优化的深度指南
https://www.shuihudhg.cn/133725.html
PHP 获取本机端口的全面指南:实践与技巧
https://www.shuihudhg.cn/133724.html
Python内置函数:从核心原理到高级应用,精通Python编程的基石
https://www.shuihudhg.cn/133723.html
Java Stream转数组:从基础到高级,掌握高性能数据转换的艺术
https://www.shuihudhg.cn/133722.html
深入解析:基于Java数组构建简易ATM机系统,从原理到代码实践
https://www.shuihudhg.cn/133721.html
热门文章
C 语言中实现正序输出
https://www.shuihudhg.cn/2788.html
c语言选择排序算法详解
https://www.shuihudhg.cn/45804.html
C 语言函数:定义与声明
https://www.shuihudhg.cn/5703.html
C语言中的开方函数:sqrt()
https://www.shuihudhg.cn/347.html
C 语言中字符串输出的全面指南
https://www.shuihudhg.cn/4366.html