题目描述
给定一个字符,用它构造一个底边长 5个字符,高 3个字符的等腰字符三角形。
输入格式
输入只有一行,包含一个字符。
输出格式
该字符构成的等腰三角形,底边长 5个字符,高 3个字符。
输入输出样例
输入 #1
*
输出 #1
* *** *****
代码如下:
#include<stdio.h>
main()
{
char a;
int k=2; //空格初始值
scanf("%c",&a);
for(int i=0;i<3;i++) //三角形高度
{
for(int j=k;j>0;j--) //循环打印空格
{
printf(" ");
}
k--; //空格循环结束后,改变空格初始值用于下一行空格
for(int m=0;m<(2*i+1);m++) //循环打印*
{
printf("%c",a);
}
printf("\n"); //一行操作结束后,换行
}
return 0;
}
这道题有两个关键点在于:
1,打印空格
2,打印字符
如果只是单纯解决题干的要求,完全可以直接三行printf。但是如果是打印50行100行这种大型三角形不可能一行一行慢慢打。
所以我创建了该字符三角形的模板,改变两个重要变量即可对三角形进行修改。
在这之前先对这个代码进行分析,以下是思路:
(1)首先就是定义char变量,如果题目要求其他变量修改即可
(2)然后定义新变量k 该变量属于两个重要变量之一,用于控制空格数
对k赋初值2,是由于该题目要求三行三角形,易见该三角形第一行*前是两个空格,则赋值2;
(3)下面利用了嵌套循环
先讨论内层,内层用到两个for打印每行的空格和字符:
第一个for解决空格,由于循环前已经定义k,且初值为2,令将k赋给j,循环打印空格
此循环结束后再进行 k-- ,改变空格数,以用来对下一行打印空格做准备
第二个for解决字符打印,该三角形每行字符数为奇数,则用公式运算即可
第二个for结束后换行即可
而第二个for与外层for循环挂钩,外层来增加三角形高度
外层for中定义的i,初值为0,是考虑内层第二个for的公式运用
外层i=0,内层公式2*i+1,代入即打印1个字符,下面每一行以此类推
刚刚提到了改变两个变量即可修改变成新的三角形,一个是一开始对k的赋值,另外一个就是外层for循环中的判断条件
for(int i = 0 ; i < 3 ; i ++) //其中的3是行数,对其修改可改变三角形高度,例如该题是3行三角形
现在重要变量已经解释了:
(1)k用于改变每行空格数
(2)外层for循环的行数改变,他的改变进一步改变了内层第2个循环的公式,从而改变每行的字符数,也就达到每行字符数量的要求
现在修改题目条件,对其进行应用
打印10行三角形,其他要求不变
根据上面的分析,将外层for的判断条件改为:i<10
k改为9(k其实就是行数减1)
改变这两个变量即可
代码如下:
#include<stdio.h>
main()
{
char a;
int k=9; //空格初始值为9
scanf("%c",&a);
for(int i=0;i<10;i++) //三角形高度为10
{
for(int j=k;j>0;j--) //循环打印空格
{
printf(" ");
}
k--; //空格循环结束后,改变空格初始值用于下一行空格
for(int m=0;m<(2*i+1);m++) //循环打印*
{
printf("%c",a);
}
printf("\n"); //一行操作结束后,换行
}
return 0;
}
运行结果:
(第一行是输入的字符,下面是字符三角形)
以上就是对字符三角形模板的概括和分析应用,欢迎大家交流~
如果认为有错误之处也欢迎指出。