可以通过for循环解决该类打印问题:
字符菱形可以被视作是上三角加上最中间的一行以及下三角三个部分,分开打印完成。
即学会了打印金字塔即可学会打印菱形。
首先菱形一般都为奇数层,即一共有奇数行。
首先需要判断上三角有多少行,我们可以通过枚举判断:5层上三角2行,中间一行,下三角2行。七层上三角3行,中间一行,下三角3行,即(总行数n)/2,总行数同时也是中间行的字符个数。
得到了上三角的行数之后确定了第一个for循环的次数即为n/2
然后判断上三角的字符如何打印:若总行数为5,第一行打印两个空格,再打印一个字符,若总行数为7,第一行打印三个空格,再打印三个个字符,得出结论:空格数即为上三角的行数,且随行递减。而字符数则是2*第几行 -1,即2*i -1
中间行直接打印n个字符即可
下三角可以认为是上三角的对称图形,以n=5为例,第四行即是第二行,第五行即是第一行,只需要将第一个for循环改成--模式即可。
代码如下:
可以将代码中的n也能设置成输入形式,即可设定菱形的行数与菱形字符。
#include "stdio.h"
int main(){
int i,j;
char c;
int n = 5;
scanf("%c",&c);
int num = n/2; //取一半作为第一行要打印的空格数,即五个的第一行打5/2个空格,7个的第一行打7/2三个空格
for(i = 1; i <= num; i++) //首先打印上半个三角
{
for(j = i; j <= num; j++) //第一行打印num个空格,第二行打印num-1个空格
putchar(' ');
for(j = 1; j <= 2*i - 1; j++) //打印完空格后开始打印需要的字符,第一行打印1个,第二行打印3个,即第i行打印2*i-1个
putchar(c);
puts(""); //每次一行结束换行
}
for(i = 1; i <= n; i++) //最中间一行输出n个字符
{
putchar(c);
}
puts("");
for(i = num; i >= 1; i--) //打印下三角,通过减小的for循环实现,与上三角是对称的,以五为例,第四行我们可以认为是第二行
{
for(j = i; j <= num; j++) //第四行即是第二行,打印一个空格,第五行即第一行打印一个空格
putchar(' ');
for(j = 1; j <= 2*i - 1; j++) //第四行即第二行,打印三个字符,第五行即第一行打印一个字符
putchar(c);
puts("");
}
}

京公网安备 11010502036488号