並排打印多個圖案(C++實現)


  在練習循環控制語句時,經常會遇到一類問題:使用循環控制打印星號(*)來形成各種各樣的圖案,並強調所有的星號(*)都要用單條的輸出語句cout<<"*";來打印。

  例如打印 

                        

  通常使用兩個嵌套的for循環可以有效的解決此類問題。

  不過,我們一般每次只打印一個圖案,如何將不同圖案的代碼整合到一起,並排的打印多個圖案呢?

  例如:如何並排打印以下4個圖案呢?

       

    

   首先,我們知道外層循環規定了行數,內層循環規定了列數。從上圖中不難發現,整個圖案的行數相同,通過在每一列打印星號(*)/ 空格來形成不同的圖案,這就要求在操作每一行時,同時打印四個圖案,所以程序應該有一個統一的外循環,內部依次有四個不同的內循環。

  而且,為了控制小圖案之前的距離,要把每一個小圖案想象成一個整體。

  比如打印(a)圖案我們通常會使用如下方法

1     for (int i=0; i<10; i++)
2     {
3         for (int j=0; j<i; j++)
4         {
5             cout<<"*";
6         }
7         cout<<endl;
8     }

  這樣只打印星號(*),圖案實際上只是一個直角三角形,它每行與后面圖案的間隔都不相同,所以我們在空白處補充空格,把圖案變成一個10*10的矩形(空白的部分有空格占位),代碼如下:

 1     for (int i=0; i<10; i++)
 2     {
 3         for (int j=0; j<10; j++)
 4         {
 5             if (i < j)
 6                 cout<<" ";
 7             else
 8                 cout<<"*";
 9         }
10         cout<<endl;
11     }

 

    循環的條件完全相同,通過條件語句來控制每行星號和空格的數量,而且可以用三目運算符簡化

 

            i < j ? cout<<" " : cout<<"*";

  整個程序代碼為:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     for (int i=0; i<10; i++)
 8     {
 9         for (int j=0; j<10; j++)
10         {
11             i < j ? cout<<" " : cout<<"*";
12         }
13         cout<<"\t";
14 
15         for (int j=0; j<10; j++)
16         {
17             i + j > 9 ? cout<<" " : cout<<"*";
18         }
19         cout<<"\t";
20 
21         for (int j=0; j<10; j++)
22         {
23             i > j ? cout<<" " : cout<<"*";
24         }
25         cout<<"\t";
26 
27         for (int j=0; j<10; j++)
28         {
29             i + j < 9 ? cout<<" " : cout<<"*";
30         }
31         cout<<endl;
32     }
33     return 0;
34 }

  運行效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM