Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅使用3个printf和3个n\t在c中创建菱形\_C - Fatal编程技术网

如何仅使用3个printf和3个n\t在c中创建菱形\

如何仅使用3个printf和3个n\t在c中创建菱形\,c,C,我试图在c中创建一个只有3个printfs和3个n\t约束的菱形。这要求我使用循环。我知道如何制作一个倒三角形和一个三角形,但不能使用,因为有太多的打印文件。到目前为止,我将附上我的代码。我知道它不能做成钻石,还有一些非常奇怪的形状,但我正试图把它编辑成钻石,我就是没能弄明白 if (type_of_shape == 5) { for (i = 0; i < width; i++) { for (j = 0;j < ((w

我试图在c中创建一个只有3个printfs和3个n\t约束的菱形。这要求我使用循环。我知道如何制作一个倒三角形和一个三角形,但不能使用,因为有太多的打印文件。到目前为止,我将附上我的代码。我知道它不能做成钻石,还有一些非常奇怪的形状,但我正试图把它编辑成钻石,我就是没能弄明白

if (type_of_shape == 5)
    {

        for (i = 0; i < width; i++)
        {
          for (j = 0;j < ((width - 1) / 2) - i ||(width -1)/2 < i && j + (width-1)/2 < i; j++)
            {
                printf(" ");
            }
            for (k = 0;k<width && k < (j*2+1) ; k++)
            {   
                printf("*");
            }
                printf("\n");
        }
     } 
2个循环,一个循环,一个循环。 2个printf语句。 注: 这适用于奇数宽度。 均匀宽度产生宽度为+1的菱形

我的
我把它归结为一行,它有一个循环,有一个printf语句

这涉及到abs的一些巧妙使用


这是一个完全没有循环的解决方案。通过递归和3条printf语句完成循环:

#include <stdio.h>

void drawDiamond(int width, int stars)
{
    static const char* txt = "*****************************";
     if (stars == width)    {
        printf("%*.*s\n",width, width, txt);
        return;
    }

    printf("%*.*s\n", (width+stars)/2, stars, txt);
    drawDiamond(width, stars+2);
    printf("%*.*s\n", (width+stars)/2, stars, txt);
}

int main(void)
{
    drawDiamond(9, 1);
    return 0;
}

什么是n\t\?@BLUEPIXY n\t\是一个后端反馈、后端选项卡组合-@谢谢。我不知道。但它们不包括在C中,对吗?我相信@chux正在考虑\n\t。但是转义字符的反斜杠必须在字母前面,而不是后面。有什么可以替换******的字符串以使其更干净吗?我知道钻石是由*组成的,但我只是想知道是否有其他方式来说明这一点?否则这非常有用。@sarah char stars[width+1];memsetstars,“*”,宽度;星星[宽度]=0@BLUEPIXY:您不需要使用null来终止字符串,因为这样做的目的是使字符串的星星数超过所需的星星数,并且printf将始终在字符串结束之前停止。@sarah您看到演示了吗?你能看到你试过什么吗?
int main(void)
{
    int width = 9;
    int layer;

    width+=2;
    for(layer=0; layer<width/2; ++layer)
    {
        printf("%*.*s\n", width/2+layer + 1,layer*2 + 1, "**************************");
    }
    layer--;
    while (layer --> 0)
    {
        printf("%*.*s\n", width/2+layer + 1,layer*2 + 1, "**************************");
    }

    return 0;
}
Success time: 0 memory: 2168 signal:0
     *
    ***
   *****
  *******
 *********
  *******
   *****
    ***
     *
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int w = 9;
    for(int l=0; l < w; ++l) printf("%*.*s\n", abs(w/2 - l)+abs((2*l+1)-(2*l+1>w)*2*w), abs((2*l+1)-(2*l+1>w)*2*w), "**************");
    return 0;
}
#include <stdio.h>

void drawDiamond(int width, int stars)
{
    static const char* txt = "*****************************";
     if (stars == width)    {
        printf("%*.*s\n",width, width, txt);
        return;
    }

    printf("%*.*s\n", (width+stars)/2, stars, txt);
    drawDiamond(width, stars+2);
    printf("%*.*s\n", (width+stars)/2, stars, txt);
}

int main(void)
{
    drawDiamond(9, 1);
    return 0;
}