我正在尝试编写一个可以制作星星图案的程序。最后一行真的让我感到沮丧。我必须使用printf("*");
printf(" ");
printf("\n");
语句一次创建代码。我想用for循环和if语句完成这个。
应该看起来像这样:
* - 5 spaces before * * * - 4 spaces before * * * * - 3 spaces before * * * * * * * - 0 spaces before *
这是我到目前为止所尝试的:
main()
{
int i, j, k;
i=1;
j=1;
for(i=4;i>=1;i--)
{
for(j=1;j<=4;j++)
{
if(j>=i || ((i+j)==5) && !(j==2) && !(j==3))
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
和
main()
{
int i, j, k;
for(i=4;i>=1;i--)
{
for(j=1;j<i;j++)
{
printf(" ");
}
for(k=4;k>=i;k--)
{
if((k>=i) ||((k>=i) && ((i+k)==5)))
{
printf("*");
}
}
printf("\n");
}
}
我认为我的第一种方法已经过时了。但我认为我在第二个链接中有所作为。我正在尝试在第四行打印“*”和额外2次。编译器似乎忽略了||的第二个链接运营商。我该如何更改if语句以使此模式有效?
答案 0 :(得分:0)
在开始之前,先看一下你需要实现的算法。假设我们想制作一个尺寸为4的三角形 在第一个*之前将有3个空格。然后在下一行它将是2个空格,依此类推。减少每行的空格数,并用该增量减少* s每行的数量。
我们的第一个循环,即外循环,将是需要转到下一行的循环。
for(i = 0; i < size; i++)
printf("\n");
不,我们需要制作它,以便每行打印正确数量的空格。知道第一行有一个大小 - 1#空格,我们得到这个
spaces = size - 1;
for(x = 0; x < spaces; x++)
printf(" ");
现在我们把它放在外部循环的范围内,因为我们希望它为每一行做到这一点。 我们还需要在每一行之后更改空格的值,因为它会减少每一行。
int x, i;
spaces = size - 1;
for(i = 0; i < size; i++){
for(x = 0; x < spaces; x++)
printf(" ");
spaces--;
printf("\n");
}
最后我们需要它来打印* s。正如您所注意到的,* s的数量从1开始并逐行递增。所以我们再做一个for循环
int stars = 1;
for(a = 0; a < stars; a++)
printf("*");
一旦完成,我们需要将它放在外部循环的范围内,在空格之后。
int x, i, a;
spaces = size - 1;
stars = 1;
for(i = 0; i < size; i++){
for(x = 0; x < spaces; x++)
printf(" ");
for(a = 0; a < stars; a++)
printf("*");
spaces--;
stars++;
printf("\n");
}
你有它。我在论坛框中键入了所有这些,因此可能存在一些语法拼写错误,但这应该足够了。这是基本的开始绘图方法。现在你所要做的就是不规则的部分。 我会让你处理它,它就像初始化spaces变量一样简单,以补偿最后一行很长。一旦你补偿了空格,你的最后一行代码就会打印出所有的星星
答案 1 :(得分:0)
您尝试在函数(main()
)中执行过多操作,这就是您失败逻辑的原因。将问题拆分为较小的独立部分。
#include <stdio.h>
void printNSpaces(int count);
void printNStars(int count);
int main(void) {
int n;
for (n = 1; n <= 6; ++n) {
printNSpaces(6 - n);
printNStars(n);
(void) printf("\n");
}
return 0;
}
void printNSpaces(int count) {
while (count--) {
(void) printf(" ");
}
}
void printNStars(int count) {
while (count--) {
(void) printf("*");
}
}
应该很容易添加例外。
printNSpaces()
和printNStars()
非常相似,可以合并为一个通用函数void printN(char c, int count)
,但之后您将无法使用所需的printf(" ")
和printf("*")
陈述。