在c中绘制两个连续三角形

时间:2014-10-20 07:26:09

标签: 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++)
       printf(" ");
       z=z-1;
      for (a=1;a<=sum;a++)
       printf("*");
      printf("\n");
      sum=sum+2;
      }

    return 0;

}

此输出

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

,输入为7和21的预期输出为:

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

2 个答案:

答案 0 :(得分:0)

这是一个非常困难的任务,特别是对于开端人员(像我:))。

如果我理解正确,那么您需要以下内容。考虑到我使用的是支持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;
}

如果您在帖子的评论中指出输入7和21,那么输出将显示为

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

修改:您应该最初正确地表达您的问题。在点击你的帖子之后,我发现它已基本改变了。

答案 1 :(得分: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;
}