Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
用c语言绘制两个连续三角形_C - Fatal编程技术网

用c语言绘制两个连续三角形

用c语言绘制两个连续三角形,c,C,取两个基准长度输入,连续绘制两个三角形,其余两个基准长度输入,连续绘制两个三角形。但我的代码只适用于一个三角形空间。为了清楚起见 #include <stdio.h> int main() { int x,sum=1,i,a,b,z; scanf("%d", &x); z=x; for(i=0;i<x;i++) {if (sum>x) break; for (b=1;b<z;b++)

取两个基准长度输入,连续绘制两个三角形,其余两个基准长度输入,连续绘制两个三角形。但我的代码只适用于一个三角形空间。为了清楚起见

#include <stdio.h>
int main()
{
    int x,sum=1,i,a,b,z;
    scanf("%d", &x);
    z=x;
    for(i=0;i<x;i++)
     {if (sum>x)
       break;
      for (b=1;b<z;b++)
       printf(" ");
       z=z-1;
      for (a=1;a<=sum;a++)
       printf("*");
      printf("\n");
      sum=sum+2;
      }

    return 0;

}
输入为7和21时的预期输出为:

.................*..........
................***.........
...............*****........
..............*******.......
.............*********......
............***********.....
...........*************....
...*......***************...
..***....*****************..
.*****..*******************.
****************************

这是一项非常困难的任务,特别是对于像我这样的初学者来说

如果我理解正确,那么您需要以下内容。考虑到我使用了一个支持C99的编译器

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

int main(void) 
{
    while ( 1 )
    {
        size_t n = 0;
        size_t m = 0;

        printf( "Enter the base length of the first triangle: " );
        scanf( "%zu", &n );

        if ( n == 0 ) break;

        printf( "Enter the base length of the second triangle: " );
        scanf( "%zu", &m );

        if ( m == 0 ) break;

        puts( "" );

        char left[n + 1];
        char right[m + 1];

        memset( left, '*', n );
        memset( right, '*', m );

        left[n]  = '\0';
        right[m] = '\0';

        size_t max = n < m ? m : n;

        for ( size_t i = 0; i < max; i++ )
        {
            printf( "%-*s %*s\n", n, left, m, right );
            if ( i < n ) left[n - i - 1] = '\0';
            if ( i < m ) right[m - i - 1] = '\0';
        }
    }

    return 0;
}

编辑:你应该首先正确地表达你的问题。在我更新了你的帖子之后,我发现它发生了本质上的变化。

欢迎来到StackOverflow,请使用“编辑”按钮来解决您的问题。@Riccado两个底边长度是多少?您能展示三角形的外观吗?@VladfromMoscow输入是7和21,这是三角形的底边长度。第一个三角形的底边有7颗星。第二个三角形的底边有21颗星。但我的代码只能生成一个三角形。我尝试放置另一个三角形,但不起作用。你能看到图像吗?当你输入偶数时,输出是什么?例如:4我看到的第一个真正的问题是你只要求一个数字,而作业要求两个。两个三角形需要在底部对齐。还你说得对。看起来是另一个的并不像看上去那么简单。@Jongware我想修改我演示的程序并不困难,它可以输出底部对齐的三角形。如果不使用数组,我怎么办?@Riccado您可以在positionv行中选择h字符来writeputchar'*'或'0'或'\n'。例如,在我的代码中,范围是memset写入的范围“*”。您使用数组绘制画布。如何在不使用数组的情况下以另一种方式绘制画布?我已经在前面的评论中解释过了。如果position_应该_writev,h==true putchar'*';否则putchar'0';
#include <stdio.h>
#include <string.h>

int main(void){
    int n;
    int small, big;

    printf("Input length of total: ");
    scanf("%d", &n);//check omit, two input ? your's one.
    small = n / 4;
    big = small * 3;

    int total = small + big;
    int height = (big - 1) / 2 + 1;
    char canvas[height][total];

    memset(canvas, '0', sizeof(canvas));
    int i, v, h;
    for(i=0, v = height; i<height; ++i){
        int len;

        --v;
        len = small - i * 2;
        if(len > 0)
            memset(&canvas[v][i], '*', len);
        len = big - i * 2;
        if(len > 0)
            memset(&canvas[v][small + i], '*', len);
    }
    putchar('\n');
    for(v = 0; v < height; ++v){
        for(h = 0; h < total; ++h)
            putchar(canvas[v][h]);
        putchar('\n');
    }
    return 0;
}
******* *********************
******   ********************
*****     *******************
****       ******************
***         *****************
**           ****************
*             ***************
               **************
                *************
                 ************
                  ***********
                   **********
                    *********
                     ********
                      *******
                       ******
                        *****
                         ****
                          ***
                           **
                            *
#include <stdio.h>
#include <string.h>

int main(void){
    int n;
    int small, big;

    printf("Input length of total: ");
    scanf("%d", &n);//check omit, two input ? your's one.
    small = n / 4;
    big = small * 3;

    int total = small + big;
    int height = (big - 1) / 2 + 1;
    char canvas[height][total];

    memset(canvas, '0', sizeof(canvas));
    int i, v, h;
    for(i=0, v = height; i<height; ++i){
        int len;

        --v;
        len = small - i * 2;
        if(len > 0)
            memset(&canvas[v][i], '*', len);
        len = big - i * 2;
        if(len > 0)
            memset(&canvas[v][small + i], '*', len);
    }
    putchar('\n');
    for(v = 0; v < height; ++v){
        for(h = 0; h < total; ++h)
            putchar(canvas[v][h]);
        putchar('\n');
    }
    return 0;
}