循环结构-打印菱形(C语言)

同http://www.cnblogs.com/MichaelLee2015/p/4403005.html

int main()
{
    int h;//表示菱形的高的一半,也就是用户输入的数
    printf("请输入xxx我也不知道这里怎么说
");//提示用户输入一个数
    scanf("%d",&h);//把用户的输入读取进来并存到h中

    //上半部分
    //思路:我们想输出菱形,要考虑每一行的星号前面有几个空格,每一行有几个星号
    //经过推(数)理(数)我们发现,星号最多一行的星号个数为 (2h-1) 个
    //第一行前面空格个数为h-1;第i行(i<h)空格个数为h-i
    //我们以h=6为例,星号最多的一行是第6行,*个数为11个,第6行前面是没有空格的
    //第一行前面有5个空格

    for (int i = 1; i <= h; i++)//第几行
    {
        for (int j = 1; j <= h - i; j++)//输出该行的空格
        {
            printf(" ");//输出一个空格
        }

        for (int k = 1; k <= 2 * i - 1; k++)//输出该行的* 每行星号个数为(2i-1)
        {
            printf("*");
        }

        printf("
");//当前行输出完成,换行
    }

    //到这里,上半行完成
    //下面打印下半行

    //下半行的话就完全反过来。下半行的第1行前面有一个空格 有[2(h-1)-1]个星号
    //下半行的第m行有m个空格,[2(h-m)-1]个星号
    //下半行共有h-1行

    for (int m = 1; m <= h - 1; m++)//m表示下半行的行数
    {
        for (int n = 1; n <= m; n++)//输出空格
        {
            printf(" ");
        }

        for (int o = 1; o <= 2 * (h - m) - 1; o++)//输出*
        {
            printf("*");
        }

        printf("
");//换行
    }

    return 0;
}
原文地址:https://www.cnblogs.com/MichaelLee2015/p/4417217.html