#include <stdio.h>
void t(int a,int b) {
int num = a * b;
if( a == 0 || b == 0) {
printf("Number can not be 0.\n");
return;
}
while( a > 0 && b > 0 ) {
if( a > b )
a = a % b;
else
b = b % a;
}
if( a == 0 ) {
printf("最大公因數為 %d\n",b);
printf("最小公倍數為 %d\n",(num/b));
}
else {
printf("最大公因數為 %d\n",a);
printf("最小公倍數為 %d\n",(num/a));
}
}
int main(void) {
int a,b;
int c;
printf("請輸入a,b求最大公因數及最小公倍數:");
scanf("%d %d",&a,&b);
t(a,b);
return 0;
}
直接舉例說明給你了解:
求 (6, 15) 與 [6, 15]
int main(void) {
int a,b;
int c;
printf("請輸入a,b求最大公因數及最小公倍數:");
scanf("%d %d",&a,&b);
就只是從螢幕讀進你key入的 a=6 b=15
再來看
t(a, b);
實際就是讓電腦處理
t(6, 15);
進入函式後,先定義一個 num變數=6x15
理由是 「兩數的乘積 / 最大公因數 = 最大公倍數」
數學恆等式這裡不推導,詳情打電話問「國中老師」吧!
if( a == 0 || b == 0) {
printf("Number can not be 0.\n");
return;
}
由於6與15都大於0,上面這段「防呆」跳過不執行。
最後來看關鍵的部分
while(a>0 && b>0) {
if(a>b)
a = a%b;
else
b = b%a;
}
因爲 b>a 執行 else區段
所以第一次進入while迴圈的結果
a=6 b=3
不過因爲a與b都大於0 且 a>b 執行 if區段
所以第二次進入while迴圈的結果
a=0 b=3
a變0後就跳出while迴圈了!(此例迴圈判斷3次)
if( a == 0 ) {
printf("最大公因數為 %d\n",b);
printf("最小公倍數為 %d\n",(num/b));
} else {
printf("最大公因數為 %d\n",a);
printf("最小公倍數為 %d\n",(num/a));
}
因爲a=0 所以印出
最大公因數為 3
最小公倍數為 30
以上就是電腦計算的思維,可以試試 a=15 b=6
依照這個步驟多試試
這真的是入門程式必需經歷的過程啊!
你試過就是你的了!
要說明什麼?
最大公因數 使用輾轉相除法 應該是基本觀念吧?
最小公倍數 是 兩者相乘/最大公因數 也算是基本觀念吧?
所以要解釋什麼?
如果還需要解釋可能要翻一下國中或國小的課本來看了.
所以你要問什麼
上面已經有人說明了,這是function. 寫了一個很簡單的例子,給你參考一下.
#include <stdio.h>
void fun1(void);
void fun2(void);
int main(void) {
printf("我是主程式\n");
printf("主程式: 準備呼叫第一個 function\n");
fun1();
printf("主程式: 結束\n");
return 0;
}
void fun1(void) {
printf("我是第一個 function\n");
printf("fun1: 準備呼叫第二個 function\n");
fun2();
printf("fun1: 第一個 function 結束\n");
}
void fun2(void) {
printf("我是第二個 function\n");
printf("fun2: 第二個 function 結束\n");
}
執行結果:
| => ./t2
我是主程式
主程式: 準備呼叫第一個 function
我是第一個 function
fun1: 準備呼叫第二個 function
我是第二個 function
fun2: 第二個 function 結束
fun1: 第一個 function 結束
主程式: 結束