首先我们来看一下for循环的语句结构:
for(声明数据类型1 ;循环的条件2;执行语句3)
{
执行语句4
}
for循环的执行顺序时 1 2 4 3 2 4 3 2 4 3 ……,在判断循环的条件2符合后,执行语句4,执行完4语句后再执行3,然后再次判断是否符合条件
接下来我们试着打印5个 * 试一下
在这个for循环内,声明了整型变量i,初始化i为0,当i<5时,执行打印 * 的语句,然后i++,i由0 变为1 ;(i++ 即后加加,原理是:先自增,然后返回自增之前的值 ++i 即前加加,原理是:先自增,然后返回自增之后的值)然后在此循环。
然后我们看一下打印等腰三角形的结果
在这里我们需要思考的是,什么时候打印 * 什么时候打印换行,通过上面打印5个 * 可以看出单一for循环就可以控制一行打印多少,那么我们就需要嵌套for循环来控制打印几行,下面是代码:
我们首先声明一个整型变量c来存储用户想打印的等腰三角形的行数(腰长);
我们先看变量为 J 的循环,我们需要在这个循环内解决每行打印几个的问题,我们先思考第一行,如果我们输入的c = 3,则最下面一行有5个 * 第二行则有 3个 * 号 ,第一行有1个 * 号,我们可以看出 如果是c = 4,从下到上则是7、5、3、1
我们可以思考出第一行的打印位置是当j = c时打印,第二行打印的3个则是再 c位置的左右两侧 1位,第三行则是 c位置的左右两侧两位,以此类推我们可以知道:
打印起始位置:c-(行数-1);打印终点位置:c+行数-1,(也就是 c-i 到 c+i 下面有解释)
然后我们再看外层的 i 循环,如果我们在 J 循环结束后打印一个换行(printf("\n");),那么这层循环控制的就是行数,因为是从0开始那么打印多少行的判断条件就是 i<c;
我们在将上面两个综合考虑,
打印第一行时,i=0,在c的位置打印一个 *
打印第二行时,i=1,在c-1到c+1的三个位置上打印*
打印第三行时,i=2,在c-2到c+2的三个位置上打印*
……
由此我们可以知道在每行打印的数目就可以通过c和i来控制
那么我们在c-i前打印空格就可以达到我们的目的