C程序学习例题不解?请帮我分析下!

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:48:40
例题是: 打印如下图形
*
***
*******
***
*
程序是:
#include<stdio.h>
void main()
{ int i,j;
for(i=1;j<=3;i++) (前3行)<为什么电脑认为是前3行啊?>
{ for(j=1;j<=3-i;j++)
printf(""); (打空格)
for(j=1;j<=2*i-1;j++) (在前3行依次打出1.3.7个)<为什么电脑
printf("*"); 会以图那样打出,不会发生错误么,为
....... 什么啊?)
程序全部是:
#include<stdio.h>
void main()
{ int i,j;
for(i=1;i<=3,i++;)
{ for(j=1;j<3-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("@");
printf("\n");
}
for(i=2;i>=1;i--)
{ for(j=2;j>=3-i;j++)
printf(" ");
for(j=1;j>=2*i-1;j++)
printf("@");
printf("\n");
}
}

首先,我要告诉你,运行的时候,只要你没规定光标从哪开始,光标就在屏幕的左上角,printf()就从那里开始输出。
接下来,看第一个循环部分:
for(i=1;i<=3;i++)
{ for(j=1;j<3-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("@");
printf("\n");
}
由于{}里没有任何语句会改变i的值,所以for(i=1;i<=3;i++)使{}里的语句将执行3次。
当i=1时,
for(j=1;j<3-i;j++)
printf(" ");
会输出一个空格,
for(j=1;j<=2*i-1;j++)
printf("@");
会输出一个@,
printf("\n");
会使光标移动到下一行;
当i=2时,自然就从下一行开始输出字符了,接下来你就可以自己判断输出的东西了,所以前三行输出的应该是:
@
@@@
@@@@@

(你是不是程序又误打了阿?注意,光标已经移到第四行了)
接着,我们看下面一个循环体:
for(i=2;i>=1;i--)
{ for(j=2;j>=3-i;j++)
printf(" ");
for(j=1;j>=2*i-1;j++)
printf("@");
printf("\n");
}
可见,{}里的语句会循环两次,
当i=2时,
for(j=2;j>=3-i;j++)
printf(" ");
会输出65534个空格,你是不是把j--打成j++了阿,真是服了,如果是j--的话,