首页 > 代码库 > 基于控制台的四则运算
基于控制台的四则运算
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系统实现
开发环境
Pc机 devcpp(编译)
主要代码
//整数除法
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;
}
结果截图
整数减法运算
真分数减法运算
代码链接
实验总结:
没有画流程图所以在整体美观和功能实现上和现实有较大的出入。在真分数的约分上有点小问题考虑的不够全面。
基于控制台的四则运算