📄 第3题_分数计算器.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 + -