个人作业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;
}

实际操作过程

如图:

实验总结:

我觉得我的程序还不够完善,在产生随机题目是有时要等一段时间题目才会出现,这可能是算法的问题。之后我会再逐步完善。
实现的题目也较为简单,只有两数的四则运算。只是这样的程序花的时间也超出我的预期。

代码地址