• 第三次作业:个人项目-小学四则运算 “软件”之初版


    本次作业要求来自: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("请输入题目数量 :");
             scanf("%d",&n);
             for(i=0;i<n;i++)
             {
                       a=takeTest();
                       right=right+a;
             }
             printf("Powerful! ");
             printf("The number of right:%d ",right);
             percent=((double)right*100.00)/(double)n;
             printf("The percent of right:%0.2f %% ",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("运算符错误! ");
        }
        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("恭喜你答对了! ");
            a=1;
            }
        else
        {
            printf("不好意思,你做错了! ");
            printf("T正确答案是: %d ",getResult(num1,num2,signal));
            a=0;
        }
        return a;
    }

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

  • 相关阅读:
    2014-写给明年现在的自己
    DDD 领域驱动设计-Value Object(值对象)如何使用 EF 进行正确映射
    DDD 领域驱动设计-在动手之前,先把你的脑袋清理干净
    醍醐灌顶:领域驱动设计实现之路
    拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计
    设计窘境:来自 Repository 的一丝线索,Domain Model 再重新设计
    No zuo no die:DDD 应对具体业务场景,Domain Model 重新设计
    拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?
    【记录】GitHub/TortoiseGit 修改邮箱/提交者
    死去活来,而不变质:Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?
  • 原文地址:https://www.cnblogs.com/ChiuMingKit/p/9765603.html
Copyright © 2020-2023  润新知