天天看點

MATLAB 練習題

題目描述

輸入一個整數n<10

輸入n+2行,如圖的圖形:核心n行,周邊被*号保衛

輸入

一個整數

輸出

字元圖形

樣例輸入 Copy

4
      

樣例輸出 Copy

     *     
    *A*    
   *BBB*   
  *CCCCC*  
 *DDDDDDD* 
***********
      

分析,該字元圖形可以劃分為5個部分,首先是第一部分,輸出圖形左邊的空格:

MATLAB 練習題
n = input('');
for i = 1:n + 1
    for j = 1:n + 2 - i
        fprintf(' ');   % 輸出 左邊的空格
    end
    fprintf('*');    % 輸出左邊的 *号
    for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2);    % 輸出每行的字母
    end
    if i > 1          % 當輸入的 行數 大于 n 時, 輸出 右邊的 * 号
        fprintf('*');
    end
    fprintf('\n');   % 每輸出一行換行
end
for i = 2 * (n + 1) + 1: -1: 1    % 輸出 最後一行的  ***********
    fprintf('*');
end      

第一次循環

當 輸入為4 時,n = 4,執行第一次循環 i = 1,總共循環5次

for i = 1:n + 1      

因為 n = 4,i = 1是以 n + 2 - i 總共循環5次,第一行列印5個空格

for j = 1:n + 2 - i  
    fprintf(' ');   % 輸出 圖形左邊的空格   每一次循環會輸出1個空格 
end      

當以上空格列印完成後,會開始執行以下代碼

fprintf('*');    % 輸出左邊的 *号      

會列印出以下結果

*      

在*号前面會有4個空格,如果想清晰的看到前面輸出的内容,可以把上面代碼空格符替換成 ‘-’

for j = 1:n + 2 - i  
    fprintf('-');   % 将 空格換成 -
end      

列印出結果:

-----*      

可以清晰的看到在 * 前面會有四個 ‘-’ 符号

列印完 * 後,會執行以下代碼

for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2); 
end      

首先代碼會先計算 2 * i - 3 這一部分,由上面的程式執行可得到 i = 1的,是以會得到 結果 2 * 1 - 3 = -1顯然在這個for循環中是不能夠執行的,是以跳過該for循環,執行下面的代碼

if i > 1       
    fprintf('*');
end      

該代碼段會先判斷 i 是否大于 1,由上面的程式執行可得到 i = 1的,是以會得到結果傳回 false,不執行if下面的代碼

第一行的内容輸出結束,執行下面的換行代碼

fprintf('\n');      

第二次循環

執行第二次循環 i = 2, 剩餘循環次數 3次

for i = 1:n + 1      

因為 n = 4,i = 2是以 n + 2 - i 總共循環4次,第二行列印4個空格

for j = 1:n + 2 - i  
    fprintf(' ');   % 輸出 圖形左邊的空格   每一次循環會輸出1個空格 
end      

當以上空格列印完成後,會開始執行以下代碼

fprintf('*');    % 輸出左邊的 *号      

會列印出以下結果

*
    *      

在*号前面會有4個空格,如果想清晰的看到前面輸出的内容,可以把上面代碼空格符替換成 ‘-’

for j = 1:n + 2 - i  
    fprintf('-');   % 将 空格換成 -
end      

列印出結果:

-----*
----*      

可以清晰的看到在 * 前面會有四個 ‘-’ 符号

列印完 * 後,會執行以下代碼

for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2); 
end      

首先代碼會先計算 2 * i - 3 這一部分,由上面的程式執行可得到 i = 2的,是以會得到 結果 2 * 2 - 3 = 1,會循環一次,執行下面的代碼

if i > 1       
    fprintf('*');
end      

列印出結果:

*
    *A      

該代碼段會先判斷 i 是否大于 1,由上面的程式執行可得到 i = 2的,是以會得到結果傳回 true,執行if下面的代碼

列印出結果:

*
    *A*      

第二行的内容輸出結束,執行下面的換行代碼

fprintf('\n');      

第三次循環

執行第二次循環 i = 3, 剩餘循環次數 2次

for i = 1:n + 1      

因為 n = 4,i = 2是以 n + 2 - i 總共循環3次,第三行列印3個空格

for j = 1:n + 2 - i  
    fprintf(' ');   % 輸出 圖形左邊的空格   每一次循環會輸出1個空格 
end      

當以上空格列印完成後,會開始執行以下代碼

fprintf('*');    % 輸出左邊的 *号      

會列印出以下結果

*
    *
   *      

在*号前面會有4個空格,如果想清晰的看到前面輸出的内容,可以把上面代碼空格符替換成 ‘-’

for j = 1:n + 2 - i  
    fprintf('-');   % 将 空格換成 -
end      

列印出結果:

-----*
----*
---*      

可以清晰的看到在 * 前面會有四個 ‘-’ 符号

列印完 * 後,會執行以下代碼

for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2); 
end      

首先代碼會先計算 2 * i - 3 這一部分,由上面的程式執行可得到 i = 2的,是以會得到 結果 2 * 2 - 3 = 1,會循環一次,執行下面的代碼

if i > 1       
    fprintf('*');
end      

列印出結果:

*
   *A*
  *BBB      
*
   *A*
  *BBB*      
fprintf('\n');      

繼續閱讀