一、作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
这个作业的目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
学号 | 3180701305 |
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、代码部分
3.1整数的四则运算
3.1.1整数加法
void int_add()
{
int a,b,c;
a=rand()%100;//随机取数
b=rand()%100;
printf("请输入你的答案:%d + %d = ",a,b);
scanf("%d",&c);
if(a+b==c)
{
printf("答案正确,得分+1!
");
right++;
all++;
}
else
{
printf("答案错误,得分-1!
");
wrong++;
all--;
}
}
3.1.2整数减法
void int_sub()
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请输入你的答案:%d - %d = ",a,b);
scanf("%d",&c);
if(a-b==c)
{
printf("答案正确,得分+1
");
right++;
all++;
}
else
{
printf("答案错误,得分-1
");
wrong++;
all--;
}
}
3.1.3整数乘法
void int_mul()
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请输入你的答案: %d * %d = ",a,b);
scanf("%d",&c);
if(a*b==c)
{
printf("答案正确,得分+1
");
right++;
all++;
}
else
{
printf("答案错误,得分-1
");
wrong++;
all--;
}
}
3.1.4整数除法
void int_div()
{
int a,b;
float c;
a=rand()%100;
b=rand()%100+1;
printf("请输入你的答案: %d / %d = ",a,b);
scanf("%f",&c);
if(a/b==c)
{
printf("答案正确,得分+1
");
right++;
all++;
}
else
{
printf("答案错误,得分-1
");
wrong++;
all--;
}
}
3.2真分数四则运算
3.2.1分数加法
void eig_add()
{
int n1,n2,m1,m2,zuida,M1,M,N1,N;//
char v; //用来表示分数中的"/",n是分子,m是分母,N是最终结果分子,M是最终结果分母
n1=rand()%100;
m1=n1+rand()%100+1;
n2=rand()%100;
m2=n2+rand()%100+1;
M=m1*m2;
N=n1*m2+n2*m1;
//化简分数
zuida=yuefen(N,M);
if(zuida!=1)
{
N=N/zuida;
M=M/zuida;
}
//判断答案
printf("请输入你的答案:%d/%d + %d/%d = ",n1,m1,n2,m2);
scanf("%d%c%d",&N1,&v,&M1);
if(N==N1&&M==M1)
{
printf("答案正确,得分+1!
");
right++;
all++;
}
else
{
printf("答案错误,得分-1!
");
wrong++;
all--;
}
}
3.2.2分数减法
void eig_sub()
{
int n1,n2,m1,m2,zuida,M1,M,N1,N;//
char v; //用来表示分数中的"/",n是分子,m是分母,N是最终结果分子,M是最终结果分母
n1=rand()%100;
m1=n1+rand()%100+1;
n2=rand()%100;
m2=n2+rand()%100+1;
M=m1*m2;
N=n1*m2-n2*m1;
//化简分数
zuida=yuefen(N,M);
if(zuida!=1)
{
N=N/zuida;
M=M/zuida;
}
//判断答案
printf("请输入你的答案:%d/%d - %d/%d = ",n1,m1,n2,m2);
scanf("%d%c%d",&N1,&v,&M1);
if(N==N1&&M==M1)
{
printf("答案正确,得分+1!
");
right++;
all++;
}
else
{
printf("答案错误,得分-1!
");
wrong++;
all--;
}
}
3.2.3分数乘法
void eig_mul()
{
int n1,n2,m1,m2,zuida,M1,M,N1,N;//
char v;//用来表示分数中的"/"
//n是分子,m是分母,N是最终结果分子,M是最终结果分母
n1=rand()%100;
m1=n1+rand()%100+1;
n2=rand()%100;
m2=n2+rand()%100+1;
M=m1*m2;
N=n1*n2;
//化简分数
zuida=yuefen(N,M);
if(zuida!=1)
{
N=N/zuida;
M=M/zuida;
}
//判断答案
printf("请输入你的答案:%d/%d * %d/%d = ",n1,m1,n2,m2);
scanf("%d%c%d",&N1,&v,&M1);
if(N==N1&&M==M1)
{
printf("答案正确,得分+1!
");
right++;
all++;
}
else
{
printf("答案错误,得分-1!
");
wrong++;
all--;
}
}
3.2.4分数除法
void eig_div()
{
int n1,n2,m1,m2,zuida,M1,M,N1,N;//
char v;//用来表示分数中的"/"
//n是分子,m是分母,N是最终结果分子,M是最终结果分母
n1=rand()%100;
m1=n1+rand()%100+1;
n2=rand()%100;
m2=n2+rand()%100+1;
M=m1*n2;
N=n1*m2;
//化简分数
zuida=yuefen(N,M);
if(zuida!=1)
{
N=N/zuida;
M=M/zuida;
}
//判断答案
printf("请输入你的答案:%d/%d / %d/%d = ",n1,m1,n2,m2);
scanf("%d%c%d",&N1,&v,&M1);
if(N==N1&&M==M1)
{
printf("答案正确,得分+1!
");
right++;
all++;
}
else
{
printf("答案错误,得分-1!
");
wrong++;
all--;
}
}
3.3其他函数
3.3.1主函数
int main(void)
{
int c,s=1,tishu,i=0;
printf("生成题数为:");
scanf("%d",&tishu);
while(s)
{
if(s==1)
{
if(i==tishu)
{
printf("
答题结束!
");
break;
}
printf("
整数运算还是真分数运算?
整数运算--1,真分数运算--2,退出--3
");
printf("请输入: ");
scanf("%d",&c);
if(c==3)
{
s=0;
break;
}
switch(c)
{
case 1:
int_count();
i++;
break;
case 2:
eig_count();
i++;
break;
default:
printf("错误输入项!");
s=0;
break;
}
}
if(s==0)
break;
}
printf("
答题正确数:%d
答题错误数:%d
最终得分为:%d分
",right,wrong,all);
}
3.3.2求最大公约数
int yuefen(int fenzi,int fenmu)
{
int da=fenzi,xiao=fenmu;
if(da<xiao)
{
int t=da;
da=xiao;
xiao=t;
}
while(da%xiao!=0)
{
da=da/xiao;
if(da<xiao)
{
int t=da;
da=xiao;
xiao=t;
}
}
return xiao;
}
四、运行截图
4.1加法
整数加法
真分数加法
4.2减法
整数减法
真分数减法
4.3乘法
整数乘法
真分数乘法
4.4除法
整数除法
真分数除法
4.5其他
五、个人小结
5.1小结
通过阅读与修改代码,实现了作业要求的功能,同时也增强了自己的动手能力。在这个过程中,体会到程序编写的乐趣,当然也伴随有挫败感。但是,当看到程序输出了自己想要的结果的时候,却也有一种由衷的成就感。同时也认识到,程序的规则是死的,是严格定义的,只要花时间总是能掌握的,因此不必有太多的畏惧之心。继续加油!!!
5.2psp表格
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 |