近日在完成程序设计作业的时候,总是会遇到一类打印“金字塔”类型的题目,经过一番认真的研究,我们对这种题目有了如下几点总结:
1.观察行列之间的关系
2.打印空格,图形和各种符号
3.循环的参数代表的含义
那么,让我们看几道C语言的金字塔打印题目吧
输入需要打印的行数,比如3 ,打印出来:
*
* *
* * *
本题的没有答应空格的过程,核心在于打印的行数和每行的*号个数,先看如下代码:
#include<stdio.h>
int main()
{
int i, j, k;
printf("请输入打印的行数\n");
scanf_s("%d", &k);
for (i = 1;i <= k;i++)//用k代表总行数,i表示在第i行
{
for (j = 1;j <= i;j++)//用j代表每一列打印的数
printf("* ");
printf("\n");
}
return 0;
}
经过我们的观察,每一行打印的*数和每一行对应的行数相等,所以i<=j打印 *
那么,我们再来看看下面这道题:
输入需要打印的行数,比如3,打印出来:
*
* *
* * *
明显本题将上面那个题目的金字塔倒过来了,那么有什么不一样呢?
#include<stdio.h>
int main()
{
int i, j, k;
printf("请输入打印的行数\n");
scanf_s("%d", &k);
for (i = k;i >= 1;i--)
{
for (j = 1;j < i;j++)
{
printf(" ");
}
for (j = 0;j <= k - i;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
这个显然也是存在规律的,仍然用i表示第多少行,显然 空白数加上打印数是等于总行数的,并且空白数是从最大行数减到0的,所以我们把这些想法换成循环,仍然让i作为行数遍历到每一行,然后根据规律打印每一行的符号。
形如
*
* *
* * * 都是上面进行空格数量变化的结果
那么我们如何打印
*
* * *
* * * * *(对齐的有点问题,但是是个对称的1,3,5三角形)
本题其实,就是将形式2的另外一部分打印了出来,我们只需要在后面加上一个递减的代码即可
#include<stdio.h>
int main()
{
int i, j, k;
printf("请输入打印的行数\n");
scanf_s("%d", &k);
for (i = k;i >= 1;i--)
{
for (j = 1;j < i;j++)
{
printf(" ");
}
for (j = 0;j <= k - i;j++)
{
printf("*");
}
for (j = k - i;j > 0;j--)
{
printf("*");
}
printf("\n");
}
return 0;
}
这样就可以打印成功了!
谢谢大家。