fuxi3901153
2016-08-31 23:12
#include <stdio.h>
int main()
{
int i, j, k;
for(i=1; i<5; i++)
{
/* 观察每行的空格数量,补全循环条件 */
for(j=i;j<5;j++)
{
printf(" "); //输出空格
}
/* 观察每行*号的数量,补全循环条件 */
for(k=0;k<2*i-1;k++)
{
printf("*"); //每行输出的*号
}
printf("\n"); //每次循环换行
}
return 0;
}
为什么是金字塔 而不是
..............................................*
..............................................* * *
..............................................* * * * *
..............................................* * * * * * *
(j=i;j<5;j++)
第一行:J和I一样大小初始为1 ,因为J<5,所以还可以进行循环 ,然后J++;之后J就被赋值为2,还是J<5继续J++;......直到J不满足J<5。
到下一个for执行*,for的*数如上方法。
父循环一次,子循环需要全部执行完,直到跳出循环;所以下面的子循环的两个for要全部循环完,才进行下一个父循环。
第二行:J初始就为2了,如第一行求,来进行第二行的空格和*的数量。
....................
你如果把第一个for后面的j=i换成j=1,你就会得到你问的那个直角三角形
我看错了 是这样的
接3> i=i+1=3
j=3
j=3<5成立,输出空格
j=j+1
j=4<5输出空格
j=j+1
j=5=5不输出空格
执行for下一个语句
0<3*2-1
输出一个*
k=k+1
k=1<3*2-1=5输出一个*
k=2<5输出一个*
k=3输出一个*
k=4输出一个*
k=5不满足 结束子for循环
同理 i=4依上运行
当i=5时呢?不成立的哇 它只会输出金字塔的一半
1> i = 1 i<5 成立
1 j=1 1<5 成立
1 输出一个空格
1 j+1=2
2 2<5 成立
2 输出一个空格
2 j=2+1=3
3 3<5 成立
3 输出一个空格
3 j=3+1=4
4 4<5 成立
4 输出一个空格
4 j=4+1=5
5 5<5 不成立 执行下一个循环
6 k=0 0< 2x1-1 成立
6 输出一个 *
6 k= 0+1=1
7 1<2x1-1 不成立 执行下一个语句
7 输出换行符 换行
7 i=i+1= 2
2> i=2<5 成立
1 j=2 2<5 成立
1 输出一个空格
1 j=2+1=3
2 3<5 成立
2 输出一个空格
2 j= 3+1=4
3 4<5 成立
3 输出一个空格
3 j= 4+1=5
4 5<5 不成立 执行下一个循环
5 k=0 0< 2x2-1 成立
5 输出一个 *
5 k = 0+1 =1
6 k=1 < 2x2-1 成立 以此类推,就完全看懂程序了
看for循环内部的第一个for循环,他就是输出空格用的
C语言入门
926937 学习 · 21533 问题
相似问题