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

四则运算题目生成程序(基于控制台)

代码链接:https://git.coding.net/hjkl/98.git

题目要求:

从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:

除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
运算符为 +, −, ×, ÷
并且要求能处理用户的输入,并判断对错,打分统计正确率。
要求能处理用户输入的真分数, 如 1/2, 5/12 等
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10

需求分析:

1、能分别支持整数、真分数的四则运算;
2、判断用户的回答是否正确,并显示正确率;
3、能够使用参数控制生成题目的个数;
4、能够把分数运算结果转化为最简结果。

功能设计:

基本功能:整数、真分数的四则运算,显示正确率
扩展功能:能控制生成题目的数量,对结果进行约分
高级功能:能分数和整数混合运算,多运算符运算(暂未实现)

设计实现:

1.用c++面向过程方法编写
2.编写了三个函数:
g():求最大公约数,为结果做约分提供方便;
integer():整数四则运算
fraction():分数四则运算

代码说明:

   void  fraction(){
    int a,b,c,d,up,down,temp;//a,b表示一个数,c,d表示一个数,up表示结果分子,down表示结果的分母
    char strres[10],strans[10],dow[10];//strres表示最后结果转化的字符,strans表示输入的答案
    srand(unsigned(time(NULL)));
    a=rand()%100+1;
    b=rand()%100+1;
    temp=g(a,b);
    a=a/temp;
    b=b/temp;
    c=rand()%100+1;
    d=rand()%100+1;
    temp=g(c,d);
    c=c/temp;
    d=d/temp;
    char sign,s[4]={'+','-','*','/'};
    sign=s[rand()%4];
    switch(sign){
        case '+':cout<<a<<"/"<<b<<" +"<<c<<"/"<<d<<"="<<endl;
                up=(a*d)+(b*c);
                down=b*d;
                break;
        case '-':cout<<a<<"/"<<b<<" -"<<c<<"/"<<d<<"="<<endl;
                up=(a*d)-(b*c);
                down=b*d;
                break;
        case '*':cout<<a<<"/"<<b<<" × "<<c<<"/"<<d<<"="<<endl;
                up=a*c;
                down=b*d;
                break;
        case '/':cout<<a<<"/"<<b<<" ÷"<<c<<"/"<<d<<"="<<endl;
                up=a*d;
                down=b*c;
                break;
                }
    temp=g(up,down);
    up=up/temp;
    down=down/temp;
    itoa(up,strres,10);
    itoa(down,dow,10);
    strcat(strres,"/");
    strcat(strres,dow);
                
    cin>>strans;
    if(strcmp(strans,strres)==0){
      cout<<"true"<<endl;
      right1++;
    }
    else cout<<"false"<<endl;
    
   }

这段代码是用于分数的四则运算,难点在于化简,化简采用分子,分母同除以最大公约数。

测试运行:

展示PSP:

PSP2.1 Personal Software Process Stages Time (%) Senior Student(/hour) Time (%)(/hour)
· Planning 计划 2 2.5
· Estimate 估计这个任务需要多少时间 37 43
· Analysis 需求分析 (包括学习新技术) 1 1
· Coding Standard 代码规范 0.5 0.5
· Design 具体设计 1.5 2
· Coding 具体编码 30 37
· Test 测试(自我测试,修改代码,提交修改) 1 1
Reporting 报告 1 1

小结:

编写程序的过程中,遇到的第一个问题,就是分数怎么化简,当时有去参考网上的代码,发现把别人的代码拿来用也不是件简单的事,最终还是看懂代码,然后自己去写的;用当统计正确率时我设置了right全局变量,但是编译一直出错,后来把right改为right1,便就可以通过了,我想这应该是right与c++库函数重名的原因吧。在编码时遇到各种各样的小问题,很耗时间,这就很考验耐心了,也说明以前敲代码的时间太少了,导致很多细节问题都不熟练。整体而言,程序能满足题目的大部分要求,但在仍不具备处理类似分数整数混合运算、多运算符等问题。在接下去的日子,会不断地改进和完善。

posted @ 2017-03-06 21:13  丹hjk  阅读(250)  评论(1编辑  收藏  举报