1. 程式人生 > >c++,for迴圈列印菱形圖

c++,for迴圈列印菱形圖

#include<iostream>
using namespace std;
int main()
{
	int n = 0;
	cout << "輸入菱形的邊長:";
	cin >> n;
	cout << "圖形如下:" << endl;

	//上半層
	for (int i = 0; i < n; i++)               // 外層控制迴圈次數,輸入的數字就是上半層迴圈的次數

	{                                         // (n-1)比外層迴圈少一次,減去i就是每行少一個空格
		for (int j = 0; j < (n - 1) - i; j++) // 內層迴圈列印空格的個數 外層迴圈n次 內層迴圈n-1次
		{   							      // 迴圈幾次幾個空格 
			cout << " "; 	                  // 第n層的時候 i=n-1 空格為0  所以這層不用迴圈 所以迴圈次數可以變成n-1
			}	                          // 或者j<n-1-i
		                                                                    	
	    //星星的個數是 1 3 5 7 9 12...2*n+1 的等差數列形式遞增的
		for (int j = 0; j < (2 * i + 1); j++) // 內層迴圈列印行星的個數   i=0時  j<=0 迴圈1次 列印一顆星
		                                      // 迴圈幾次幾個星星         i=1時  j<=2 迴圈3次 列印三顆星  以此類推
		{                                     // 也可以寫成 j<2*i+1  一樣
			cout << "*";
		}
		cout << endl;
	}

	//下半層
	for (int i = 0; i < n - 1; i++)                    
	{
		for (int j = 0; j < i + 1; j++)       // 下半層從上往下 空格個數越來越多 迴圈次數也就跟著增多
		{
			cout << " ";
		}
		
	for (int j = 0; j < 2 * ( n - 1 ) - (1 + 2 * i); j++)//下半層從上往下 星星個數依次遞減 迴圈次數也就跟著減少
		{ 
			cout << "*";                     // 星星的個數是 2*n-1  2*n-3 .....2*n-(1+2*i) 等差數列遞減 
			                                 // 因為是下半層從n-1開始的 所以這裡的N=n-1
		}
			 	cout << endl;            // 和上面一樣、 迴圈幾次幾個星星  
		 
	
	}
	return 0;
}

執行結果: