C语言怎样输出菱形
C语言怎样输出菱形你知道吗?上网搜索一下,但网上的方法都是分为上下部分用两个嵌套for循环输出。下面是小编为大家带来的C语言怎样输出菱形的知识,欢迎阅读。
C语言怎样输出菱形
适有同学问起一些C语言题目,本想上网搜索了事,但网上的方法都是分为上下部分用两个嵌套for循环输出。我想有没有合起来输出的呢,这样符合简洁又美观的要求呢?答案是有的。
题目:输出行列都相等的菱形,如5行5列:
行列 12345
1 *
2 ***
3 *****
4 ***
5 *
分析:
当行数等于总行数的一半时,'*'是递增的,递增为2。
当行数大于总行数的一半时,'*'是递减的,递增为2。
设有一个行列为n的菱形,
我们用变量i作为行数,以0开始,i
k作为n菱第i行要输出的'*'个数。
则i<=n的中值(用m表示,m=(n-1)/2)时,k递增,i>m时,k递减。
因为k相对于m行对称,所以:
当i>m时,i每增加i-m时的k值就和第m-i行的k值相等,即第i-m行和第m-(i-m)相对称。
所以得出结果:
当i<=m时,k=2i+1
当i>m时,k=2(m-(i-m))+1,(m=(n-1)/2)。即k=2n-2i-1
由于我们只需要输出'*'左边的空格即可,所以每行'*'左边的空格的个数为:(n-每行的k)/2。
每行循环输出空格,再循环输出每行的'*',再输出回车,结束一行。
这样我们就可以开始编程了。
#include
int main()
{
int i,j,k,n;/pic/p>
printf("please input odd n:");
scanf("%d",&n); /pic/p>
for (i=0;i
{
if(n>=2*i+1) /pic/p>
k=2*i+1;
else
k=2*n-2*i-1;
for(j=(n-k)/2;j>0;j--) /pic/p>
printf(" ");
for(;k>0;k--) /pic/p>
printf("*");
printf("n"); /pic/p>
}
本来呢题目就到止结束了,但上面的程序还不够完美
比如说,别人输入n值为偶数怎么办?输入非数值呢?
我们加一点东西进去:
#include
int main()
{
int i,j,k,n=0; /pic/p>
do{ /pic/p>
printf("please input odd n, 0 to exit:");/pic/p>
scanf("%d",&n);
if (!(n%2)) /pic/p>
{
printf("you input a even, please input again.n");
continue;
}
for (i=0;i
{
if(n>=2*i+1)
k=2*i+1;
else
k=2*n-2*i-1;
j=(n-k)/2;
for(;j>0;j--)
printf(" ");
for(;k>0;k--)
printf("*");
printf("n");
}
}while(n);
return 0;
}
【C语言怎样输出菱形】相关文章:
C语言如何输出菱形01-27
C语言输出菱形的方法11-18
C语言怎么输出一个菱形10-16
如何更好地用c语言如何输出菱形12-05
C语言数据的输入输出复习11-08
C语言数据输出及轻量进阶01-31
C语言字符串的输入输出03-04
C语言的字符串输出puts()函数12-03
关于c语言约瑟夫问题输出序号算法12-13