我必须在正方形上画一个带星号的三角形,预期输出如下图。
指令是这样的。编写一个C程序,从用户那里读取一个数字n,并允许用'*'字符打印一个有屋顶的房子。房子应该是一个n x n的正方形,屋顶是两条45度的对角线,形成一个屋顶(如果n是奇数,屋顶就会在顶部完美地关闭)。我创建了一个三角形和正方形,但我不能把它们结合起来。三角形
{
int i,j,k,x,h=0;
printf("\n\n");
for( i = 1; i <= 5; i++)
{
for( k = 1; k <=5-i; k++)
{
printf(" ");
}
printf("*");
for( j = 2; j <= 2*i-2; j++)
{
printf(" ");
}
if(i>1) printf("*");
printf("\n");
}
for ( i = 1; i <= 5; i++)
{
printf("* ");
}
printf("\n\n");
return 0;
}
首先,你可能会发现,你需要有两种情况。n
是奇数还是 n
是偶数。
那么如果 n
是奇数,你需要迭代一下 1+(n-1)/2
次,如果 n
是偶。n/2
次,以打印 ^
形状。
当你打印出一个像 ^
,你需要打印一行带有 n
'*'
s.
然后你需要迭代 n-2
次,并打印一行带有 '*'
, n-2
' '
s和另一 '*'
每次都是如此。
最后打印一行带有 n
'*'
s.
试着把每个句子转换成一个c代码块就可以了。
这其中有些棘手的代码。
#include <stdio.h>
int main(void) {
int width = 8;
char stars[width];
memset(stars, '*', width);
printf((width%2)? "%*s\n" : "", (width+1)/2, "*");
for(int i=0; i< (width)/2; ++i)
{
printf("%*s%*s\n", (width+1)/2-i-(width%2), "*", 2*(i+1) - !(width%2), "*");
}
printf("%.*s\n", width, stars);
for(int i=0; i<width-2; ++i)
{
printf("*%*s\n", width-1, "*");
}
printf("%.*s\n", width, stars);
return 0;
}
width
作为 7
和 8
:Success #stdin #stdout 0s 4264KB
*
* *
* *
* *
*******
* *
* *
* *
* *
* *
*******
Success #stdin #stdout 0s 4356KB
**
* *
* *
* *
********
* *
* *
* *
* *
* *
* *
********