/* 名稱: gcd.c 作者: 洪朝貴 http://www.cyut.edu.tw/~ckhung/ 功能: 從命令列上讀入兩個整數, 印出它們的最大公因數. 適合練習除錯. (本程式沒有什麼嚴重的錯誤, 但是利用除錯程式如 gdb 的「一步一步執行」 功能, 讀者可以更加瞭解程式運作的流程.) */ #include #include #include /* 用到 assert */ int gcd(int a, int b); /* 先宣告 (declare), 等一下再定義 (define) */ int main(int argc, char *argv[]) { int i, j; assert(3 == argc); /* 偷懶的寫法: 該檢查處以 "斷言" 敷衍 */ i = atoi(argv[1]); j = atoi(argv[2]); printf("gcd of %d and %d is: %d\n", i, j, gcd(i,j)); return 0; } int gcd(int a, int b) /* 現在要對函數 gcd 作定義了 */ { int t; assert(0 < a && 0 < b); /* 我們只會處理正整數的最大公因數 */ while (0 != a) { /* 只要除數不為 0 ... */ t = b % a; /* 把 a, b 兩造相除 */ b = a; /* 現在的除數在下一回合要扮演被除數的角色 */ a = t; /* 現在的餘數在下一回合要扮演除數的角色 */ } return b; }