如图:打印一个菱形
图解分析:
具体思路:
菱形是对称的,我们先找出中心行,发现中心行以上,从上到下空格数减少,中心行以下,空格数增加。
若菱形有N行(N为奇数),中心行为(N+1)/2,上有(包括中心行)N行,下有(不包括中心行)N-1行。
我们先确定行数,设置变量line(中心行),中心行以上可以用循环 for (i = 0; i < line; i++),以下可以用循环 for (i = 0; i < line-1; i++). 注意,这里的i从0开始
中心行及以上:
我们先打印空格,再打印*,第一行空格数量为6,第二行为5,第三行为4,第四行为3……我们找到空格与行数的关系为 中心行-行数,表示为 line-1-i,用循环for (j=0; j< line-1-i; j++),打印好空格就可以打印*了,*与行数的关系为 2*行数-1,表示为 2*i+1,用循环for (j = 0; j < 2*i+1; j++)。
中心行以下:(我们发现与中心行以上结构相反,我们只需要稍作改动即可)
空格数逐渐增加,即for (j = 0; j <= i; j++),中心行以下第一行有11个*,一下第二行有9个……以此类推找到行数与*的关系 中心行-行数)*2-1,即 for (j = 0; j < 2 * (line-1-i) - 1; j++).
代码呈现:
#include <stdio.h>
//打印菱形
int main()
{
int line = 0;
scanf("%d", &line);//7
//中心行以上 line行
int i = 0;
for (i = 0; i < line; i++)
{
//先打印空格
int j = 0;
for (j=0; j< line-1-i; j++)
{
printf(" ");
}
//再打印*
for (j = 0; j < 2*i+1; j++)
{
printf("*");
}
printf("\n");
}
//中心行以下 (line-1)行
for (i = 0; i < line-1; i++)
{
int j = 0;
//打印空格
for (j = 0; j <= i; j++)
{
printf(" ");
}
//再打印*
for (j = 0; j < 2 * (line-1-i) - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
由此我们可以打印任意大小的菱形。