//請輸入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;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 illimite 的頭像
    illimite

    酷愛自由

    illimite 發表在 痞客邦 留言(0) 人氣()