题目:打印出如下图案(菱形)
思路:
菱形这个图案很有趣,图案里的*数量,从上到下看,有着独特的规律,
1 ,3,5,7,5,3,1
所以,最开始看到这个图的时候,我想到的,是把里面的 * 按顺序打印出来,当然,后来尝试几次,发现是错的,因为我忽略了空白部分。
因此,在打印的时候,大家一定要考虑空白部分,即,printf(“”)输出
好了,既然图形对称规律的特点,这个图案我们分两部分来写
首先,是上半部分
for (i = 1; i <= 4; i++) //先打印前4行{for (j = 1; j <= 4 - i; j++) //每一行先打印需要打印的空格,空格数为(4 - 行号),譬如第1行,需要打4-1个空格,第2行需要打4-2个空格printf(" ");for (k = 1; k <= 2 * i - 1; k++) //打完空格打‘*',每行需要打印2倍行号+1个,譬如第1行打印2*1 - 1个,第2行打印2*2 - 1=3个printf("*");printf("\n");
这里我们用到了几次循环,目的是把*和空白都打印出来,同理反之,下半部分
for (i = 1; i <= 3; i++) //然后打印后面三行,行号从1开始计算{for (j = 1; j <= i; j++) //每行打印空格数为行号数,譬如第1行打印1个,第2行打印2个printf(" ");for (k = 1; k <= 7 - 2 * i; k++) //每行打印7-2*i个’*',譬如第1行打印7-2*1=5个,第2行打印7-2*2=3个printf("*");printf("\n");}
全部代码如下:
#include <stdio.h>int main (void)
{int i, j, k;for (i = 1; i <= 4; i++) //先打印前4行{for (j = 1; j <= 4 - i; j++) //每一行先打印需要打印的空格,空格数为(4 - 行号),譬如第1行,需要打4-1个空格,第2行需要打4-2个空格printf(" ");for (k = 1; k <= 2 * i - 1; k++) //打完空格打‘*',每行需要打印2倍行号+1个,譬如第1行打印2*1 - 1个,第2行打印2*2 - 1=3个printf("*");printf("\n");}for (i = 1; i <= 3; i++) //然后打印后面三行,行号从1开始计算{for (j = 1; j <= i; j++) //每行打印空格数为行号数,譬如第1行打印1个,第2行打印2个printf(" ");for (k = 1; k <= 7 - 2 * i; k++) //每行打印7-2*i个’*',譬如第1行打印7-2*1=5个,第2行打印7-2*2=3个printf("*");printf("\n");}
好了,根据打印结果,我们的做法是正确的
真诚的希望我的回答,能帮助正遇到这个问题的其他同学。