Download - 練習題
MATLAB 程式設計入門篇:程式流程控制
練習題 (40%) 將「 3n+1 問題」範例,包裝成函式
自訂一個合法函式名稱 輸入為起始數字,例如 123 輸出為「末項 =1 」的數列,代表其經過的數字 例: threeNPlusOne(13) 要回傳:
[13 40 20 10 5 16 8 4 2 1] 提示:
定義列: function out = threeNPlusOne(num) 一開始,先將 out 設為 num : out=num; 將原本印出的部分,改成向量合併: out = [out
num];
MATLAB 程式設計入門篇:程式流程控制
練習題 (60%) 黑洞數問題 ( 描述 )
將一個「位數不完全相同」的四位數字,經過如下步驟運算,最後將變成「 6174 」
所有位數「由大排到小」減去「由小排到大」 合法: 1234, 0912, 1999, 非法: 8888, 4444, ...
範例: 3087 → 8730-0378→ 8352 → 8532-2358 → 6174 → 7641-1467 → 6174 → ...
本練習題只要求對四位數之計算做設計
MATLAB 程式設計入門篇:程式流程控制
練習題 黑洞數問題 ( 規格 )
撰寫一函式計算黑洞數問題,函式名稱自訂 輸入:一合法四位數 輸出:一個向量,從輸入數字開始到黑洞數字為止 例如: blackHoleNum(3087) 要回傳:
[3087 8352 6174]
MATLAB 程式設計入門篇:程式流程控制
練習題 黑洞數問題 ( 提示 )
假設輸入數字的變數名稱為 num 把位數拆開
array = [getDigit(num,1) getDigit(num,2) getDigit(num,3) getDigit(num,4)]
小排到大: xx = sort(array) 大排到小: yy = fliplr(xx) 如何將陣列 ( 變數 xx 與 yy) 合併回數字?
num1 = str2num( num2str(xx,'%d%d%d%d') ); % 小的數字num2 = str2num( num2str(yy,'%d%d%d%d') ); % 大的數字
num = num2 - num1; % 新的數字
MATLAB 程式設計入門篇:程式流程控制
練習題 黑洞數問題 ( 提示 )
function out = blackHoleNum(num)out = num;while(1)
% 步驟一:拆開 num 的每一個位數% 步驟二:小排到大 & 大排到小% 步驟三:將陣列合併回四位數字,並相減 (num = num2-
num1)% 步驟四:向量合併 out = [out num]% 步驟五:如果 num 等於 6174 則 break
end
MATLAB 程式設計入門篇:程式流程控制
練習題 ( 加分題 ) (3%) 修改「九九乘法表」範例,使輸出如下
1*1= 1 2*1= 2 3*1= 3 4*1= 4 5*1= 5 6*1= 6 7*1= 7 8*1= 8 9*1= 9
1*2= 2 2*2= 4 3*2= 6 4*2= 8 5*2=106*2=127*2=148*2=169*2=18
1*3= 3 2*3= 6 3*3= 9 4*3=125*3=156*3=187*3=218*3=249*3=27
1*4= 4 2*4= 8 3*4=124*4=165*4=206*4=247*4=288*4=329*4=36
1*5= 5 2*5=103*5=154*5=205*5=256*5=307*5=358*5=409*5=45
1*6= 6 2*6=123*6=184*6=245*6=306*6=367*6=428*6=489*6=54
1*7= 7 2*7=143*7=214*7=285*7=356*7=427*7=498*7=569*7=63
1*8= 8 2*8=163*8=244*8=325*8=406*8=487*8=568*8=649*8=72
1*9= 9 2*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
MATLAB 程式設計入門篇:程式流程控制
練習題 ( 加分題 ) (3%, 各 6%) 分別使用兩層及一層迴圈,完成矩陣乘法
本練習題的目的,在於讓各位熟悉矩陣操作 使用「 * 」運算元,不需要自己寫迴圈 範例 7 當中,使用了三層迴圈
MATLAB 程式設計入門篇:程式流程控制
練習題 ( 參考答案 ) 3n+1 問題
function out = threeNPlusOne(num)
out = num;while(num~=1) if(0==rem(num,2)) num = num / 2; else num = num * 3 + 1; end out = [out num];end
MATLAB 程式設計入門篇:程式流程控制
練習題 ( 參考答案 ) 黑洞數問題 ( 自行搭配 getDigit 使用 )
function out = blackHoleNum(num)
out = num;while(1) array = [getDigit(num,1) getDigit(num,2) getDigit(num,3) getDigit(num,4)]; xx = sort(array); yy = fliplr(xx); num1 = str2num( num2str(xx,'%d%d%d%d') );% 小的數字 num2 = str2num( num2str(yy,'%d%d%d%d') ); % 大的數字 num = num2 - num1; % 新的數字 out = [out num]; if(num==6174),break;endend
MATLAB 程式設計入門篇:程式流程控制
練習題 ( 參考答案 ) 九九乘法表修改輸出
for i=1:9 for j = 1:9 fprintf('%d*%d=%2d\t',j, i, i*j); end fprintf('\n');end
兩層 / 一層迴圈矩陣相乘% 兩層for i = 1:m for j = 1:n C(i,j) = A(i,:)*B(:,j); endend
% 一層for i = 1:n C(:,i) = A*B(:,i);end