微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算 姓名: 黃 淑 娟 學號: T09301020 班級: 電機技三乙
一 . 主題 : 階乘計算
二 . 分析 : (1) 流程圖 : 主程式 副程式 yes no 開 始 x=P0輸入階乘數 m<2 Y=func(x) 二 . 分析 : (1) 流程圖 : 主程式 副程式 yes no 開 始 func(m) x=P0輸入階乘數 m<2 return(1) Y=func(x) n=m*func(m-1) 輸出y結果至P1 return(n)
(2)演算法 : 當輸入X=0時 , 輸出Y=1 當輸入X=1時 , 輸出Y=1 當輸入X=2時 , 輸出Y=2*1=2 當輸入X=3時 , 輸出Y=3*2*1=6 當輸入X=4時 , 輸出Y=4*3*2*1=24 當輸入X=5時 , 輸出Y=5*4*3*2*1=120
三 . 程式 : #include "reg51.h" int func(int) reentrant; main() { int x,y; 三 . 程式 : #include "reg51.h" int func(int) reentrant; main() { int x,y; while(1) x=P0; /* 由P0輸入到x*/ y=func(x); /* 把x傳入副程式func(),y=副程式最後計算結果*/ P1=y; /* 將y由P1輸出*/ } int func(int m)reentrant /* 副程式 */ int n; if(m<2) /* 判斷m是否 <2*/ return(1); /* m <2 傳回值1*/ n=m*func(m-1); /* m >2 傳回值n*/ return(n);
四 . 模擬 : (1)當P0輸入”00000000” , P1輸出 ”00000001”
(2)當P0輸入”00000001” , P1輸出 ”00000001”
(3)當P0輸入”00000010” , P1輸出 ”00000010”
(4)當P0輸入”00000011” , P1輸出 ”00000110”
(5)當P0輸入”00000100” , P1輸出 ”00011000”
(6)當P0輸入”00000101” , P1輸出 ”01111000”
五 . 實驗結果 : (1)當P0輸入”00000000” , P1輸出 ”00000001”
(2)當P0輸入”00000001” , P1輸出 ”00000001”
(3)當P0輸入”00000010” , P1輸出 ”00000010”
(4)當P0輸入”00000011” , P1輸出 ”00000110”
(5)當P0輸入”00000100” , P1輸出 ”00011000”
(6)當P0輸入”00000101” , P1輸出 ”01111000”