如何实现C语言编程输出空心菱形

2024-11-15 18:14:52
推荐回答(2个)
回答1:

#include 
/*
其实打印三角形啦,菱形啦,思路都是一样一样的,
都是按行找规律,然后按照每行的规律按行打印就好了。。。
比如以下是每条边有n=4个*的菱形(边长是4)。
c语言都是按行输出的,我们只要分析第i行要输出些什么就好了:
 0123456
0   *
1  * *
2 *   *
3*     *
4 *   *
5  * *
6   *
从上图可以看出来,
第0行要输出3个空格,1个*
第1行要输出2个空格,1个*,1个空格,1个*
第2行要输出1个空格,1个*,3个空格,1个*
第3行要输出0个空格,1个*,5个空格,1个*
第4行要输出1个空格,1个*,3个空格,1个*
第5行要输出2个空格,1个*,1个空格,1个*
第6行要输出3个空格,1个*
再看上面得出的规律,除了第0行和第6行,其他的都是同一个模式:
对于第i行,打印k1个空格,1个*,k2个空格,1个*。
而且从第4行开始就跟上面对称了,我们完全可以只分析0~3行:
在第i = [0, 3]行内:
对于第i行,打印k1=n-i-1个空格,1个*,k2=2*i-1个空格,1个*。
例外:第0行得到的k2=-1小于0,此时不打印空格也不打印第二个*。
然后我们就可以弄一个小函数啦:
*/
void printline(int i, int n) {
    int k1 = n - 1 - i;
    int k2 = 2 * i - 1;
    int j;
    //打印k1个空格
    for(j=0; j        printf(" ");
    //打印一个*
    printf("*");
    //如果k2小于0就不用打印空格和后面的*啦
    if (k2 > 0) {
        //打印k2个空格
        for(j=0; j            printf(" ");
        printf("*");
    }
    printf("\n");
}
int main()
{
    const int n = 4;
    int i;
    // 先打印0~n-1
    for(i=0; i        printline(i, n);
    // 然后打印n-2~0
    for(i=n-2; i>=0; i--)
        printline(i, n);
    return 0;
}

回答2:

风格充满ntuj6sxrtdhxdf