課程
/后端開發
/C
/C語言入門
我想知道為什么答案那種寫法可以在第一行第三位輸出*其他位置輸出空格? 第二行也是為什么它可以排成一個正三角形
2020-10-07
源自:C語言入門 4-12
正在回答
???niu
謝謝大佬
? ?厲害了,大佬,剛剛開始還一臉蒙蔽
太棒了!大佬大佬!
謝謝大佬,祝大佬在代碼路上越走越遠!
Penthesilea
你想問的是答案為什么正確,為了搞清楚答案為什么正確,我們先來看 i , j , k,三個變量分別負責什么,i由題中給出
i=1, i<5 , i++,也就是i={1,2,3,4 ;i=N}, 我們先不把輸出目標看成是圖形,把他看作是4行字,只是每行的對齊方式不太一樣,拆開來看,i負責的就是整個輸出目標的行數,i=1就是第一行,i=2就是第二行,好,那么我們下來要確定什么呢?
可以看出,題目提示了,for子循環1,是為了打空格,觀察一下這個圖片,如果從第四行的第一個“*”開始,到第四行第四個“*”(第一行“*”在第四行的投影),一共需要打三個空格,然后因為第四行開頭還有一個空格(圖片是白色的,也就是第一格是從圖片邊緣開始的,而不是從星號開始的),加起來第一行需要打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,經過兩個子循環
我們在第二行寫下了“空格 空格?空格 * * *”;
? ? ? ? ? ? 同理第三行寫下“空格 空格 * * * * *”;
? ? ? ? ? ? ? ? ? ? ? ? 第四行寫下“空格 * * * * * * *”;
把第一行的“*”加上就得到了答案
那我們從這里學到了什么呢?
重點就在for循環(A;B;C)中,A,B表達式的運用,
先將我們最終的圖形目標拆分成若干個小目標,
確定小目標1:第一行寫4個空格和一個星號。給循環變量j和k不同的初始值,確定——從幾開始寫(通過i與j的關系)。
再利用表達式B來確定——寫幾個“空格”和寫幾個“星號”。然后換行。
小目標2:寫3個空格和3個星號。
.........
最終完成目標圖形。
這道題目我也是不停地試才理解,從本章開始,題目開始有所難度了,但是好在有控制臺給我們去試,如果不清楚怎么做,就先按自己的理解去試一下,不停地調整代碼,才能達到我們練習的目的。
說這么多其實也是為了增加我自己的理解,希望有什么疑問可以互相交流,同學。
沙礫1221
Penthesilea 回復 沙礫1221
LukeWalker
皓塵
慕后端4462866
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
1 回答第一行是三個空格為什么程序輸出是四個
1 回答為什么第一行四個第二行三個第三行兩個第四行一個
1 回答為什么第一種情況不行,第二種可以?
3 回答按答案輸出的話 為什么第一行會輸出4個空格 不應該是一個么
2 回答第一行不應該是先輸出三個空格嗎?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2020-11-10
???niu
2020-11-05
謝謝大佬
2020-10-28
? ?厲害了,大佬,剛剛開始還一臉蒙蔽
2020-10-20
太棒了!大佬大佬!
2020-10-10
謝謝大佬,祝大佬在代碼路上越走越遠!
2020-10-09
你想問的是答案為什么正確,為了搞清楚答案為什么正確,我們先來看 i , j , k,三個變量分別負責什么,i由題中給出
i=1, i<5 , i++,也就是i={1,2,3,4 ;i=N}, 我們先不把輸出目標看成是圖形,把他看作是4行字,只是每行的對齊方式不太一樣,拆開來看,i負責的就是整個輸出目標的行數,i=1就是第一行,i=2就是第二行,好,那么我們下來要確定什么呢?
可以看出,題目提示了,for子循環1,是為了打空格,
觀察一下這個圖片,如果從第四行的第一個“*”開始,到第四行第四個“*”(第一行“*”在第四行的投影),一共需要打三個空格,然后因為第四行開頭還有一個空格(圖片是白色的,也就是第一格是從圖片邊緣開始的,而不是從星號開始的),加起來第一行需要打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,經過兩個子循環
我們在第二行寫下了“空格 空格?空格 * * *”;
? ? ? ? ? ? 同理第三行寫下“空格 空格 * * * * *”;
? ? ? ? ? ? ? ? ? ? ? ? 第四行寫下“空格 * * * * * * *”;
把第一行的“*”加上就得到了答案
那我們從這里學到了什么呢?
重點就在for循環(A;B;C)中,A,B表達式的運用,
先將我們最終的圖形目標拆分成若干個小目標,
確定小目標1:第一行寫4個空格和一個星號。給循環變量j和k不同的初始值,確定——從幾開始寫(通過i與j的關系)。
再利用表達式B來確定——寫幾個“空格”和寫幾個“星號”。然后換行。
小目標2:寫3個空格和3個星號。
.........
最終完成目標圖形。
這道題目我也是不停地試才理解,從本章開始,題目開始有所難度了,但是好在有控制臺給我們去試,如果不清楚怎么做,就先按自己的理解去試一下,不停地調整代碼,才能達到我們練習的目的。
說這么多其實也是為了增加我自己的理解,希望有什么疑問可以互相交流,同學。