//請輸入2個分數,將這兩個分數相加,必須要約分完,假分數可
//需用2個函式,1是找最大公約數用,2是求出分數總合用
#include
int TheBigestdivisor(int num1,int num2);
void sum(int num1,int num2,int num3,int num4,int *answernum,int *answerdeno);
int TheBigestdivisor(int num1,int num2) //找出最大公約數的函式
{
int temp;
if(num1
{ //否則互換
temp=num1;
num1=num2;
num2=temp;
}
while(num1!=0) /* 輾轉相除法就是做到一方餘數=0 */
{ /* 大的一方會先變成0 */
num1=num1%num2; /* 先把最大的數對另一數取餘數,存到num1 */
/* 假如取完餘數後不為0,則雙方 */
/* 對調(保持較大的數是num1) */
if(num1!=0) /* 一直做到,num1為0 */
{ /* 根據輾轉相除法,剩下的餘數就是最大公約數 */
temp=num1;
num1=num2;
num2=temp;
}
}
return num2; //把最大公約數的值回傳
}
void sum(int num1,int num2,int num3,int num4,int *answernum,int *answerdeno)
{
int save;
*answernum=(num1*num4)+(num2*num3); //傳入參數的num1、num3、num2、num4
*answerdeno=num2*num4; //兩分式通分
//並存入分子answernum,和分母answerdeno
save=TheBigestdivisor(*answernum,*answerdeno);//把分子分母合丟入sum函數
//找出最大公因數並存入save
*answernum=*answernum/save; //分子分母約分
*answerdeno=*answerdeno/save;
}
int main()
{
int num1,deno1,num2,deno2,answernum,answerdeno;
printf("please enter 2 fraction\n");
scanf("%d %d %d %d",&num1,&deno1,&num2,&deno2);
sum(num1,deno1,num2,deno2,&answernum,&answerdeno);
/* 依序把第一、第二數的分子、第一、第二數的分母丟到sum函數 */
/* 還有要儲存的分子分母answernum、answerdeno的位址丟入sum函數 */
printf("the answer is %d / %d",answernum,answerdeno);
/*直接把分子分母印出來即可*/
system("pause");
return 0;
}
- Nov 27 Fri 2009 01:38
1126
close
全站熱搜
留言列表
禁止留言