用循环体打印各种图形的诀窍是什么?

老师让打直角三角形,我是先分析行,列的数字规律,然后在写循环体.
直角的还好说,打印空心菱形这种的就不行了.
求大神,空心菱形应该如何打印,我主要想知道思考的过程.

建立笛卡尔坐标系,菱形的方程是|y| + |x| = a,然后两个嵌套for循环循环变量分别从-a取到a,然后判断拿到的坐标在不在方程上,是就打印“*”,这是最笨的一种方法,但是适用很多图形,只要写得出方程就能打印。
还有几种歪门邪道的方法,windowsAPI函数SetConsoleCursorPosition()可以移动光标,要打印到哪里就把光标移动到哪里,不需要一行行的打印。
还可以自己在一个文本里用字符拼一个图形出来,然后读取文件原样打印到控制台上。

三层for循环搞定的事儿

空心菱形的打印方式,同样是分析规律
图片说明

比如打印上面这种图形,分析每一行出现的特征:
(1)对于最顶端,最底端: 多个空格 + 星号 + 多个空格
(2)对于其他行: 多个空格 + 星号 + 多个空格 + 星号

分析出
1. 空格数量与行号之间的关系
2. 星号位置与行号之间的关系

有了这两个关系,就能接解决问题了

http://blog.csdn.net/havedream_one/article/details/47164673

找到规律,有规律就好办了

 bool LingXing(int x, int y)
{
    x = abs(x);
    y = abs(y);
    return (x+y)==4;
}
int main()
{
    for(int i=-4;i<=4;i++)
    {
        for(int j=-4;j<=4;j++)
        {
            if(LingXing(j,i))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}