zoukankan      html  css  js  c++  java
  • 第三次作业:个人项目-小学四则运算 “软件”之初版

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

    我的项目GitHub远程仓库地址:https://github.com/hycolins/work/tree/master/sizeyunsuan

    一、题目要求:

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

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

    扩展要求:

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

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

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

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

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

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

    PSP2.1 Personal Software Process Stages Time Senior Student Time
    Development 开发 40 50
    · Analysis 需求分析 (包括学习新技术) 10 15
    · Design Spec 生成设计文档 0 0
    · Design Review 设计复审 0 0
    · Coding Standard 代码规范 5 8
    · Design 具体设计 15 20
    · Coding 具体编码 30 45
    · Code Review 代码复审 3 5
    · Test 测试(自我测试,修改代码,提交修改) 10 8
    Reporting 报告 0 0

    三、代码实现

    提示用户输入想要运算的题目数量,当题目没输出完毕会一直输出。

        int i=0,n;
        printf("你想要输入的运算题目数为:");
        scanf("%d",&n);
        do{
            operation();
            i++;
        }while(i<n);

    随机生成一个种子,随机生成3个参加运算的数字和两个参与运算的运算符。

    然后把参与运算的整数强转成浮点数,再利用这两个数和运算符结合之后计算出来的结果,与第三个数以及第二个运算符进行计算

    srand((unsigned)time(NULL));
        do{
            a=rand()%100;
            b=rand()%100;
            c=rand()%100;
            //0,1为加减 2,3为乘除
            j=rand()%4;
            k=rand()%4;
            if(j>1){
                y=(float)a;
                z=(float)b;
                x=caculate(j,y,z);
                y=x;
                z=(float)c;
                x=caculate(k,y,z);
            }
            else
            {
                if(k<2)
                {
                    y=(float)a;
                    z=(float)b;
                    x=caculate(j,y,z);
                    y=x;
                    z=(float)c;
                    x=caculate(k,y,z);
                }

    当用户输入的答案和正确答案的差异在0.01以内的时候,屏幕显示“恭喜你,答对啦!”

    当用户回答的答案与正确答案差异大于0.01的时候,屏幕显示“很遗憾,你答错了!正确答案是 :”

    if((answer-x)<0.01)
            {
                printf("恭喜你,答对啦!
    ");
            }
            else
            {
                printf("很遗憾,你答错了!正确答案是:%.1f
    ",x);
            }
            }
        else
        {
            if((x-answer)<0.01)
            {
                printf("恭喜你,答对啦!
    ");
            }
            else
            {
                printf("很遗憾,你答错了!正确答案是:%.1f
    ",x);
            }
        }

    通过i的值来判断当前运算符属于switch的哪个情况,来得到相应的运算符,从而进行相应的计算。

    float caculate(int i,float a,float b)      //当它是哪种符号就进行哪个计算
    {
        float x;
        switch(i)
        {
        case 0:
            x=plus(a,b);
            break;
        case 1:
            x=minus(a,b);
            break;
        case 2:
            x=multiply(a,b);
            break;
        case 3:
            x=divide(a,b);
            break;
        default:
            break;
        }
        return x;
    }

    四、运行结果与总结

           

           

    设计思路:由系统随机产生三个随机符和两个运算符,然后通过计算得到他们的结果,再和用户输入的结果相比较之后判断对错。

    存在的缺点与不足:只设置了整数之间的符号运算,没能实现真分数之间的计算。

    自我总结:对编程很弱的我只能完成简单的功能,没有完全按照老师的要求来写,怎么说呢,编程实在不容易,要做一名优秀的程序员要学习的东西实在太多了。现在都大三了拿得出手的作品还没有,可能也觉得自己以后没有足够的能力从事这个行业吧,但还是会尽力完成老师布置的作业的,就算不懂不会也还是会努力加油的!

  • 相关阅读:
    JS client(X,Y)、screen(X,Y)、page(X,Y)的区别
    jS冒泡优化
    CSS盒子模型
    CSS段落对齐方式
    CSS引入方式
    CSS/让一个盒子消失的5中方法
    css垂直居中方法
    【数论】BSGS
    【线段树】树套树 树状数组套主席树
    【树】动态树 LCT
  • 原文地址:https://www.cnblogs.com/hycolins/p/9763892.html
Copyright © 2011-2022 走看看