个人作业1——四则运算题目生成程序
题目描述:
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的
命令行 “软件”,满足以下需求:
- 1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 2.运算符为 +, −, ×, ÷并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 3.要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 4.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目Myapp.exe -n 10
分析:
程序实现的要求:
- 自动生成题目
- 支持整数,真分数(实现中,也有假分数)
- 支持加减乘除
- 判断对错并统计正确率
对此我用C语言简单实现了需求,但我的代码不够精简和效率。
实现步骤:
- 提示用户要产生几道题目,用户输入题目数后开始答题。
- 题目依次随机产生,第一道题目产生后,用户答完题,判断对错,错则给出正确答案,再继续产生下一道提。
- 答完所有题目后给出正确率。
程序的实现较为简单,我将题目分为整数题和真分数题,二者随机产生。
整数函数部分实现简单,随机产生两个数,再随机产生一个1到4的随机整数,用switch来随机·产生加减乘除题目。
并计算出答案,用itoa函数将答案转为字符串,用户输入自己计算的结果(也是字符串),两者相比较。
分数考虑到约分还需要求最大公约数。
int gcd(int n,int m)
{
int temp,r;
if(n<m)
{
temp=n;
n=m;
m=temp;
}
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
return n;
}
在除法题中可能出现分数,所以我让程序判断是否为分数,
真分数函数部分则是随机产生四个数,如i,j,n,m.i为第一个的分子并要小于j,j为第一个数的分母。同理n为分子,m为分母。
加减法计算时要先求出两个分母的最小公倍数。
int zxgb(int n,int m)
{
int i;
for (i=n; ; i++)
if (i%n==0&&i%m==0)
break;
return i;
}
实际操作过程
如图:
实验总结:
我觉得我的程序还不够完善,在产生随机题目是有时要等一段时间题目才会出现,这可能是算法的问题。之后我会再逐步完善。
实现的题目也较为简单,只有两数的四则运算。只是这样的程序花的时间也超出我的预期。