C/C++程式設計筆記:C++ 巢狀迴圈,含迴圈列印及蛇形矩陣例項
也稱為多迴圈,在一個迴圈中巢狀使用一個或多個迴圈。
巢狀迴圈的基本結構就是在一個迴圈中,迴圈體包含了另一個迴圈的情況。下面我用幾個巢狀迴圈的例子來深入理解巢狀迴圈。
迴圈圖案列印
分別列印下面三種圖案:
思路分析
一般來說,單迴圈列印的圖案都是線性的,要麼是橫線要麼是豎線。那麼我們這裡需要列印一個二維圖形,就需要從線跨越到面。那麼我們只要有很多條線就能構成一個平面,所以我們這裡列印二維圖形就需要兩個迴圈來實現。
那麼我們這裡規定外層迴圈控制行,內層迴圈控制列。然後找到圖形中行與列的關係,通過控制內層迴圈的迴圈條件,就可以打印出需要的圖形。
1. 實心菱形星星
菱形可以看做兩個三角形組成的,一個正等腰三角,一個倒等腰三角。這裡就可以通過if
下面是參考程式碼:
輸出結果如下:
*
***
*****
*******
*****
***
*
2. 實心菱形字母
這裡和實心菱形星星改變的只有列印的內容,整體的圖形還是沒變的。所以我們這裡只要改變上面程式中列印的內容就行。
下面是參考程式碼:
輸出結果如下:
列印蛇形矩陣
顧名思義,蛇形矩陣:矩陣的一種,常被應用在程式設計題目與數學數列中。
它由1開始的自然數依次排列成的一個矩陣,有上三角、環形或對角線等走法,輸入檔案由一行或多行組成,每行由一個正整數N組成(N不大於100)。
下面練習一些常見的蛇形矩陣:
1. 上三角
要實現如下效果:
可以發現上述表格的規律是,從左上角第一個格開始(起始為1),然後沿右上角到左下角的斜線,先從下到上,再從上到下。開始數字遞增排列。
我們可以想象有一個遊戲角色在一個 5*5 的格子上進行走動,每個數字就是他走的步數。這個角色只有4個移動方向,分別為向下、向右上、向右和向左下。那麼我們就可以創造一個 (x,y)來表示角色的座標。再用一個數組來記錄每個座標當中的步數是什麼。
下面是參考程式碼:
輸出結果如下:
2. 環形
要實現如下效果:
可以發現上述表格的規律是,從左上角第一個格開始(起始為1),進行順時針繞圈圈移動。開始數字遞增排列。
這裡則可以認為這個角色在繞圈圈。這個角色只有4個移動方向,分別為向右、向下、向左和向上。這個角色每繞一圈,他所能走的格子寬度就減小 1。
下面是參考程式碼:
#include <iostream> using namespace std; int main() { // 環形 int num; cout << "請輸入一個(1-10)正整數:"; cin >> num; int* arr = new int[num*num]; // 移動方向,分別是向右,向下,向左,向上 const int step[4][2] = {1,0, 0,1, -1,0, 0,-1}; // 初始座標為(0,0),方向向右 int x = 0, y = 0, direction = 0; // 這裡初始化角色能走的格子尺寸 int limit = num - 1; arr[0] = 1; for (int value = 2;value <= (num*num); value++) { //進行移動 x += step[direction][0]; y += step[direction][1]; arr[y*num + x] = value; //判斷是否需要改變方向 switch (direction) { case 0: // 向右之後,到可走格子邊界就向下否則繼續向右 direction = x == limit ? 1 : 0; break; case 1: // 向下之後,到可走格子邊界就向左否則繼續向下 direction = y == limit ? 2 : 1; break; case 2: // 向左之後,到可走格子邊界就向上否則繼續向左 direction = x == (num - limit -1) ? 3 : 2; break; case 3: // 向上之後,到可走格子邊界就向右,並且可走格子尺寸減少 1 ,否則繼續向上 if (y == (num - limit)) { limit -= 1; direction = 0; } break; } } // 按照儲存在陣列 arr 中的資料,將每個座標的值列印 for (y = 0; y < num; y++) { for (x = 0; x < num; x++) { cout << arr[y*num + x] << '\t'; } cout << endl; } delete [] arr; system("pause"); return 0; }
輸出結果如下:
請輸入一個(1-10)正整數:7 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 請按任意鍵繼續. . .
希望對大家有幫助!
另外如果你想更好的提升你的程式設計能力,學好C語言C++程式設計!彎道超車,快人一步!
C語言C++程式設計學習交流圈子,QQ群757874045【點選進入】微信公眾號:C語言程式設計學習基地
分享(原始碼、專案實戰視訊、專案筆記,基礎入門教程)
歡迎轉行和學習程式設計的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
程式設計學習軟體分享:
程式設計學習視訊分享: