原题来自菜鸟教程
C++ 实例 - 创建各类三角形图案
文章目录
- 1.*组成的直角三角形
- 2.数字组成的三角形
- 3.字母组成的三角形
- 4.打印*组成的倒三角
- 5.打印数字组成的倒三角形
- 6.*构成的金字塔型正三角形(近似)
- 7.数字构成的金字塔
- 8.*构建倒金字塔
1.*组成的直角三角形
预期效果
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i<=rows; i++){
for (int j=1; j<=i; j++){
cout << "*";
}
cout << endl;
// cout << "\n";别忘了转义符的换行方法啊~
}
}
2.数字组成的三角形
同理~
稍微改一下输出即可 原理相同~
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i<=rows; i++){
for (int j=1; j<=i; j++){
cout << j << " ";//稍微改一下输出即可 原理相同~
}
cout << endl;
// cout << "\n";别忘了转义符的换行方法啊~
}
}
3.字母组成的三角形
#include<iostream>
using namespace std;
int main()
{
char input,alphabet = 'A';
cout << "请输入最后一个大写字母:";
cin >> input;
for (int i=1; i<=(input - 'A' + 1); i++){
for (int j=1; j<=i; j++){
cout << alphabet << " ";
}
alphabet ++;
cout << endl;
// cout << "\n";别忘了转义符的换行方法啊~
}
}
4.打印*组成的倒三角
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=rows; i>=1; i--){
for (int j=i; j>=1; j--){
cout << "*";
}
cout << endl;
// cout << "\n";别忘了转义符的换行方法啊~
}
}
5.打印数字组成的倒三角形
6.*构成的金字塔型正三角形(近似)
到了这里终于是上了一些难度~
难度在于——把空间空出来~
这个还算简单 重点就是把每行第一个星号之前的位置空出来~
本人解法——代码如下:
#include<iostream>
using namespace std;
int main()
{
int space, rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i <= rows; i++){
for (space = 1; space <= rows - i; space++){
// 第一行打 rows-1 个空格
// 最后一行无空格
cout << " ";
}
for(int k = 0; k <= 2*i - 1 ;k++){
cout << "* ";
k++;
}
cout << endl;
// cout << "\n";别忘了转义符的换行方法啊~
}
return 0;
}
这里菜鸟教程给出了一个很有意思的方法:
在打印金字塔的组成部分——“*”时
用了一个巧妙的while循环 打印出每层的 星号
搭配上外层for循环末尾k值的清零
完整代码如下:
#include<iostream>
using namespace std;
int main()
{
int space, rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1,k=0; i <= rows; i++,k=0){
// 每次循环结束 k清0 ~~
for (space = 1; space <= rows - i; space++){
cout << " ";
}
while(k != 2*i-1)
{
cout << "* ";
++k;
}
cout << endl;
}
return 0;
}
7.数字构成的金字塔
完整代码如下:
#include<iostream>
using namespace std;
int main()
{
int rows, count = 0, count1 = 0, k = 0;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i <= rows; ++i){
for (int space = 1; space <= rows - i; ++space){
cout << " ";
++count;
}
while(k != 2*i-1)
{
if(count <= rows-1)
{
cout << i+k <<" ";
++count;
}
else{
++count1;
cout << i+k-2*count1 <<" ";
}
++k;
}
count1 = count = k = 0;
//将count值 k值清零
cout << endl;
}
return 0;
}
难度升级 因为要输出的不止是单调的星号*
而是需要输出这样对称的数字
所以在while循环中 需要分情况
8.*构建倒金字塔
效果如下:
代码如下:
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=rows; i >=1; --i){
for (int space = 0; space < rows - i; ++space)
cout << " ";
for (int j=i; j<= 2*i-1; ++j)
cout << "* ";
for (int j = 0; j<i-1; ++j)
cout << "* ";
cout << endl;
}
return 0;
}