- 题目名称:n阶实心菱形
- 类型:循环
- 描述:根据用户的输入n,输出n阶实心菱形
- n阶实心菱形:两对角线均为(2n-1)个星号“*”长度,即整个图形共有(2n-1)行和列。
- 思路:我们知道n阶实心菱形共有(2*n-1)行和列,每行都有空格和星号要打印(对角线那行除外),通过两个循环(一个控制行数,一个控制列数)可实现行列上空格或星号的打印;每行都是打印空格后打印星号,而每行先打多少空格再打多少星号则要通过数学规律来求得;还有切记打完这一行的星号后就不用再考虑同一行后面“好像还有的”空格了(打完前面的空格和星号,形状就已经出来了,不要思维固住了,认为后面还要打印一定量的空格)。最后可将菱形以第n行为界分为上下两部分(上面n行,下面(n-1)行);上面部分中前(n-1)行与下面部分是完全对称的,这样只要打印出了上部分,下部分自然能出来。
代码:
1.对于上半部分:
运行结果(n=6)如下:
注释:
①把上半部分分成左右两部分(以对角线为界),左边部分(包括对角线)中第i行有i个星号,右边有(i-1)个,则每一行中星号的左边空格数为(n-i)个;
②每一行最后一个空格在第(n-i)列,则每行第一个星号在第(n-i+1)列;
③由①可知,每行星号数为(2*i-1)个,则每行最后一个星号在第(n-i)+(2*i-1)=(n+i-1)列。
2.对于下半部分(把上半部分的(n-1)行倒过来输出即可)
=>把“for(int i=1;i<=n;i++)”改为“for(int i=(n-1);i>=1;i--)”;
=>因为上半部分前(n-1)行代码为“for(int i=1;i<=(n-1);i++)”;
=>其余不变。
运行结果(n=6)如下:
上下两部分合并即可得到完整代码:
运行结果如下:
注意(可能导致编译出错的):
1.for语句小括号内是“;”,而非“,”;
2.for语句小括号后不要加“;”(加了就表示语句结束了,后面的将不再执行);
3.在某for语句内定义的变量只能用于本for语句内使用,即该变量的作用域为该for语句。