【C语言问题】看不懂啊看不懂,求大神解释~!(循环内的逻辑)

(程序功能:从键盘上输入整数n,按示例格式输出一个由数字组成的三角形图案。)

#include <stdio.h>
int main(void)
{
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=n-i;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>0;j--)
printf("%d",j);
printf("\n");
}
return 0;
}
如果能顺便总结一下打印图形题的规律就更好了~!会追加的哦~!O(∩_∩)O~

for(i=1; i<=n; i++)
{
1. for(j=1; j<=n-i; j++)
2. printf(" "); //这两句是打印n-i个空格
3. for(j=1; j<=i; j++)
4. printf("%d", j); //这两句是打印从1到i这几个数
5. for(j=i-1; j>0; j--)
6. printf("%d", j); //这两句是打印从i-1到1这几个数
7. printf("\n") //换行
}

所以,
对于外层循环for(i=1; i<=n; i++), 假如n=5
当i=1时, 1和2两句先打印4个空格,然后3和4两句打印1,之后5和6两句不打印,不符合循环条件,最后换行。
当i=2时, 1和2两句先打印3个空格,然后3和4两句打印1,2,之后5和6两句打印1,最后换行。
当i=3时, 1和2两句先打印2个空格,然后3和4两句打印1,2,3,之后5和6两句打印2,1,最后换行。
按照上面步骤依次类推,直到不符合循环条件。追问

谢谢,为什么j<=i不是涵盖到j<=n-1中的呢?
比如n=4,j<=1不是和j<=3重了吗?
为什么就直接在空格之后打了??

追答

for(j=1; j0; j--)
printf("%d", j);
上面三个循环是,第一个运行完后,再运行第二个,然后第三个。

追问

嗷。。貌似明白了一点点~!O(∩_∩)O~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-01
第一次循环是打印的行数
第二次循环是打印的空格
第三次就是打印的内容了
假设n=3;那就打印三行
第一行有2格空格 第二行有1格空格 第三行有0格空格
下面就开始打印内容了 第一行打印1
第二行是121
第三行是12321追问

谢谢,我再仔细想想~!O(∩_∩)O~

第2个回答  2013-06-01

有什么问题可以追问

追问

谢谢~!好用心,虽然乱乱的但是理解了~!O(∩_∩)O~
能仔细说说第三个循环码?就是这样的东西看着能明白,自己做就没头绪。。╮(╯▽╰)╭

追答

就是实现数字递减的问题嘛!,
j=i-1:中间的数字是最大,第二个for结构已经实现了从1到max(也就是i),那么第三个for在输出的时
候就显然不能从max(也就是i)开始了,也就是j=i-1的由来.
j>0: 是控制条件的截至.
j--: 控制递减
在完成类似的输出问题时,往往是拆成若干个更小更以实现的小问题,不要想一下子输入你想要的图形或者是答案。编程:“复杂是一些最简单的问题堆积”

追问

谢谢啦~!可惜分已经加给第一个回答的人了,o(╯□╰)o。但是还是再次谢谢~!O(∩_∩)O~

追答

没事,都是帮人解决问题嘛,嘻嘻O(∩_∩)O

相似回答