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

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

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

需求分析:
1.能随机生成整数和真分数四则运算。
2.要能判断用户答案的对错,对做错了的题目给出正确答案,并统计算出正确率。
3.能用参数控制生成题目个数。

设计实现:
1.通过两个函数分别实现整数和真分数运算。
2.采用随机生成12来选择调用哪个函数。
3.通过累加的方法计算正确体术,进而算出正确率。

部分代码

随机选取运算符

  

for(int m=0;m<n;m++){

        int x=(int)rand()%2+1;

        if(x==1){

            ZSYS();

        }

        else if(x==2){

            FSYS();

        }

 

辗转相除法求最大公约数函数

int maxGYS(int a,int b){

    return a%b==0?b:maxGYS(b,a%b);

}

int minGBS(int a,int b)

{

    int min, max;

    int r;

    max=a>b?a:b;

    min=a<b?a:b;

    if(max%min==0)

        return max;

    while(max%min!=0)

    {

        r=max%min;

        max=min;

        min=r;

    }

    return a*b/min;

}

 

整数运算

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

        if(op=='-')            //整数“-”运算

    {        

        cin>>g;

        if(g==x-y)

        {

            cout<<"恭喜你答对了!"<<endl<<endl;

            correct++;

        }

        else

        {

            cout<<"很遗憾你答错了,正确答案是:"<<x-y<<endl<<endl;

            mistake++;

        }

    }

        else

            if(op=='*')            //整数“*”运算

    {        

        cin>>g;

        if(g==x*y)

        {

            cout<<"恭喜你答对了!"<<endl<<endl;

            correct++;

        }

        else

        {

            cout<<"很遗憾你答错了,正确答案是:"<<x*y<<endl<<endl;

            mistake++;

        }

    }

        else

            if(op=='/')            //整数“/”运算

    {        

        cin>>result;

        element=x;

        denominator=y;

        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++;

            }

        }

    }

}

 

测试运行:

 

 

 

 

PSP2.1

Personal Software Process Stages

Time (%) Senior Student(/hour)

Time (%)(/hour)

· Planning

计划

3

4

· Estimate

估计这个任务需要多少时间

45

60

· Analysis

需求分析 (包括学习新技术)

6

6

· Coding Standard

代码规范

0.5

0.5

· Design

具体设计

1.5

3

· Coding

具体编码

30

35

· Test

测试(自我测试,修改代码,提交修改)

2

2.5

Reporting

报告

1

1

总结:
1.通过测试基本能实现题目的需求,但仍有一些问题没有注意到,界面也很一般,仅能实现自动生成两个数字间的四则运算。

2.在进行代码调试时,总是犯了些小错误,浪费了很多时间。

3.用户需求分析还不到位

 

posted on 2017-03-07 15:32  从小就很酷  阅读(197)  评论(1编辑  收藏  举报

导航