可以通过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("");
    }
}