C++第7周任務3-輸出星號圖詳解示例
阿新 • • 發佈:2018-11-16
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
任務要求見http://blog.csdn.net/sxhelijian/article/details/8045279,本文以輸出下面的星號圖為例,再次體會“自頂向下,逐步求精”的設計過程。
要輸出的星號圖是:
將一個圖,看作為6行,完成了第一級的分解,提到的演算法框架為:
i=1;While(i<=6) //需要輸出6行{ 輸出第i行; 換行; ++i;}
對於“輸出第i 行”的任務,可以進行細化:
先輸出若干空格(多少個空格?第1行0個,第2行1個,第3行2……第6行5個);再輸出若干個星號(多少星號?第一行11個,第2行9個……第6行1個)
其實把空格數和星號數和表示行數的變數 i 掛起鉤來,上面的“若干個”可以用 i 表示出來,簡單地做些推算可以寫出式子。
對於“輸出第i行”的任務,可以進行細化:
先輸出 i-1 個空格; 再輸出 2*(6-i)+1 個星號;
於是,演算法就是:
i=1;While(i<=6) //需要輸出6行{ //輸出第i行 先輸出 i-1 個空格; 再輸出 2*(6-i)+1 個星號; 換行; ++i;}
將輸出若干個空格/星號等寫成程式碼,得到了下面的程式碼
//參考解答一#include <iostream>using namespace std;int main( ){ int i,j; i=1; while(i<=6) //需要輸出6行 { //輸出第i行 for(j=1; j<=i-1; ++j) cout<<" "; for(j=1; j<=2*(6-i)+1; ++j) cout<<"*"; cout<<endl; ++i; } return 0;}
下面給出程式的另一種寫法,其中引入了兩個變化:(1)三角的行數可以由變數n控制;(2)最外層控制輸出n行的迴圈改為了for迴圈,實際上,內層的迴圈用while也無不可。
//參考解答二#include <iostream>using namespace std;int main( ){ int i,j,n=15; //用n來靈活對待可能的行數 for(i=1;i<=n;++i) //將上一種解法中的while迴圈改造為for迴圈 { //輸出第i行 for(j=1; j<=i-1; ++j) //內層的這個for迴圈可以寫作while迴圈 cout<<" "; for(j=1; j<=2*(n-i)+1; ++j) //這兒也可以用其他迴圈,可嘗試改造 cout<<"*"; cout<<endl; } return 0;}
下面的程式採用的是讓控制迴圈的變數由大變小(與三角上大下小呼應)的思路,相應地,只需要改變控制空格數和星號數的式子即可
//參考解答三#include <iostream>using namespace std;int main( ){ int i,j,n=6; for(i=n;i>=1;--i) //i由大變小 { //輸出第i行 for(j=1; j<=n-i; ++j) //關鍵:輸出的是n-i個空格 cout<<" "; for(j=1; j<=2*i-1; ++j) //關鍵:輸出的是2*i-1個星號 cout<<"*"; cout<<endl; } return 0;}
其他的星號圖,思路類似,相信同學們可以獨立做出來。