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

我想知道为什么答案那种写法可以在第一行第三位输出*其他输出空格 第二行也是为什么它可以排成一个正三角形

我想知道为什么答案那种写法可以在第一行第三位输出*其他位置输出空格  第二行也是为什么它可以排成一个正三角形

正在回答

6 回答

???niu

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

谢谢大佬

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

   厉害了,大佬,刚刚开始还一脸蒙蔽

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

太棒了!大佬大佬!

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

谢谢大佬,祝大佬在代码路上越走越远!

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

Penthesilea

其实我刚上来也没不理解这题怎么整,就是根据版主提的问题一点一点想:这题是怎么回事,然后就把想的时候的思路卸下来了。
2020-10-13 回复 有任何疑惑可以回复我~

你想问的是答案为什么正确,为了搞清楚答案为什么正确,我们先来看 i , j , k,三个变量分别负责什么,i由题中给出

i=1, i<5 , i++,也就是i={1,2,3,4 ;i=N}, 我们先不把输出目标看成是图形,把他看作是4行字,只是每行的对齐方式不太一样,拆开来看,i负责的就是整个输出目标的行数,i=1就是第一行,i=2就是第二行,好,那么我们下来要确定什么呢?http://img1.sycdn.imooc.com//5f802ee90001fb8f04570417.jpg

可以看出,题目提示了,for子循环1,是为了打空格http://img1.sycdn.imooc.com//5f802ff90001febc00690064.jpg观察一下这个图片,如果从第四行的第一个“*”开始,到第四行第四个“*”(第一行“*”在第四行的投影),一共需要打三个空格,然后因为第四行开头还有一个空格(图片是白色的,也就是第一格是从图片边缘开始的,而不是从星号开始的),加起来第一行需要打4个空格。

那么现在就确定了第一行一共需要,4个空格,1个“*”,(一共5个字符)

同理,第二行需要3个空格,3个“*”,(一共6个字符)

第三行需要2个空格,5个“*”(一共7个字符)

第四行需要1个空格,7个“*”(一共8个字符)

我们用 j 来表示空格的个数, k来表示“*”的个数(具体用哪个看你喜欢)

j={4,3,2,1}, k={1,3,5,7},他们和i={1,2,3,4}有什么关系呢?

答案中:for(j=i ; j<5; j++)

           printf(" ")

句意为i=1的时候,循环打4个空格,直到j=5的时候停止,进入下个子循环

也就是这个循环主要负责的是横向的书写,完成了第一行,写4个空格1个星号的任务,至于换行,

要交给下一个子循环来做:

     k={1,3,5,7}不难看出这个数集与 i 的关系

     k= 2 i - 1

for(i=k, k= 2i - 1,k++)

        printf(“*”)

i=1的时候k=1,写1个星号;

结束这个子循环。然后printf("\n")负责换下一行。

经过两个子循环,我们得到了第一行的字 “空格 空格 空格 空格 *”

并且光标移至了第二行,

第二行与第一行的区别在于,for(i=j,j<5,j++)j的初始值为2,结束于4,一共有3个数字,即for子循环1

在第二行只写3个空格,为什么呢?因为for(A ; B ; C)中的A确定了循环变量的初始值。

下来,for子循环2,i=2时,k=2i-1=3,经过两个子循环

我们在第二行写下了“空格 空格 空格 * * *”;

            同理第三行写下“空格 空格 * * * * *”;

                        第四行写下“空格 * * * * * * *”;

把第一行的“*”加上就得到了答案http://img1.sycdn.imooc.com//5f8035c0000198ea00640063.jpg

那我们从这里学到了什么呢?


重点就在for循环(A;B;C)中,A,B表达式的运用,

先将我们最终的图形目标拆分成若干个小目标,

确定小目标1:第一行写4个空格和一个星号。给循环变量j和k不同的初始值,确定——从几开始写(通过i与j的关系)。

再利用表达式B来确定——写几个“空格”和写几个“星号”。然后换行。

小目标2:写3个空格和3个星号。

.........

最终完成目标图形。

这道题目我也是不停地试才理解,从本章开始,题目开始有所难度了,但是好在有控制台给我们去试,如果不清楚怎么做,就先按自己的理解去试一下,不停地调整代码,才能达到我们练习的目的。

说这么多其实也是为了增加我自己的理解,希望有什么疑问可以互相交流,同学。



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

沙砾1221

感谢感谢,分析的很详细,我这种小白也看懂了!
2020-10-10 回复 有任何疑惑可以回复我~
#2

Penthesilea 回复 沙砾1221

很高兴能对你有所帮助,希望我们能共勉~
2020-10-13 回复 有任何疑惑可以回复我~
#3

LukeWalker

谢谢大佬
2020-10-22 回复 有任何疑惑可以回复我~
#4

皓尘

非常感谢
2022-02-24 回复 有任何疑惑可以回复我~
#5

慕后端4462866

感谢感谢
2023-10-11 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

我想知道为什么答案那种写法可以在第一行第三位输出*其他输出空格 第二行也是为什么它可以排成一个正三角形

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