我們實踐“自頂向下,逐漸求精”的思維,設計和實作一些更好玩的星号圖,也進一步建立循環的概念。
例1.8 程式設計式,輸出如下的星号圖

對這個“囫囵”的星号圖,我們略加分解一下,可以發現一個星号圖是由若幹行構成,于是“求精”的結果是“輸出一個星号圖就是要輸出若幹行”,接下來再考慮的“輸出某一行”的問題。
在“頂層”,輸出如圖的星号圖,需要“循環6次,每次輸出一行”。用流程圖表示如下,這是解決這個問題的頂層設計。
将這個設計用for循環的形式寫出來,如下所示:
這個結果需要進一步地在“下層”求精。“逐漸求精”需要落腳到“輸出第i行”了。
這個圖中的每一行星号的數目是不同的,第0行有1個星号,第1行有3個星号,第2行有5個……。找到表示行數的i與這一行的星号數目的關系,“輸出第i行”,也就是要“重複輸出2*i+1個星号”了。
流程圖,“輸出第i行”的算法表示如下:
将這個設計也用for循環的形式寫出來,如下所示:
最後,可以将“自頂向下,逐漸求精”得到的結果形成完整的算法描述合并到一個流程圖中(留給讀者去畫),形成完整的算法的流程圖描述。下面給出的是用for循環描述的算法,可以看出,9-12行是對“輸出第i行”的求精部分。在程式中,第6行聲明了一個變量n并給其賦初值,表示的是星号圖的行數。改變n值影響星号圖的行數。
完成項目1.11和1.12。
【項目1.11】在例程ch1-16.cpp基礎上
(1)用單執行的方式運作程式,體會循環過程,體會這個程式在“自頂向下,逐漸求精”的思維過程中的誕生;
(2)修改n的值,重新編譯、運作程式;
(3)不對n直接指派,而是用cin>>n輸入n的值決定輸出多行。請修改程式并運作。
(4)修改程式,使程式輸出#号圖或其他圖
【項目1.12】程式設計式輸出各種星号圖
用自頂向下、逐漸求精(此時有節奏地寫一寫,有利于你形成這樣的思維習慣)的思考方式,設計和實作輸出下面星号圖的程式。