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 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; }
最大公约数
int gcd(int a,int b) { while(a%b!=0) { int t=a%b; a=b; b=t; } return b; }
//整数减法
void intsub(int min,int max)
{
int a,b,uanswer,t;
srand(time(NULL)); //初始化随机数种子
a=rand()%max+min;
b=rand()%max+min;
if(a<b)
{
t=a;
a=b;
b=t;
}
printf("%d-%d=",a,b);
scanf("%d",&uanswer);
if(uanswer==a-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);
}
}
printf("right\n"); right++; } else { printf("wrong\n正确答案是%d\n",a-b); } }
结果截图
整数减法运算
真分数减法运算
代码链接 https://git.coding.net/wengbm/bm.git
实验总结:
没有画流程图所以在整体美观和功能实现上和现实有较大的出入。在真分数的约分上有点小问题考虑的不够全面。