本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166

我的github远程仓库的地址:https://github.com/pakhochiu/gitskill.git

一、题目要求:

像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。


具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:

23 - 3 * 4 = 11

扩展要求:

1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。

2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。

初步拟定要实现的功能后,估计一下自己需要花多长时间。编程过程中记录自己实际用了多长时间。

然后和同学们比较一下各自程序的功能、实现方法的异同等等。

写博客纪录自己实现的过程和思路。

二、个人软件过程耗时估计与统计表

  1. PSP模版表格如下,第3列和第4列分别对应第2列条目的估计时间和真实时间,模版表格里的时间只是示意。

 

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

0

 

三、代码提交

void main()
{
         int n,a,right,i=0;
         double percent;
         printf("请输入题目数量\n:");
         scanf("%d",&n);
         for(i=0;i<n;i++)
         {
                   a=takeTest();
                   right=right+a;
         }
         printf("Powerful!\n");
         printf("The number of right:%d\n",right);
         percent=((double)right*100.00)/(double)n;
         printf("The percent of right:%0.2f %%\n",percent);
}

char getSignal()//随机返回一个运算符
{
    char signal[4]={'+','-','*','/'};
    srand((unsigned)time(NULL));
    return signal[rand()%4];
}



int random(double start, double end)
{
    return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}


int getResult(int num1,int num2,char signal)
{
    int res;
    switch(signal)
    {
    case '+':
        res=num1+num2;break;
    case '-':
        res=num1-num2;break;
    case '*':
        res=num1*num2;break;
    case '/':
        res=num1/num2;break;
    default:
        printf("运算符错误!\n");
    }
    return res;
}


int takeTest()
{
    int get;
    int num1,num2,a;
    char signal;

    srand((unsigned)time(NULL));
    signal=getSignal();

    num1=random(0,1000);
    num2=random(1,1000);

if(signal=='-')
    {
        if(num1<num2)
        {
            int temp;
            temp=num1;
            num1=num2;
            num2=temp;
        }
    }
    if(signal=='/')
    {
        if(num2==0)
        {
            int temp;
            temp=num1;
            num1=num2;
            num2=temp;
        }
    }
    printf("%d%c%d=",num1,signal,num2);
    scanf("%d",&get);
    fflush(stdin);   //清空输入缓冲区
    if(getResult(num1,num2,signal)==get)
        {
        printf("恭喜你答对了!\n");
        a=1;
        }
    else
    {
        printf("不好意思,你做错了!\n");
        printf("T正确答案是: %d\n",getResult(num1,num2,signal));
        a=0;
    }
    return a;
}

 

提交你的源代码和可执行程序至你的github上