如何用c语言for循环打出一个空心菱形?


我是码中寻乐,科技领域创作者,很高兴能为你解答。

代码截图:

运行效果截图:

代码:

void print_polygon(int rows)

{

if (rows % 2 == 0)

rows++;

int dir = 1;

int cx = rows / 2;

for (int i = 0; i < rows; i++) {

for (int j = 0; j < rows; j++) {

int offset = i;

if (i > rows / 2)

offset = rows - i - 1;

if (j == cx - offset || j == cx + offset)

printf("*");

else

printf(" ");

}

printf("\\n");

}

}


码中寻乐


图 1

要输出如图1所示的菱形,第一反应是看看这个菱形有什么特点。在草稿纸上比划了半天,将图1转化成了图2用数字表示的图 图 2

比较图1和图2发现有以下特点:

(1)图2中的每一个数字代表图1中每个*号在所在行的列号。

(2)6+6、5+7、4+8、3+9、2+10、1+11均等于12。由于菱形是对称的,所以先考虑上半部分,即如图3所示 图 3

仔细观察图3,可以发现:

(1)图3为6行11列。

(2)左半部分第1行为6、第2行为5、..............、第6行为1;由此可知外循环应使用for(int i=6;i>=1;i--)

(3)用i代表行号,j代表列号;当i=j或者j=12-i时该位置的应输出*号,其他位置输出空格。有了以上分析,就可以写出输出图3所示图形的核心代码,如下: 要想输出菱形的下半部分,只需将外循环改为for(int i=2;i<=6;i++)即可。附录:完整代码:


与界


这是个数学问题。


分享到:


相關文章: