问答详情
源自:4-12 循环结构之多重循环

为什么我上下两段同样的代码输出结果不一样啊

/*

#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;

}

第一段结果http://img.mukewang.com/56de355000013a1801630113.jpg

第二段结果http://img.mukewang.com/56de355a00014ea601560111.jpg

提问者:慕用8117474 2016-03-08 10:14

个回答

  • 蓝色老森
    2016-03-08 10:55:06
    已采纳

    第一段和第二段代码输出空格的数量不一样,具体在第一段代码“ for(j=1;j<5;j++) ”,j的初值为1,是常量,因此功能是每次都输出5个空格,第二段代码“ for(j=i; j<5; j++)”,j的初值为i,是个变量,加上每次i循环都自加1,所以每次都比上一行少一个空格,不知道我的解释清楚了没?

  • 论志成
    2016-03-08 10:57:20

    //问题出在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;
    }