Dt-ghost

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

b.功能设计
(1)基本功能
需求分析的基础需求的全部
(2)扩展功能
对于错误答案的四则算式,输出正确答案
(3)高级功能
从txt导入四则运算

c.设计实现
能够实现生成整数和分数的式子并实现计算;
能够控制生成式子的个数;
能够实现判断对错并计算正确率;

d.代码说明

1、化简分数,得出最简的答案

int k=0;
int gcd(int x, int y)
{
    int z;
    if ((z = x % y) != 0)
    {
        gcd(y, z);
    }
    else
        return y;
}

2、产生随机数

void fraction()
{
    int i,j,x,y,z,temp,a,b,c,z1,z2;
        srand(unsigned(time(NULL)));
        char r1[10], r2[10];
    memset(r1, 0, sizeof(r1));
    memset(r2, 0, sizeof(r2));
         i=rand()%10;//rand()返回一个随机数
         j=rand()%10;
        while(j==0||i>=j)
        {
            i=rand()%10;
            j=rand()%10;
        }
        x=rand()%10;
        y=rand()%10;
        while(y==0||x>=y)
        {
            x=rand()%10;
            y=rand()%10;
        }
         z=rand()%100/25;
        z1=0;z2=0;
        switch(z)

3、除法运算

case 3:
        cout<<"("<<x<<"/"<<y<<")"<<"/"<<"("<<i<<"/"<<j<<")"<<"=";
        a = x*j;
        b = y*i;
        c = gcd(a, b);
        a = a / c;
        b = b / c;
        if (b != 1) {
            sprintf(r1, "%d/%d", a, b);
            cin >> r2;
            if (strcmp(r1, r2) == 0)
        {
            cout << "    " << "True" << endl;
            k = k + 1;
        }
        else cout << "    " << "False" << "    "  <<"正确答案是:"<<r1<<endl;
        }
        else {
            cin >> z1;
            if (z1 == a)
            {
                cout << "    " << "True" << endl;
                k = k + 1;
            }
            else cout << "    " << "False" << "    "  << "正确答案是:"<<a<<endl;
        }
        break;
    default:
        cout << "wrong" << endl;
        break;
    }

4、主函数

 int main(int argc,char *argv[])
{   
    int n,i;
    float m;
    n=atoi(argv[2]);
    cout<<"生成运算题数目:"<<n<<endl;  
    for(i=0;i<n;i++)
    {
        int c=rand()%2;
        switch(c)
        {
        case 0: integer();break;
        case 1: fraction();break;

        }
    }
  m=(float)k/(float)n;
    cout<<"您答对的题数是:"<<k<<"    "<<"正确率是:" <<m<<endl; 
    return 0;
}

e.代码运行

PSP:

 

 

 

码市链接:https://coding.net/u/Dt-ghost/p/job1/git/tree/master/

总结:个人在编程方面能力很薄弱,遇到这样的题目只能用基础的方法解决。这次作业我上网查了很多资料之后才开始写的,写的过程还请教了同学才完成。以后要多练习才可以。

posted on 2017-03-07 19:18  Dt-ghost  阅读(177)  评论(1编辑  收藏  举报