本题要求编写程序,打印一个高度为n的、由 “*” 组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数n。
输出格式:
输出由n行星号 “*” 组成的菱形,如样例所示。每个星号后跟一个空格。
输入样例:
7
输出样例:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
#include题目解析:int main() { int i,j,n; scanf("%d",&n); int k=(n+1)/2; for(i=1;i<=k;i++){ for(j=1;j<=n-2*i+1;j++){ printf(" "); } for(j=1;j<=2*i-1;j++){ printf("* "); } printf("n"); } for(i=n-k;i>=1;i--){ for(j=1;j<=n-2*i+1;j++){ printf(" "); } for(j=1;j<=2*i-1;j++){ printf("* "); } printf("n"); } return 0; }
- 看到此题目,要想到用循环的嵌套来解决此问题;
- 嵌套的循环可以构成一个平面图案,用 i 控制行, j 控制列;
- 用一个外循环来打印行,此题目需要我们打印一个菱形图案,可以将图案分为上下两个部分,并对上下两个部分的图行进行仔细分析,找出一行中空格和 * 号的数量规律。
- 以输出的样例为题目,总共由7行,先分析第一行到第四行的规律:第一行:6个空格,一个* ;6=7-(2*1-1) 。第二行:4个空格,3个* ;4=7-(2*2-1) 。第三行:2个空格,5个* ;2=7-(2*3-1) 。 第四行:0个空格,7个* ; 0=7-(2*4-1) 。因此,可以找出列号(j)和行号(i)、空格之间的关系:j<=n-2*i+1; 列号(j)和行号(i)、* 号之间的关系:j<=2*i-1。
for(i=1;i<=k;i++){ //打印行 for(j=1;j<=n-2*i+1;j++){ //打印空格 printf(" "); } for(j=1;j<=2*i-1;j++){ //打印*和空格 printf("* "); } printf("n"); //换行 }- 分析图形的下半部分,第5行到第六行,可以再用一个for循环来控制,外循环的i从 n-(n+1)/2开始,这里需要注意的地方是每一行图形的数量是依次减少的,空格的数量是依次增加的,同样找出图形的规律,用循环的嵌套将此图形实现。



