用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;
}