⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第3题_分数计算器.txt

📁 C语言课程设计:案例精选与编程指导(东南大学出版社
💻 TXT
字号:


#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include<stdio.h>
#include <string.h>
typedef struct
{
    int nNume;
    int nDeno;
}FRACTION ;
int GCF_f(int , int);
void Simplify_f( FRACTION *npSample ) ;
void Recip_f(FRACTION *npSample ) ; /* 分子分母置换 */
FRACTION CalcAdd_f  (FRACTION fraAdd1, FRACTION fraAdd2);
FRACTION CalcAddNum_f (FRACTION fraAdd1, int nAdd2);
FRACTION CalcSub_f (FRACTION fraSub1, FRACTION fraSub2);
FRACTION  CalcSubNum_f (FRACTION  fraSub1, int nSub2);
FRACTION Multi_f (FRACTION  fraMulti1,  FRACTION fraMulti2);
FRACTION MultiNum_f (FRACTION fraMulti, int nNum);
FRACTION  Div_f ( FRACTION fraDivid, FRACTION fraDivis);
FRACTION DivNum_f (FRACTION fraDivid, int nNum);
FRACTION fraPower_f (FRACTION fraBase, int nExp);
int CompareNum_f (FRACTION fraSample  , int nNum);
int Compare_f( FRACTION fraSample1, FRACTION fraSample2);
void PrintFraction_f(FRACTION fraSample);
void Input_f(FRACTION *npSample);


void Simplify_f( FRACTION *npSample )  /* 约分化简 */
{
   int r;
   r  = GCF_f(npSample->nNume, npSample->nDeno);
   npSample->nNume/= r;
   npSample->nDeno /= r;
}
void Recip_f(FRACTION *npSample )  /* 分子分母置换 */
{
   int nTemp = npSample->nNume;
   npSample->nNume = npSample->nDeno;
   npSample->nDeno = nTemp;
}


int GCF_f(int x, int y)   /*辗转相除求x,y的最大公约数 */
{
     int r = x%y;
     if(r==0)
        return y;
     else
	return GCF_f(y, r);
}

FRACTION CalcAdd_f  (FRACTION fraAdd1, FRACTION fraAdd2)
{
     FRACTION  fraSum;
     fraSum.nNume = (fraAdd1.nNume * fraAdd2.nDeno)+(fraAdd2.nNume * fraAdd1.nDeno);
     fraSum.nDeno = (fraAdd1.nDeno * fraAdd2.nDeno);
     Simplify_f(&fraSum);
     return fraSum;
}

FRACTION CalcAddNum_f (FRACTION fraAdd1, int nAdd2)
{
    FRACTION fraSum;
    fraSum.nDeno=fraAdd1.nDeno;
    fraSum.nNume=nAdd2*fraAdd1.nDeno+fraAdd1.nNume;
    return fraSum;
}

FRACTION CalcSub_f (FRACTION fraSub1, FRACTION fraSub2)
{
   FRACTION fraResult;
   fraResult.nNume = (fraSub1.nNume * fraSub2.nDeno)-(fraSub2.nNume * fraSub1.nDeno);
   fraResult.nDeno = (fraSub1.nDeno * fraSub2.nDeno);
   Simplify_f(&fraResult);
   return fraResult;
}

FRACTION  CalcSubNum_f (FRACTION  fraSub1, int nSub2)
{
    FRACTION fraResult;
    fraResult.nDeno=fraSub1.nDeno;
    fraResult.nNume=fraSub1.nNume - nSub2*fraSub1.nDeno;
    return fraResult;
}

FRACTION Multi_f (FRACTION  fraMulti1,  FRACTION fraMulti2)
{
    FRACTION fraProduct;
    fraProduct.nNume = fraMulti1.nNume * fraMulti2.nNume;
    fraProduct.nDeno = fraMulti1.nDeno * fraMulti2.nDeno;
    Simplify_f(&fraProduct);
    return fraProduct;
}

FRACTION MultiNum_f (FRACTION fraMulti, int nNum)
{
    FRACTION fraProduct;
    fraProduct.nNume=fraMulti.nNume*nNum;
    fraProduct.nDeno=fraMulti.nDeno;
    Simplify_f(&fraProduct);
    return fraProduct;
}

FRACTION  Div_f ( FRACTION fraDivid, FRACTION fraDivis)
{
   FRACTION fraQuot;
   if(CompareNum_f( fraDivis,0 ) == 0)
  {
       printf( "Error:  Division by zero attempted!\n");
       printf( "Press any key to terminate");
       getchar ();
       return;
  }
  fraQuot.nNume = fraDivid.nNume*fraDivis.nDeno;
  fraQuot.nDeno = fraDivid.nDeno*fraDivis.nNume;
  Simplify_f(&fraQuot);
  return fraQuot;
}

FRACTION DivNum_f (FRACTION fraDivid, int nNum)
{
    FRACTION fraQuot;
    if(nNum == 0)
  {
       printf( "Error:  Division by zero attempted!\n");
       printf( "Press any key to terminate");
       getchar ();
       return;
  }
  fraQuot.nNume = fraDivid.nNume;
  fraQuot.nDeno = fraDivid.nDeno*nNum;
  Simplify_f(&fraQuot);
  return fraQuot;
}

FRACTION fraPower_f (FRACTION fraBase, int nExp)
{
    FRACTION fraValue;
    fraValue.nNume=pow(fraBase.nNume, nExp);
    fraValue.nDeno=pow(fraBase.nDeno, nExp);
    return fraValue;
}

int CompareNum_f (FRACTION fraSample  , int nNum)
{
    FRACTION fraValue;
    fraValue=CalcSubNum_f(fraSample, nNum);
    if(fraValue.nNume==0)
         return 0;
    else if(fraValue.nNume>0)
               return 1;
    return -1;
}

int Compare_f( FRACTION fraSample1, FRACTION fraSample2)
{
    FRACTION fraValue;
    fraValue=CalcSub_f(fraSample1, fraSample2);
    if(fraValue.nNume==0)
         return 0;
    else if(fraValue.nNume>0)
               return 1;
    return -1;
}

void PrintFraction_f(FRACTION fraSample)
{
       printf("%d/%d ", fraSample.nNume, fraSample.nDeno);
}
void Print_f (FRACTION fraSample)
{
    printf("%d/%d    =  %f  \n", fraSample.nNume, fraSample.nDeno,  (float)(fraSample.nNume)/fraSample.nDeno );
}

void Input_f(FRACTION *npSample)
{
    int nNume, nDeno;
    printf("Please input numerator: ");
    scanf("%d", &npSample->nNume);
    printf("Please input denominator(not zero) : ");
    scanf("%d", &npSample->nDeno);
}

void Init_f()
{
    printf("\n*****************************\n");
    printf("       Welcome to Use Calculator\n");
    printf("*******************************\n");
    printf("\n 1.Add \n 2.Subtration\n 3.Multiply\n 4.Division\n 5. Power\n 6. Exit\n\n");
    printf("Please Input Your Choice\n");
}

void Add1_f()
{
     FRACTION  fraAdd1, fraAdd2, fraSum;
     Input_f(&fraAdd1);
     Input_f(&fraAdd2);
     fraSum=CalcAdd_f(fraAdd1, fraAdd2);
     PrintFraction_f(fraAdd1);
     printf("+");
     PrintFraction_f(fraAdd2);
     printf(" = ");
     Print_f(fraSum);
}
void Add2_f(){}
void Sub_f(){}
void Add_f()
{
   char chChoice;
   getchar();
   do
  {
      printf("\n 1. Fraction Add Fraction\n");
      printf("\n 2. Fraction Add Number\n");
      printf("\n 3. Exit\n");
      printf("\n Please input your choice:\n");
      chChoice=getchar();
      switch(chChoice)
     {
          case '1' :  Add1_f();  break;
          case '2' :  Add2_f();  break;
          case '3':  break;
           default:
	       printf(" Input Error!   Please Input Again!\n");
      }
      getchar();
   }while( chChoice!='3');
}


main()  /*未完*/
{
    char  chChoice;
    do
    {
        Init_f();
        chChoice=getchar();
        switch(chChoice)
       {
           case '1':  Add_f();  break;
           case '2':  Sub_f();  break;
           case '6':  break;
           default:
               printf(" Input Error!   Please Input Again!\n");
	 }
      getchar();
      }while(chChoice!='6');
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -