一、作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
这个作业的目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
学号 | 3180701307 |
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、代码提交与运行截图
1、源代码
#include <stdlib.h>
#include <windows.h>
//加法
void ADD()
{
int ts,b,c,d;
int scr=0;
int daan[100];
int daan1[100];
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
b=rand()%100+1;
c=rand()%100+1;
printf("%d+%d=
",b,c);
d=b+c;
daan[i]=d;
}
printf("请输入答案:
");
for(i=0;i<ts;i++)
{
scanf("%d",&daan1[i]);
if(daan1[i]==daan[i])
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d
",daan[i]);
}
printf("您的得分为:%d
",scr);
}
void ZADD()
{
int a,b,c,d,ts;
int scr=0;
int j,k,m;
char l;
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
a=rand()%10;
b=rand()%10+1;
do
{
b=rand()%10+1;
}while(a>=b);
c=rand()%10;
d=rand()%10+1;
do
{
d=rand()%10+1;
}while(c>=d);
printf("%d/%d+%d/%d=
",a,b,c,d);
a=(a*d)+(c*b);
b=b*d;
//化简
if(a<b)
{
for(m=a;m>=1;m--)
{
if((a%m==0)&&(b%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
else if(a==b)
{
scanf("%d",&j);
if(j==1)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为1
");
}
else
{
for(m=b;m>=1;m--)
{
if((b%m==0)&&(a%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
}
printf("您的得分为:%d
",scr);
}
//减法
void SUB()
{
int ts,b,c,d;
int scr=0;
int daan[100];
int daan1[100];
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
b=rand()%100+1;
c=rand()%100+1;
printf("%d-%d=
",b,c);
d=b-c;
daan[i]=d;
}
printf("请输入答案:
");
for(i=0;i<ts;i++)
{
scanf("%d",&daan1[i]);
if(daan1[i]==daan[i])
{
printf("回答正确!
");
scr=scr+1;
}
else
{
printf("回答错误!正确答案为%d
",daan[i]);
}
}
printf("您的得分为:%d
",scr);
}
void ZSUB()
{
int a,b,c,d,ts;
int scr=0;
int j,k,m;
char l;
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
a=rand()%10;
b=rand()%10+1;
do
{
b=rand()%10+1;
}while(a>=b);
c=rand()%10;
d=rand()%10+1;
do
{
d=rand()%10+1;
}while(c>=d);
printf("%d/%d-%d/%d=
",a,b,c,d);
a=(a*d)-(c*b);
b=b*d;
//化简
if(a<b)
{
for(m=a;m>=1;m--)
{
if((a%m==0)&&(b%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
else if(a==b)
{
scanf("%d",&j);
if(j==1)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为1
");
}
else
{
for(m=b;m>=1;m--)
{
if((b%m==0)&&(a%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
}
printf("您的得分为:%d
",scr);
}
//乘法
void MCL()
{
int ts,b,c,d;
int scr=0;
int daan[100];
int daan1[100];
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
b=rand()%100+1;
c=rand()%100+1;
printf("%d×%d=
",b,c);
d=b*c;
daan[i]=d;
}
printf("请输入答案:
");
//输出分数
for(i=0;i<ts;i++)
{
scanf("%d",&daan1[i]);
if(daan1[i]==daan[i])
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d
",daan[i]);
}
printf("您的得分为:%d
",scr);
}
void ZMCL()
{
int a,b,c,d,ts;
int scr=0;
int j,k,m;
char l;
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
a=rand()%10;
b=rand()%10+1;
do
{
b=rand()%10+1;
}while(a>=b);
c=rand()%10;
d=rand()%10+1;
do
{
d=rand()%10+1;
}while(c>=d);
printf("%d/%d×%d/%d=
",a,b,c,d);
a=a*c;
b=b*d;
//化简
if(a==0)
{
scanf("%d",&j);
if(j==0)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为0
");
}
else if(a<b)
{
for(m=a;m>=1;m--)
{
if((a%m==0)&&(b%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
else if(a==b)
{
scanf("%d",&j);
if(j==1)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为1
");
}
else
{
for(m=b;m>=1;m--)
{
if((b%m==0)&&(a%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
}
printf("您的得分为:%d
",scr);
}
//除法
void DIV()
{
int ts,b,c;
int scr=0;
double d,d1;
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
b=rand()%100+1;
c=rand()%100+1;
printf("%d÷%d=
",b,c);
d=(double)b/(double)c;
printf("请输入答案:
");
scanf("%f",&d1);
if(d=d1)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%f
",d);
}
printf("您的得分为:%d
",scr);
}
void ZDIV()
{
int a,b,c,d,ts;
int scr=0;
int j,k,m;
char l;
int i;
printf("生成题数:");
scanf("%d",&ts);
for(i=0;i<ts;i++)
{
a=rand()%10;
b=rand()%10+1;
do
{
b=rand()%10+1;
}while(a>=b);
c=rand()%10+1;
d=rand()%10+1;
do
{
d=rand()%10+1;
}while(c>=d);
printf("%d/%d÷%d/%d=
",a,b,c,d);
a=a*d;
b=b*c;
//化简
if(a==0)
{
scanf("%d",&j);
if(j==0)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为0
");
}
else if(a<b)
{
for(m=a;m>=1;m--)
{
if((a%m==0)&&(b%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
else if(a==b)
{
scanf("%d",&j);
if(j==1)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为1
");
}
else
{
for(m=b;m>=1;m--)
{
if((b%m==0)&&(a%m==0))
{
a=a/m;
b=b/m;
}
}
scanf("%d%c%d",&j,&l,&k);
if(l=='/')
{
if(j==a&&k==b)
{
printf("回答正确!
");
scr=scr+1;
}
else
printf("回答错误!正确答案为%d/%d
",a,b);
}
}
}
printf("您的得分为:%d
",scr);
}
//主函数
void main()
{
while(1)
{
int a;
printf("选择运算类型:
");
printf("1.整数运算
");
printf("2.真分数运算
");
scanf("%d",&a);
if(a==1)
{
printf("1.加法
");
printf("2.减法
");
printf("3.乘法
");
printf("4.除法
");
printf("请选择运算:
");
scanf("%d",&a);
switch(a)
{
case 1:
ADD();
break;
case 2:
SUB();
break;
case 3:
MCL();
break;
case 4:
DIV();
break;
default:
printf("选择错误!
");
break;
}
}
else if(a==2)
{
printf("1.加法
");
printf("2.减法
");
printf("3.乘法
");
printf("4.除法
");
printf("请选择运算:
");
scanf("%d",&a);
switch(a)
{
case 1:
ZADD();
break;
case 2:
ZSUB();
break;
case 3:
ZMCL();
break;
case 4:
ZDIV();
break;
default:
printf("选择错误!
");
break;
}
}
else
printf("选择错误!
");
}
}
2、运行截图
(1)、加法
(2)、减法
(3)、乘法
(4)、除法
四、个人小结
第一次接触markdown,感觉还行,跟word大差不差,用的话没遇到什么困难。关于这个题目,时间太仓促,关于运行速度和界面美化没有优化,观感一般,但要求所需要的点基本一应俱全。
(psp表格)
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 30 | 25 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 5 |
Development | 开发 | 120 | 148 |
Analysis | 需求分析(包括学习新技术) | 20 | 15 |
Design Spec | 生成设计文档 | 20 | 20 |
Design Review | 设计复审 | 15 | 10 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 20 | 20 |
Coding | 具体编码 | 40 | 45 |
Code Review | 代码复审 | 9 | 10 |
Test | 测试(自我测试,修改代码,提交修改) | 40 | 45 |
Reporting | 报告 | 10 | 20 |
Test Report | 测试报告 | 5 | 5 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 10 | 10 |