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

有大神可以详细的讲解下每个循环的作用效果吗?我看的很糊涂,没明白

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


正在回答

3 回答

先看外循环,i=1 时进入循环,这时候去执行第二个循环,j=1开始执行,j=5时结束,直到第二个循环完全执行完毕,即输出4个空格,然后进入第三个循环,k=0时开始执行,k=2*i-1=2*1-1=1时结束,共输入1个“*”,第三个循环结束,然后执行printf("\n")语句。跳出第一次内部循环,开始第二次外部循环,执行i++=2;再进入内部循环,直到i=5时结束循环,此时会循环真正执行完毕。

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

无花果3925518

你好! k=0时开始执行,不是应该 k< 1=2*i-1=2*1-1 ,为什么会输出1个*?
2016-09-10 回复 有任何疑惑可以回复我~
#2

_夕晨踏雪 回复 无花果3925518

k=0时,判断k<1,此时条件满足,所以输出一个“*”,然后执行k+1=1,不满足1<1,这时候循环就结束了,所以只打印出来一个“*” 如果改成 k<=2*i-1=2*1-1,就会打印出来两个。
2016-09-10 回复 有任何疑惑可以回复我~
#3

无花果3925518 回复 _夕晨踏雪

!原来如此!多谢!心美人更美!
2016-09-11 回复 有任何疑惑可以回复我~
#4

imooc_粉丝 提问者

非常感谢!
2016-09-11 回复 有任何疑惑可以回复我~
#5

imooc_粉丝 提问者

回答有几点错误,首先j=1开始执行,j=5时结束,是j<5的时候第一个子循环结束,如果是等于5的话,会输出5个空格来的,其次k=2*i-1应该是k<2*i-1才对,k=2*i-1的话,第一行会输出俩个*号的,可能是你打错了吧,我看了半天看评论之后我才明白,原来第一行*号之前是4个空格啊,我一直认为是3个空格。。。。。。
2016-09-11 回复 有任何疑惑可以回复我~
#6

_夕晨踏雪

回复 imooc达哈哈,不过我第一次看教程的时候也没有看出来有4个空格【尴尬】【尴尬】,教程稍微有点不完美...
2016-09-11 回复 有任何疑惑可以回复我~
查看3条回复

那为什么第一行输出的是4个空格,我是这样看的,因为最后一行一共有7个*号,没有空格,所以第一行不是应该有3个空格吗,我不懂,大神帮帮我。

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

慕神9229620

最后一行是七个*加一个空格。如果把程序里面for(j=i;j<5;j++)改为for(j=i;j<4;j++),这样的话第一行就会是3个空格
2016-10-20 回复 有任何疑惑可以回复我~

说的有点啰嗦.......不过还真是不好描述啊。。。。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有大神可以详细的讲解下每个循环的作用效果吗?我看的很糊涂,没明白

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