- 第 141 篇 -
Date: 2025 - 11- 02
Author: 郑龙浩(仟墨)
「经典图形题」集合 | C/C++
1. 正三角形(右对齐)
解释:输出一个向右对齐的三角形,底部最宽,顶部最窄
输入:5
输出:
*
**
***
****
*****
cpp
#include "bits/stdc++.h"
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
for (int i = 1; i <= n; i++) { // n行
// 输出空格
for (int j = 1; j <= n - i; j++) cout << ' ';
// 输出*
for (int j = 1; j <= i; j++) cout << '*';
cout << '\n'; // 换行
}
return 0;
}
2. 正三角形(居中)
解释:输出一个居中对齐的三角形
输入:5
输出:
*
***
*****
*******
*********
只需要将内层循环改成
j <= i * 2 - 1
cpp
#include "bits/stdc++.h"
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
for (int i = 1; i <= n; i++) { // n行
// 输出空格
for (int j = 1; j <= n - i; j++) cout << ' ';
// 输出*
for (int j = 1; j <= i*2 - 1; j++) cout << '*';
cout << '\n'; // 换行
}
return 0;
}
3. 倒三角形(右对齐)
解释:与正三角形相反,顶部最宽,底部最窄
输入:5
输出:
*****
****
***
**
*
cpp
// 3_倒三角形(右对齐)
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
for (int i = 1; i <= n; i++) { // n行
// 输出空格.
for (int j = 1; j < i; j++) cout << ' ';
// 输出*
for (int j = i; j <= n; j++) cout << '*';
cout << '\n'; // 换行
}
return 0;
}
4. 倒三角形(居中)
输入:5
输出:
*********
*******
*****
***
*
c
// 关键:for (int j = i; j <= n * 2 - i; j++)
cpp
// 4_倒三角形(居中)
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
for (int i = 1; i <= n; i++) { // n行
// 输出空格.
for (int j = 1; j < i; j++) cout << ' ';
// 输出*
for (int j = i; j <= n * 2 - i; j++) cout << '*';
cout << '\n'; // 换行
}
return 0;
}
5. 菱形
上半部分是正三角,下半部分是倒三角
比如:输出9行的菱形,上5行是正三角,后四行是倒三角
注意:后四行倒三角,从第一行开始就有空格
输出:
*
***
*****
*******
*********
*******
*****
***
*
cpp
// 4_倒三角形(居中)
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
const int n = 5, m = 4;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) cout << ' ';
for (int j = 1; j <= i * 2 - 1; j++) cout << '*';
cout << '\n';
}
for (int i = 1; i <= m; i++) { // n行
// 输出空格.
for (int j = 1; j <= i; j++) cout << ' ';
// 输出*
for (int j = i; j <= m * 2 - i; j++) cout << '*';
cout << '\n'; // 换行
}
return 0;
}
6. 空心菱形
解释:只输出菱形的边框,内部为空
输入:5
输出:
*
* *
* *
* *
* *
* *
* *
* *
*
cpp
// 6_空心菱形
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
const int n = 5, m = 4;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) cout << ' ';
for (int j = 1; j <= i * 2 - 1; j++) cout << (j == 1 || j == i * 2 - 1 ? '*' : ' ');
cout << '\n';
}
for (int i = 1; i <= m; i++) { // n行
// 输出空格.
for (int j = 1; j <= i; j++) cout << ' ';
// 输出*
for (int j = i; j <= m * 2 - i; j++) cout << (j == i || j == m * 2 - i ? '*' : ' ');
cout << '\n'; // 换行
}
return 0;
}
7. 对角线
解释:在n×n的矩阵中,从左上到右下的对角线
输入:5
输出:
*
*
*
*
*
cpp
// 7_正对角线
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
const int n = 5, m = 4;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++)
cout << (j == i ? "*" : " ");
cout << '\n';
}
return 0;
}
7. 反对角线
解释:在n×n的矩阵中,从右上到左下的对角线
输入:5
输出:
*
*
*
*
*
cpp
// 8_反对角线
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
const int n = 5, m = 4;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
for (int i = 5; i >= 1; i--) {
for (int j = 1; j <= i; j++)
cout << ' ';
cout << "*\n";
}
return 0;
}
9. 正方形(实心/空心)
实心(5×5):
*****
*****
*****
*****
*****
空心(5×5):
*****
* *
* *
* *
*****
cpp
// 9 正方形(实心/空心
// Date:2025-11-02 Author:郑龙浩
#include "bits/stdc++.h"
using namespace std;
const int n = 5, m = 4;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout << "输入宽度\n";
int n; cin >> n;
cout << "实心:\n";
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << "*";
}
cout << '\n';
}
cout << "空心:\n";
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == 1 || i == n || j == 1 || j == n) cout << '*';
else cout << ' ';
}
cout << '\n';
}
return 0;
}