/*
#include <stdio.h>
int main()
{
int i,j,k;
for(i=1; i<5; i++)
{
for(j=1;j<5;j++)
{
printf(" ");
}
for(k=0;k<2*i-1;k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
*/
#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;
}
第一段结果
第二段结果
第一段和第二段代码输出空格的数量不一样,具体在第一段代码“ for(j=1;j<5;j++) ”,j的初值为1,是常量,因此功能是每次都输出5个空格,第二段代码“ for(j=i; j<5; j++)”,j的初值为i,是个变量,加上每次i循环都自加1,所以每次都比上一行少一个空格,不知道我的解释清楚了没?
//问题出在j的初始值上,第一段j的初始值为1,第二段j的初始值为i。详见下面的代码的注释说明。 /* #include <stdio.h> int main() { int i,j,k; for(i=1; i<5; i++) { for(j=1;j<5;j++) /*此处的j初始值为数字1,这意味着每次进入该循环后,j都会先初始为1,这导致程序的执行结果为每一行第一个*号前的空格数目与行数i无关都为4个*/ { printf(" "); } for(k=0;k<2*i-1;k++) { printf("*"); } printf("\n"); } return 0; } */ #include <stdio.h> int main() { int i,j,k; for(i=1; i<5; i { for(j=i; j<5; j++)++)/* 此处的j初始值为字母i的值,这意味着每次进入该循环后,j都会先初始为字母i的值,与第一段代码中不同的是,i的值是从1到4依次累加的,所以每次进入该循环后j的初始值也是从1到4依次累加的,进而导致程序的执行结果为第i行的第一个*号前的空格数目为(5-i)个*/ { printf(" "); } for(k=0; k<2*i-1; k++) { printf("*"); } printf("\n"); } return 0; }