如何打印此图案?

时间:2017-04-23 14:53:37

标签: c

我想创建一个程序来打印一个模式,如下所示,

**********
****  ****
***    ***
**      **
*        *

我尝试过制作这种模式,但它并没有在第一行的中间打印星星。这是代码。

int main()
{
int i,j,k,l;

char c='*';

for(i=1;i<=5;i++)
{
    for(j=5;j>=i;j--)
    {
        printf("%c",c);
    }
    for(k=1;k<=i;k++)
    {
        printf("  ");
    }
    for(l=5;l>=i;l--)
    {
        printf("%c",c);
    }
    printf("\n");
}

getch();

return 0;
}

此程序打印下面显示的模式。

***** *****
****   ****
***     ***
**       **
*         *

那么,你的建议是什么?

5 个答案:

答案 0 :(得分:1)

中心循环应为for(k=1;k<i;k++)<代替<=。)

否则,每一行中间都有一个额外的空间。

答案 1 :(得分:1)

为了避免冗余空间,只需更改:

for(k=1;k<=i;k++)

为:

for(k=1;k<i;k++)

答案 2 :(得分:1)

精度%.precision字段可用于打印特定数量的字符,星号允许将变量用作精度。

#include <stdio.h>

int main ( void)
{
    char stars[10] = "*********";
    char spaces[10] = "         ";
    int i = 0;

    for ( i = 0; i < 5; i++) {
        printf ( "%.*s%.*s%.*s\n", 5 - i, stars, i * 2, spaces, 5 - i, stars);
    }
    return 0;
}

答案 3 :(得分:0)

您只需删除一个空格:

    for(k=1;k<i;k++) // changing the <= to <

答案 4 :(得分:0)

试试这个,

#include <stdio.h>
#include <string.h>

int main()
{
int i,j,k,l;

char c='*';

for(i=1;i<=5;i++)
{
    for(j=5;j>=i;j--)
    {
        printf("%c",c);
    }
    for(k=1;k<i;k++)
    {
        printf("  ");
    }
    for(l=5;l>=i;l--)
    {
        printf("%c",c);
    }
    printf("\n");
}

getch();

return 0;
}

输出:

**********
****  ****
***    ***
**      **
*        *

此代码也显示相同的输出:)如果有人可以尝试这个,如果想:)

#include <stdio.h>
#include <string.h>

int main()
{
int i,j,k=0;


for(i=5;i>=1;i--)
{
    for(j=1;j<=i;j++)
    {
        printf("*");
    }
    for(j=1;j<=k;j++)
    {
        printf(" ");
    }
    k = k+2;
    for(j=1;j<=i;j++)
    {
        printf("*");
    }
    printf("\n");
}

getch();

return 0;
}