为了账号安全,请及时绑定邮箱和手机立即绑定

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

/*

#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://img1.sycdn.imooc.com//56de355000013a1801630113.jpg

第二段结果http://img1.sycdn.imooc.com//56de355a00014ea601560111.jpg

正在回答

2 回答

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

1 回复 有任何疑惑可以回复我~
#1

慕用8117474 提问者

非常感谢!
2016-03-08 回复 有任何疑惑可以回复我~
//问题出在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;
}


2 回复 有任何疑惑可以回复我~
#1

慕用8117474 提问者

也感谢你的用心回复,谢谢
2016-03-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信