目录
30. C++根据用户输入的行数打印菱形。设计思路代码实现代码含义C++常用方法使用基本控制结构基于数学公式的图形生成使用二维数组预存储图形递归分形图形外部图形库辅助动态图形生成基于数学公式的图形生成使用二维数组预存储图形递归分形图形外部图形库辅助动态图形生成基于数学公式的图形生成使用二维数组预存储图形递归分形图形外部图形库辅助动态图形生成
30. C++根据用户输入的行数打印菱形。
设计思路
菱形的打印可以通过对称性实现,将问题分解为上三角和下三角两部分。上三角部分行数逐行递增,下三角部分行数逐行递减。每行的空格和星号数量根据当前行数与总行数的关系动态调整。
确定行数:用户输入的行数应为奇数,以确保菱形对称。若为偶数,可自动调整为最近的奇数。上三角部分:从1开始,每行星号数量为,空格数量为
2*i-1(假设
(n/2) - i + 1为总行数)。下三角部分:从
n开始递减,星号和空格数量与上三角对称。
n/2
代码实现
#include <iostream>
using namespace std;
void printDiamond(int n) {
// 确保n为奇数
if (n % 2 == 0) {
n++;
cout << "输入行数自动调整为奇数: " << n << endl;
}
int half = n / 2;
// 打印上三角
for (int i = 1; i <= half + 1; i++) {
// 打印空格
for (int j = 1; j <= half - i + 1; j++) {
cout << " ";
}
// 打印星号
for (int j = 1; j <= 2 * i - 1; j++) {
cout << "*";
}
cout << endl;
}
// 打印下三角
for (int i = half; i >= 1; i--) {
// 打印空格
for (int j = 1; j <= half - i + 1; j++) {
cout << " ";
}
// 打印星号
for (int j = 1; j <= 2 * i - 1; j++) {
cout << "*";
}
cout << endl;
}
}
int main() {
int rows;
cout << "请输入菱形的行数: ";
cin >> rows;
printDiamond(rows);
return 0;
}
代码含义
输入处理:函数接收用户输入的行数,调用
main函数。奇数调整:若输入为偶数,自动加1调整为奇数。上三角循环:
printDiamond
外层循环控制行数,从1到。内层第一个循环打印空格,数量为
half + 1,实现右对齐。内层第二个循环打印星号,数量为
half - i + 1,形成递增的奇数序列。 下三角循环:
2*i-1
外层循环从递减到1。空格和星号逻辑与上三角对称,实现递减效果。 输出格式:每行结束后换行,确保菱形结构清晰。
half
C++常用方法
使用基本控制结构
通过循环结构(如、
for)嵌套控制行和列的输出,结合条件判断打印特定字符(如
while或空格)。例如打印金字塔:
*
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n - i; ++j) cout << " ";
for (int j = 1; j <= 2 * i - 1; ++j) cout << "*";
cout << endl;
}
基于数学公式的图形生成
利用数学函数(如正弦、余弦)生成曲线或对称图形。例如打印圆形轮廓:
int radius = 5;
for (int y = -radius; y <= radius; ++y) {
for (int x = -radius; x <= radius; ++x) {
cout << (x*x + y*y <= radius*radius ? "*" : " ");
}
cout << endl;
}
使用二维数组预存储图形
先将图形布局存储在二维数组中,再遍历输出。适合复杂或非对称图形:
char canvas[10][10] = {0};
// 填充数组逻辑(如绘制对角线)
for (int i = 0; i < 10; ++i) canvas[i][i] = '*';
// 输出
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) cout << canvas[i][j];
cout << endl;
}
递归分形图形
递归适用于分形结构(如谢尔宾斯基三角形)。通过递归分解问题:
void drawTriangle(int n, int x, int y) {
if (n == 0) return;
// 绘制当前层级逻辑
drawTriangle(n - 1, x - delta, y + delta); // 左子三角形
drawTriangle(n - 1, x + delta, y + delta); // 右子三角形
}
外部图形库辅助
使用图形库(如OpenGL、Qt)绘制更复杂的图形。例如Qt绘制矩形:
QPainter painter(this);
painter.drawRect(10, 10, 100, 100);
动态图形生成
结合用户输入或实时数据调整图形。例如根据输入调整菱形大小:
int size;
cin >> size;
for (int i = -size; i <= size; ++i) {
for (int j = -size; j <= size; ++j) {
cout << (abs(i) + abs(j) <= size ? "*" : " ");
}
cout << endl;
}
```### 使用基本控制结构
通过循环结构(如`for`、`while`)嵌套控制行和列的输出,结合条件判断打印特定字符(如`*`或空格)。例如打印金字塔:
```cpp
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n - i; ++j) cout << " ";
for (int j = 1; j <= 2 * i - 1; ++j) cout << "*";
cout << endl;
}
基于数学公式的图形生成
利用数学函数(如正弦、余弦)生成曲线或对称图形。例如打印圆形轮廓:
int radius = 5;
for (int y = -radius; y <= radius; ++y) {
for (int x = -radius; x <= radius; ++x) {
cout << (x*x + y*y <= radius*radius ? "*" : " ");
}
cout << endl;
}
使用二维数组预存储图形
先将图形布局存储在二维数组中,再遍历输出。适合复杂或非对称图形:
char canvas[10][10] = {0};
// 填充数组逻辑(如绘制对角线)
for (int i = 0; i < 10; ++i) canvas[i][i] = '*';
// 输出
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) cout << canvas[i][j];
cout << endl;
}
递归分形图形
递归适用于分形结构(如谢尔宾斯基三角形)。通过递归分解问题:
void drawTriangle(int n, int x, int y) {
if (n == 0) return;
// 绘制当前层级逻辑
drawTriangle(n - 1, x - delta, y + delta); // 左子三角形
drawTriangle(n - 1, x + delta, y + delta); // 右子三角形
}
外部图形库辅助
使用图形库(如OpenGL、Qt)绘制更复杂的图形。例如Qt绘制矩形:
QPainter painter(this);
painter.drawRect(10, 10, 100, 100);
动态图形生成
结合用户输入或实时数据调整图形。例如根据输入调整菱形大小:
int size;
cin >> size;
for (int i = -size; i <= size; ++i) {
for (int j = -size; j <= size; ++j) {
cout << (abs(i) + abs(j) <= size ? "*" : " ");
}
cout << endl;
}
```### 使用基本控制结构
通过循环结构(如`for`、`while`)嵌套控制行和列的输出,结合条件判断打印特定字符(如`*`或空格)。例如打印金字塔:
```cpp
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n - i; ++j) cout << " ";
for (int j = 1; j <= 2 * i - 1; ++j) cout << "*";
cout << endl;
}
基于数学公式的图形生成
利用数学函数(如正弦、余弦)生成曲线或对称图形。例如打印圆形轮廓:
int radius = 5;
for (int y = -radius; y <= radius; ++y) {
for (int x = -radius; x <= radius; ++x) {
cout << (x*x + y*y <= radius*radius ? "*" : " ");
}
cout << endl;
}
使用二维数组预存储图形
先将图形布局存储在二维数组中,再遍历输出。适合复杂或非对称图形:
char canvas[10][10] = {0};
// 填充数组逻辑(如绘制对角线)
for (int i = 0; i < 10; ++i) canvas[i][i] = '*';
// 输出
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) cout << canvas[i][j];
cout << endl;
}
递归分形图形
递归适用于分形结构(如谢尔宾斯基三角形)。通过递归分解问题:
void drawTriangle(int n, int x, int y) {
if (n == 0) return;
// 绘制当前层级逻辑
drawTriangle(n - 1, x - delta, y + delta); // 左子三角形
drawTriangle(n - 1, x + delta, y + delta); // 右子三角形
}
外部图形库辅助
使用图形库(如OpenGL、Qt)绘制更复杂的图形。例如Qt绘制矩形:
QPainter painter(this);
painter.drawRect(10, 10, 100, 100);
动态图形生成
结合用户输入或实时数据调整图形。例如根据输入调整菱形大小:
int size;
cin >> size;
for (int i = -size; i <= size; ++i) {
for (int j = -size; j <= size; ++j) {
cout << (abs(i) + abs(j) <= size ? "*" : " ");
}
cout << endl;
}


