代码改变世界

个人作业1——四则运算题目生成程序(基于控制台)

2017-03-08 09:07  徐璨  阅读(373)  评论(1编辑  收藏  举报

源码地址:https://git.coding.net/xucan0110/first.git

1.需求分析:

现代社会不仅提笔忘字现象严重,人们也更加依赖于计算器,这个程序不仅可以满足小学生学习的检测,亦可作为成年人提升自己计算能力的练习工具

2.功能分析:

我将本次作业分析为两大部分:a.基本的四则运算及正误判断(包括整数与真分数两部分,分别涉及“加减乘除”);

                                       b.题目的生成(包括数的随机调用与运算符号的随机调用,以及两者间的随机组合);

3.设计实现:用C++语言实现

                 先将四则运算分为整数与分数两部分,整数不用说。分数则是采用辗转相除法求最大公约数的方法先判断是否为真分数,然后再用最小公倍数法求出结果。

                 题目的生成则随机调用0到9自由组成分数或整数,再与任一运算符号结合即可。

4.代码说明:

   a.随机选取运算符号的实现

   char Operator()

  {

    char op;
    srand(time(0));
    int i=rand()%4+1;
    switch(i)
    {
    case 1: return '+';
    case 2: return '-';
    case 3: return '*';
    case 4: return '/';
    }
  }
b.整数的运算(以加法为例)
   void integer() 
{
  int g;
  int x,y;
  char op;
  srand(time(0));
  x=rand()%100+1;//取随机数
  y=rand()%100+1;//取随机数
  op=Operator();
  cout<<x<<op<<y<<"="<<endl;
  cout<<"请输入运算结果:";
  if(op=='+') 
{
  cin>>g;
  if(g==x+y)
{
  cout<<"恭喜你答对了!"<<endl<<endl;
  correct++;//累计计算正确的题目数
}
  else
{
  cout<<"很遗憾你答错了,正确答案是:"<<x+y<<endl<<endl;
  mistake++;//累计计算错误题目个数
}
}
  else
 

c.辗转相除法实现求最大公约数

 int maxNumber(int k, int l) 

{
  while(k%l!=0){
  int t=k%l;
  k=l;
  l=t;
}
  return l;
}
d.真分数的运算(以除法为例)
  if(op=='/') 
{
  element=b*c;//分子的计算
  denominator=a*d;//分母的计算
  maxNum=maxNumber(element,denominator);
  element=element/maxNum;
  denominator=denominator/maxNum;
  if(denominator!=1)//分母不为一的情况
{
  sprintf_s(answer, "%d/%d",element ,denominator);
  if (strcmp(answer, result) == 0)
{
  cout<<"恭喜你答对了!"<<endl<<endl;
  correct++;
}
  else
{
  cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl;
  mistake++;
}
}
  else//分母为一的情况
{
  sprintf_s(answer, "%d",element);
  if (strcmp(answer, result) == 0)
{
  cout<<"恭喜你答对了!"<<endl<<endl;
  correct++;
}
  else
{
  cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl;
  mistake++;
}
5.测试运行
    

   

6.展示psp

PSP2.1 Personal Software Process Stages Time (m) Senior Student Time (m)
Planning 计划 10 20
· Estimate 估计这个任务需要多少时间 288 367
Development 开发 90 120
· Analysis 需求分析 (包括学习新技术) 10 20
· Design Spec 生成设计文档 5 5
· Design Review 设计复审 5 6
· Coding Standard 代码规范 3 2
· Design 具体设计 10 15
· Coding 具体编码 20 30
· Code Review 代码复审 10 30
· Test 测试(自我测试,修改代码,提交修改) 20 100
Reporting 报告 10 30
· 测试报告 5 2
· 计算工作量 5 2
· 并提出过程改进计划 5 5

               7.小结

                  本次作业看上去并不十分困难,在计划中也以为不会花费很多时间,但事实证明,看上去简单的东西并不意味实施起来容易。

                  拿到作业的最初就有了一个大概的思路,但是当我真正顺着这个思路往细节思考的时候,发现需要解决的问题还很多。在代码测试的阶段花费了很多时间,因为

                  出现了很多错误,有些是因为自己的失误,有些是因为编译器的问题,最后是百度加上同学的帮助才解决的大部分问题。

                  发现自己在代码编还差得很远,以后应多加强练习,加强编码速度,提高编码正确率。