计算器(1)大一课程设计

#include
#include
#include
using namespace std;
int G(int k,int l) //定义最小公倍数函数
{
int c,m,n;
m=k;n=l;
if(k{
swap(k,l);
while(l!=0)
{ c=k%l; k=l; l=c;}
}
else
{
while(l!=0)
{ c=k%l; k=l; l=c;}
}
return m*n/k; //k为最大公约数
}
void J(int res[], int n) //进位函数
{
for(int i=0;i{
res[i+1] += (res[i]/10); //错位相加
res[i]%=10; //一个一个的取数
}
}
void fac1()
{
while(1)
{
int x,y,m,n;
char A='/',C,B;
cout<<"输入第一个分数【格式为a/b】: ";
cin>>x>>A>>y;
cout<<"请选择计算方式<+,-,*,/>: ";
cin>>B;
cout<<"输入第二个分数【格式为a/b】: ";
cin>>m>>A>>n;
if(y==0||n==0) //判断分母是否为0,为0则返回主界面
{
cout<<"分母为0,错误,返回主界面!"<break;
}
else if(B=='+'&&y==n) //同分母不用通分
{
int Y=((x+m)*y)/G(x+m,y); //取最大公约数
if(x+m==y)
{ cout<<"输出结果: "<<1<else if(Y==1)
{
cout<<"输出结果: "<}
else
{
cout<<""<<(x+m)/Y<<"/"<}
}
else if(B=='+'&&y!=n) //分母不同需通分后计算
{
int s;
s=G(y,n);
int X=(((s/y)*x+(s/n)*m)*s)/G((s/y)*x+(s/n)*m,s); //取最大公约数
if((s/y)*x+(s/n)*m==s) //分子分母值相同,则其值为1
{cout<<"输出结果: "<<1<else if(X==1)
{
cout<<"输出结果: "<<(s/y)*x+(s/n)*m<<"/"<}
else
{
cout<<"输出结果: "<<((s/y)*x+(s/n)*m)/X<<"/"<}
}
else if(B=='-'&&y==n) //分母相同直接计算
{
int Z=((x-m)*y)/G(x-m,y); //取最大公约数
if(x-m==y)
{cout<<"输出结果: "<<1<else if(Z==1)
{
cout<<"输出结果:"<}
else
{
cout<<"输出结果:"<<(x-m)/Z<<"/"<}
}
else if(B=='-'&&y!=n) //分母不同需通分后计算
{
int s;
s=G(y,n);
int T=(((s/y)*x-(s/n)*m)*s)/G((s/y)*x-(s/n)*m,s); //取最大公约数
if((s/y)*x-(s/n)*m==s) //分子分母值相同,则其值为1
{cout<<"输出结果: "<<1<else if(T==1)
{
cout<<"输出结果: "<<(s/y)*x-(s/n)*m<<"/"<}
else
{
cout<<"输出结果: "<<((s/y)*x-(s/n)*m)/T

<<"/"<}
}
else if(B=='*')
{
int K=(x*m*y*n)/G(x*m,y*n); //取最大公约数
if(x*m==y*n) //分子分母值相同,则其值为1
{cout<<"输出结果: "<<1<else if(K==1)
{
cout<<"输出结果:"<}
else
{
cout<<"输出结果:"<<(x*m)/K<<"/"<<(y*n)/K<}
}
else if(B=='/')
{
int L=(x*m*y*n)/G(x*n,y*m); //取最大公约数
if(x*n==y*m) //分子分母值相同,则其值为1
{cout<<"输出结果: "<<1<if(L==1)
{
cout<<"输出结果:"<}
else
{
cout<<"输出结果:"<<(x*n)/L<<"/"<<(y*m)/L<}
}
cout<<"是否继续进行运算: ";
cin>>C; //输入Y/N(Y表示继续,N表示不继续,返回主界面)
if(C=='Y') //判断是否继续
{continue;}
else
{break;}
}
}
void fac2()
{
while(1)
{
int x,m,n;
char A='/',C,B;
cout<<"输入一个整数【格式为a】: ";
cin>>x;
cout<<"请选择计算方式<+,-,*,/>: ";
cin>>B;
cout<<"输入第二个分数【格式为a/b】: ";
cin>>m>>A>>n;
if(n==0) //判断分数是否为0,是则返回主界面重新选择
{
cout<<"分母为0,错误,返回主界面!"<break;
}
else if(B=='+')
{
int Q=(x*n+m)*n/G(x*n+m,n); //取最大公约数
if(x*n+m==n) //分子分母值相同,则其值为1
{cout<<"输出结果: "<<1<else if(Q==1)
{
cout<<"计算结果: "<}
else
{
cout<<"计算结果: "<<(x*n+m)/Q<<"/"<}
}
else if(B=='-')
{
int Q=(x*n-m)*n/G(x*n-m,n); //取最大公约数
if(x*n+m==n)
{cout<<"输出结果: "<<1<else if(Q==1)
{
cout<<"计算结果: "<}
else
{
cout<<"计算结果: "<<(x*n-m)/Q<<"/"<}
}
else if(B=='*')
{
int Q=(x*m)*n/G(x*m,n); //取最大公约数
if(x*m==n)
{cout<<"输出结果: "<<1<else if(Q==1)
{
cout<<"计算结果: "<}
else
{
cout<<"计算结果: "<<(x*m)/Q<<"/"<}
}
else if(B=='/'&&m==0)
{
cout<<"除后分母为0,错误,返回主界面!"<break;
}
else if(B=='/')
{
int Q=(x*n)*m/G(x*n,m); //取最大公约数
if(x*n==m)
{cou

t<<"输出结果: "<<1<else if(m==1) //分子为1就直接与分母相乘
{
cout<<"计算结果: "<}
else if(Q==1&&m!=1) //分子不为1且计算结果不可约
{
cout<<"计算结果: "<<(x*n)<<"/"<}
else if(Q!=1&&m!=1) //分子不为1且计算结果可约后输出
{
cout<<"计算结果: "<<(x*n)/Q<<"/"<}
}
cout<<"是否继续进行运算: ";
cin>>C; //输入Y/N(Y表示继续,N表示不继续,返回主界面)
if(C=='Y') //判断是否继续
{continue;}
else
{break;}
}
}
void fac3()
{
while(1)
{
int x,m,n;
char A,C;
cout<<"输入一个整数【格式为a】: ";
cin>>m;
cout<<"请选择计算方式<+,-,*,/,%>: ";
cin>>A;
cout<<"输入第二个整数数【格式为b】: ";
cin>>n;
if(A=='+')
{
cout<<"计算结果: "<}
else if(A=='-')
{
cout<<"计算结果: "<}
else if(A=='*')
{
cout<<"计算结果: "<}
else if(A=='/'&&n!=0)
{
cout<<"计算结果: "<}
else if(A=='/'&&n==0) //除数为0,返回主界面
{
cout<<"除数为0,错误,返回主界面!"<break;
}
else if(A=='%') //整数的取余操作
{
cout<<"计算结果: "<}
cout<<"是否继续进行运算: "; //输入Y/N(Y表示继续,N表示不继续,返回主界面)
cin>>C; //判断是否继续
if(C=='Y')
{continue;}
else
{break;}
}
}
void fac4()
{
while(1)
{
int x,y,n;
char A='/',C;
cout<<"输入第一个分数【格式为a/b】: ";
cin>>x>>A>>y;
cout<<"输入指数【格式为a】: ";
cin>>n;
int H=(pow(x,abs(n))*pow(y,abs(n)))/G(pow(x,abs(n)),pow(y,abs(n))); //取分子分母的最大公约数
if(n<0&&x==1) //分子为1的算法
{
cout<<"计算结果: "<}
else if(n<0&&x!=1&&x!=0&&y!=0&&y!=1) //指数为负的算法
{
int Z=(pow(x,abs(n))*pow(y,abs(n)))/G(pow(y,abs(n)),pow(x,abs(n)));
if(Z==1)
{cout<<"计算结果: "<else
{cout<<"计算结果: "<}
else if(y==0||x==0)
{
cout<<"输入的分母为0,返回主界面!"<break;
}
else if(n==0) //0次方为结果为1
{
cout<<"计算结果: "<<1<}
else if(H==1)
{
cout<<"计算结果: "<

n))<}
else
{
cout<<"计算结果: "<}
cout<<"是否继续进行运算: ";
cin>>C;
if(C=='Y')
{continue;}
else
{break;}
}
}
void fac5()
{
#define MAXN 99999 //宏定义
while(1)
{
int res[MAXN]={0};
int a,b,i;
char C;
cout<<"输入一个整数【格式为a】: ";
cin>>a;
cout<<"输入指数【格式为b】: ";
cin>>b;
if(b==0)
{
cout<<"计算结果: "<<1<}
else if(b<0) //指数小于0的计算
{
res[0]=a;
for(i=1;i{
for(int j=0;j{
res[j] *= a; //大数的每一位乘以a
}
J(res, MAXN); //进位
}
cout<<1<<"/";
for(i=MAXN-1;i>=0;--i) //高位多余的0不需要输出
{
if(res[i] != 0) break;
}
for(;i>=0;--i) //从第一个不是0的高位开始输出
{
cout<}
cout<}
else
{
res[0]=a;
for(i=1;i{
for(int j=0;j{
res[j] *= a; //大数的每一位乘以a
}
J(res, MAXN); //进位
}
for(i=MAXN-1;i>=0;--i) //高位多余的0不需要输出
{
if(res[i] != 0) break;
}
for(;i>=0;--i) //从第一个不是0的高位开始输出
{
cout<}
cout<}
cout<<"是否继续进行运算: ";
cin>>C;
if(C=='Y')
{continue;}
else
{break;}
}
}
void fac6()
{
while(1)
{
int x,y,m,n;
double s;
string A="log";char C,B;
cout<<"输入第一个对数【格式为log a为底,且大于0,且不为1,b为对数且大于0】: ";
cout<>x>>y;
cout<<"请选择计算方式<+,-,*,/>: ";
cin>>B;
cout<<"输入第二个对数【格式为log a为底且大于0,且不为1,b为对数且大于0】: ";
cout<>m>>n;
if(x<=0||y<=0||m<=0||n<=0||x==1||m==1) //取定义域使对数有意义
{
cout<<"输入有错!返回主界面!"<cout<break;
}
else if(B=='+') //计算加法
{
s=(log(y)/log(x))+(log(n)/log(m));
cout<<"计算结果: "<}
else if(B=='-') //计算减法
{
s=(log(y)/log(x))-(log(n)/log(m));
cout<<"计算结果: "<}
else if(B=='*') //计算乘法
{
s=(log(y)/log(x))*(log(n)/log(m));
cout<<"计算结果: "<}
else if(B=='/') //计算除法
{
s=(log(y)/log(x))/(log(n)/log(m));
cout<<"计算结果: "<}
cout<<"是否继续进行运算: ";
cin>>C; //输入Y/N(Y表示继续,N表示不继续,返回主界面)
if(C

=='Y') //判断是否继续
{continue;}
else
{break;}
}
}
int menu_jisuanqi()
{
char c;
cout<<"*****************************************"<cout<<"* 欢迎使用山理工牌计算器 v1.0*"<cout<<"* *"<cout<<"*1. 分数与分数之间的运算 *"<cout<<"*2. 整数与分数之间的运算 *"<cout<<"*3. 整数与整数之间的运算 *"<cout<<"*4. 分数的指数运算 *"<cout<<"*5. 整数的指数运算 *"<cout<<"*6. 对数的运算 *"<cout<<"*7. 退出 *"<cout<<"\n请输入(1~7):";
do{ //强制执行
cin.get(c);
}
while(c<'1'||c>'7');
return c-48; //返回值返回int型
}
int main()
{
char choice;
for(;;)
{
choice = menu_jisuanqi();
switch(choice)
{
case 1:fac1();break;
case 2:fac2();break;
case 3:fac3();break;
case 4:fac4();break;
case 5:fac5();break;
case 6:fac6();break;
case 7:exit(0);
}
}
return 0;
}

相关文档
最新文档