C语言高手请帮我看看这道题
题目:输入正整数n,要求输出2*n-1行的菱形图案。要求菱形顶部无空行,菱形左边紧靠屏幕右侧。例:n=2*************以下是我写的:#include<stdi...
题目:输入正整数n,要求输出2*n-1行的菱形图案。要求菱形顶部无空行,菱形左边紧靠屏幕右侧。
例:n=2
*
***
*****
***
*
以下是我写的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,a,j,b=1,d=1;
scanf("%d",&n);
for(j=1;j<=n+1;j++)
{
for(a=1;a<=n;a++)
printf(' ');
for(i=1;i<=b;i++)
printf('*');
printf('\n');
b=b+2;
}
for(j=1;j<=n;j++)
{
for(a=1;a<=d;a++)
printf(' ');
d=d+1;
for(i=1;i<=b-2;i++)
printf('*');
printf('\n');
b=b-2;
}
return 0;
}
请问有什么问题? 展开
例:n=2
*
***
*****
***
*
以下是我写的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,a,j,b=1,d=1;
scanf("%d",&n);
for(j=1;j<=n+1;j++)
{
for(a=1;a<=n;a++)
printf(' ');
for(i=1;i<=b;i++)
printf('*');
printf('\n');
b=b+2;
}
for(j=1;j<=n;j++)
{
for(a=1;a<=d;a++)
printf(' ');
d=d+1;
for(i=1;i<=b-2;i++)
printf('*');
printf('\n');
b=b-2;
}
return 0;
}
请问有什么问题? 展开
展开全部
首先,你的代码有非常低级的错误,我就不说你了,printf()里面的参数应该是字符串,也就是写成双引号,而你的printf都是单引号,这样运行错误,你把它都改为双引号,运行
其次,对于你的思路,还是正确的,但是有点罗嗦,不过初学者也就不讲究那些了,能输出就好,在第二个for循环中的
for(a=1;a<=d;a++)
printf(” “);
d=d+1;
中,这个d,实在是没有必要,既然是对其窗口左侧输出的,那每行的空格数都是一样的,所以,写成a<=n 就行了,把d=d+1; 删了。
再者,
b=b+2;
也是有问题,因为你最后一次吧b+2之后,再循环,此时,循环条件不满足,不会再执行,所以这里的b也就多加了个2,造成后一个循环里的第一次输出的那行和第一个for循环输出的最后一行的星号数一样。所以,在第一个for循环外面把b=b-2; 就好了。
最后,你的要求是要紧靠窗口左边,那么,就不必要打空格了。把输出空格的那几句都删了,就OK 了,明白了吧?
其次,对于你的思路,还是正确的,但是有点罗嗦,不过初学者也就不讲究那些了,能输出就好,在第二个for循环中的
for(a=1;a<=d;a++)
printf(” “);
d=d+1;
中,这个d,实在是没有必要,既然是对其窗口左侧输出的,那每行的空格数都是一样的,所以,写成a<=n 就行了,把d=d+1; 删了。
再者,
b=b+2;
也是有问题,因为你最后一次吧b+2之后,再循环,此时,循环条件不满足,不会再执行,所以这里的b也就多加了个2,造成后一个循环里的第一次输出的那行和第一个for循环输出的最后一行的星号数一样。所以,在第一个for循环外面把b=b-2; 就好了。
最后,你的要求是要紧靠窗口左边,那么,就不必要打空格了。把输出空格的那几句都删了,就OK 了,明白了吧?
追问
额,是犯了低级错误,不过能用基本的来编但是不罗嗦吗?我也觉得挺长的。
不是全部紧贴左边输出,其实应该是这样的
*
***
*****
***
*
那个b=b+2为什么不需要啊?每行都比上行多两个‘ * ’喔
追答
哎,表达要清楚啊,你说输入2*n-1 行,那么n=2 是就应该是3行,而不是你说的那种。
这先不管了,说你的代码吧。
不是b=b+2 不需要了,而是在第一个for循环外面,加一句b-=2; 原因我上面给你说了。
在就是把空格的控制那句加上,要是菱形的话,每行的空格数都不一样,所以,你的空格的循环需要重新改一下,这个问题留给你了。
#include
#include
int main()
{
int n,i,a,j,b=1,d=1;
scanf("%d",&n);
for(j=1;j
int num=40; //全局变量空格数
void Print(int m,bool flag) //打印星号函数
{
char *s=flag?"*":" ";
for (int i=0;i=(2*n+2)/2) //判断是否到了下半
{
XHNumber=XHNumber-Count;
Count+=4;
num+=1;
}
else num-=1;
Print(num,false); //打印空格
Print(XHNumber,true); //打印星号
printf("\n");
}
return 0;
}
还有罗嗦不等于代码长,而是是否精炼。
展开全部
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,a,j,b=1,d=1;
scanf("%d",&n);
for(j=1;j<=n+1;j++)
{
//for(a=1;a<=n;a++)//修改1
//printf(" ");
for(i=1;i<=b;i++)
printf("*");
printf("\n");
b=b+2;
}
for(j=n;j>0;j--)
{
//for(a=1;a<=d;a++)//修改2
//printf(" ");
d=d+1;
for(i=1;i<=b-4;i++)//修改3
printf("*");
printf("\n");
b=b-2;
}
return 0;
}
//你把代码拷了去看吧
#include <stdlib.h>
int main()
{
int n,i,a,j,b=1,d=1;
scanf("%d",&n);
for(j=1;j<=n+1;j++)
{
//for(a=1;a<=n;a++)//修改1
//printf(" ");
for(i=1;i<=b;i++)
printf("*");
printf("\n");
b=b+2;
}
for(j=n;j>0;j--)
{
//for(a=1;a<=d;a++)//修改2
//printf(" ");
d=d+1;
for(i=1;i<=b-4;i++)//修改3
printf("*");
printf("\n");
b=b-2;
}
return 0;
}
//你把代码拷了去看吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询