首页 > 代码库 > 基于控制台的四则运算

基于控制台的四则运算

1.1具体任务

1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24

2.运算符为 +, ?, ×, ÷

3.并且要求能处理用户的输入,并判断对错,打分统计正确率。

4.要求能处理用户输入的真分数, 1/2, 5/12

5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
   Myapp.exe -n 10

1.21.需求分析

  • 1、整数四则运算(数字随机生成);
  • 2、真分数四则运算(数字随机生成);
  • 3、小学生故结果不能出现负数;
  • 3、使用 -n 参数控制生成题目的个数。
  • 系统

1.3系统模块设计

 

系统共设计了两大模块:

一.整数四则

 

//整数加法
void intadd(int min,int max)

//整数减法
void intsub(int min,int max)//考虑负数问题

//整数乘法
void intmul(int min,int max)

//整数除法
int intdiv(int min,int max)//考虑整除问题

二.真分数四则

//考虑约分还有结果比较问题

出现约分问题故需要最大公约数则许编写int gcd(int a,int b)函数

//真分数加法
void zfsadd()

//真分数减法
void zfssub()

//真分数乘法
void zfsmul()

//真分数除法
void zfsdiv()

1.3系统实现

开发环境

Pcdevcpp(编译)

主要代码

//整数除法 


int intdiv(int min,int max)
{ int a,b,uanswer;
srand(time(NULL)); //初始化随机数种子
a=rand()%max+min;
b=rand()%max+min; //避免除数为0的情况
if(a%b!=0)//避免不能整除的情况
{
a=a*b;
}
printf("%d÷%d=",a,b);
scanf("%d",&uanswer);
if(uanswer==a/b)
{
printf("right\n");
right++;
}
else
{
printf("wrong\n正确答案是%d\n",a/b);

}

}

//求最大公约数 


int gcd(int a,int b)
{
while(a%b!=0)
{
int t=a%b;
a=b;
b=t;
}
return b;
}

//真分数减法


void zfssub()
{
int x,y,t;
char ranswer[20],uanswer[20],p[20];
int x1,y1,x2,y2;
srand(time(NULL));
x1=rand()%10+1;
x2=rand()%10+1;
y1=rand()%10+1;
y2=rand()%10+1;
if((float)x1/(float)y1<(float)x2/(float)y2) //避免出现负数的情况
{
t=x1;x1=x2;x2=t;
t=y1;y1=y2;y2=t;
}
x=x1*y2-x2*y1;
y=y1*y2;
t=gcd(x,y);
x=x/t;
y=y/t;
printf("%d/%d -%d/%d=",x1/gcd(x1,y1),y1/gcd(x1,y1),x2/gcd(x2,y2),y2/gcd(x2,y2));
itoa(x,ranswer,10);
itoa(y,p,10);
strcat(ranswer,"/");
strcat(ranswer,p);
scanf("%s",&uanswer);
if(strcmp(ranswer,uanswer)==0)
{
printf("right\n");
right++;
}
else
{
printf("wrong\n正确答案是%s\n",ranswer);

}
}

主函数

int main(int argc,char *argv[])
{

int min,max,choice,n;

min=0;
max=99;
n=atoi(argv[2]);
// n=10;

showMenu(n);
scanf("%d",&choice);
if(choice>0&&choice<5)
{
printf("请输入你要整数运算的范围0~?(默认0~99)\n");
scanf("%d",&max);

}


for(int i=0;i<n;i++)
{

switch(choice)
{

case 1:

intadd(min,max);
break;
case 2:
intsub(min,max);

break;
case 3:
intmul(min,max);
break;
case 4:
intdiv(min,max);
break;
case 5: zfsadd();
break;
case 6:zfssub();
break;
case 7:zfsmul();
break;
case 8:zfsdiv();
break;
default :printf("就不做!啦啦啦!");
break;

}


}
printf("正确率为%f%%",(float)right/(float)n*100);
return 0;



}

结果截图

技术分享

 

 

整数减法运算

技术分享

真分数减法运算

技术分享

代码链接

实验总结:

没有画流程图所以在整体美观和功能实现上和现实有较大的出入。在真分数的约分上有点小问题考虑的不够全面。

技术分享

 

基于控制台的四则运算