我正在练习在以下结果中生成星星,但我失败了。
1.
*****
****
***
**
*
2.
*
**
***
****
*****
对于我在这种情况下的逻辑,我认为可以通过在循环上使用宽度对齐控制来生成,但结果表明这是错误的......
* * * * *
* * * *
* * *
* *
*
使用代码:
int i,j;
char ch='*';//created for using of alignment
for(i=1;i<=5;i++)
{
for(j=5;j>=i;j--)
{
printf("%5c", ch);
}
printf("\n");
}
对于我的逻辑,我假设可以通过使用对齐方法 (%5c) 来生成。
然而,结果和我预期的不一样。
我已经成功生成了如下所示的星星:
*****
****
***
**
*
使用代码:
int i,j;
for(i=1;i<=5;i++)
{
for(j=5;j>=i;j--)
{
printf("*");
}
printf("\n");
}
我对制作模式1和2的方法有错误的想法吗?
还是错误编码的正确思维?
最佳答案
要对齐,您实际上可能正在绘制一个矩形。在每一行中,您输出一系列星号(可能为空,即零星号)和一系列空格(可能为空,即没有空格)。
它是 (condition) ? (value_if_true) : (value_if_false)
结构的理想应用。您总是绘制完整的矩形,并且图案仅因条件而变化:“这是空格还是星号?”
int i, j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
{
// This generates a full rectangle
// printf("%c", '*');
// This generates an empty rectangle ;-)
// printf("%c", ' ');
// This generates a triangle
printf("%c", (i >= j) ? '*' : ' ');
}
printf("\n");
}
有两个自上而下的三角形由条件 (i >= j) 或 (i
when j is 6-j is
1 5
2 4
... ...
5 1
所以测试是
((6-j) <= i)
。关于c - 对准控制上的星形图案练习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12685122/