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