博客班级 | AHPU软件工程 |
---|---|
作业要求 | 实现小学四则运算 |
作业目标 | |
学号 | 3180701211 |
一、题目要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
二、代码
1.整数加法
void add()
{
int s=0;
int a,b,c,n;
//输入要生成的题目数量
printf(" 请输入要生成的题目数量:");
scanf("%d",&n);
while(s<n)
{
srand(time(0));
a=rand()%100;
b=rand()%100;
c = a + b ;
printf(" %d+%d=",a,b);
scanf("%d",&sum);
if(sum==c)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
s++;
}
printf(" 答对了%d题,打错了%d题
",right,wrong);
}
2.整数减法
void sub()
{
int s=0;
int a,b,c,n,q;
//输入要生成的题目数量
printf(" 请输入要生成的题目数量:");
scanf("%d",&n);
while(s<n)
{
srand(time(0));
a=rand()%100;
b=rand()%100;
if(a<b)
{
q=a;
a=b;
b=q;
}
c = a - b ;
printf(" %d-%d=",a,b);
scanf("%d",&sum);
if(sum==c)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
s++;
}
printf(" 答对了%d题,打错了%d题
",right,wrong);
}
3.整数乘法
void mul()
{
int s=0;
int a,b,c,n;
//输入要生成的题目数量
printf(" 请输入要生成的题目数量:");
scanf("%d",&n);
while(s<n)
{
srand(time(0));
a=rand()%11;
b=rand()%11;
c = a * b;
printf(" %d*%d=",a,b);
scanf("%d",&sum);
if(sum==c)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
s++;
}
printf(" 答对了%d题,打错了%d题
",right,wrong);
}
4.整数除法
void chu()
{
int s=0;
int a,b,n,q;
float c;
//输入要生成的题目数量
printf(" 请输入要生成的题目数量:");
scanf("%d",&n);
while(s<n)
{
srand(time(0));
a=rand()%100;
b=rand()%100;
if(a<b)
{
q=a;
a=b;
b=q;
}
c = a / b;
printf(" %d/%d=",a,b);
scanf("%d",&sum);
if(sum==c)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
s++;
}
printf(" 答对了%d题,打错了%d题
",right,wrong);
}
5.真分数运算
最大公倍数
int gcd(int a,int b)
{
if(a%b==0)
return b;
else;
return gcd(b,a%b);
}
真分数运算
void zhenfenshu()
{ int s=0;
int e,f,k,c,d,n,p;
int gxs;
char answer[10];
int ansz,ansm;
char a1[12],a2[12];
//输入要生成的题目数量
printf(" 请输入要生成的题目数量:");
scanf("%d",&n);
while(s<n)
{
srand(time(0));
e=rand()%9+1;
f=rand()%9+1;
k=rand()%4+1;
if(e>=f)
{
p=e;
e=f;
f=p;
}
c=rand()%9+1;
d=rand()%9+1;
if(c>=d)
{
p=c;
c=d;
d=p;
}
switch(k)
{
case 1:
ansz=e*d+c*f;
ansm=f*d;
gxs=gcd(ansz,ansm);
ansz/=gxs;
ansm/=gxs;
itoa(ansz,a1,10);
itoa(ansm,a2,10);
strcat(a1,"/");
strcat(a1,a2);
printf(" %d/%d+%d/%d=",e,f,c,d);
scanf("%s",answer);
if(strcmp(a1,answer)==0)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
break;
case 2:
ansz=e*d-c*f;
ansm=f*d;
gxs=gcd(ansz,ansm);
ansz/=gxs;
ansm/=gxs;
itoa(ansz,a1,10);
itoa(ansm,a2,10);
strcat(a1,"/");
strcat(a1,a2);
printf(" %d/%d-%d/%d=",e,f,c,d);
scanf("%s",answer);
if(strcmp(a1,answer)==0)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
break;
case 3:
ansz=e*c;
ansm=f*d;
gxs=gcd(ansz,ansm);
ansz/=gxs;
ansm/=gxs;
itoa(ansz,a1,10);
itoa(ansm,a2,10);
strcat(a1,"/");
strcat(a1,a2);
printf(" %d/%d*%d/%d=",e,f,c,d);
scanf("%s",answer);
if(strcmp(a1,answer)==0)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
break;
case 4:
ansz=e*d;
ansm=f*c;
gxs=gcd(ansz,ansm);
ansz/=gxs;
ansm/=gxs;
itoa(ansz,a1,10);
itoa(ansm,a2,10);
strcat(a1,"/");
strcat(a1,a2);
printf(" %d/%d / %d/%d=",e,f,c,d);
scanf("%s",answer);
if(strcmp(a1,answer)==0)
{
printf(" 回答正确!
");
right++;
}
else
{
printf(" 回答错误!
");
wrong++;
}
break;
}
s++;
}
printf(" 答对了%d题,打错了%d题
",right,wrong);
}
6.主函数
int main()
{
int n,t;//n 题数 t 运算类型编号
while(1){
//输入产生的运算类型
printf("
*****小学四则运算****
");
printf("请选择以下的题目类型:
");
printf("1.加法运算
");
printf("2.减法运算
");
printf("3.乘法运算
");
printf("4.除法运算
");
printf("5.真分数运算
");
printf("请选择题目类型(0-5):");
scanf("%d",&t);
switch(t)
{
case 1:
add();
break;
case 2:
sub();
break;
case 3:
mul();
break;
case 4:
chu();
break;
case 5:
zhenfenshu();
break;
default:
printf("输入错误! 请重新选择!");
break;
}
}
return 0;
}
三、运行界面
四、个人小结
1.psp表格
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 200 | 240 |
Development | 开发 | 100 | 150 |
Analysis | 需求分析(包括学习新技术) | 30 | 40 |
Design Spec | 生成设计文档 | 30 | 50 |
Design Review | 设计复审 | 5 | 15 |
Coding Standard | 代码规范 | 3 | 10 |
Design | 具体设计 | 10 | 15 |
Coding | 具体编码 | 36 | 26 |
Code Review | 代码复审 | 5 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 30 |
Reporting | 报告 | 9 | 30 |
Test Report | 测试报告 | 3 | 30 |
Size Measurement | 计算工作量 | 2 | 10 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 10 |
2.心得和经验
通过本次作业,我学会了熟练使用markdown编辑器,同时也锻炼了我的代码编写能力。