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

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

    远程仓库地址:https://github.com/sheep5250/zy

    一、题目要求:

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


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

    23 - 3 * 4 = 11

    扩展要求:

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

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

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

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

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

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

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

    三、部分主要代码:

    float calculate(char z,float x,float y){
        float Rresult2=0.00;
        switch(z){
        case '+':
            Rresult2=(float)x+(float)y;break;
        case '-':
            Rresult2=(float)x-(float)y;break;
        case '*':
            Rresult2=(float)x*(float)y;break;
        case '/':
            Rresult2=(float)x/(float)y;break;
        }
        return Rresult2;
    }
    void title(int n){
      int num1,num2,num3,a,b;
      int i;
      char op1,op2,sign;
      float result,Rresult,Rresult1,h,h1;
      float z=0.0;
      int rnum=0;
      for(i=0;i<n;i++){
         srand(time(NULL));
          num1=rand()%20+1;
          num2=rand()%20+1;
          num3=rand()%20+1;
          a=rand()%4+1;
          b=rand()%4+1;
          switch(a){
            case 1:
              op1='+';
              break;
            case 2:
              op1='-';
              break;
            case 3:
              op1='*';
              break;
            case 4:
              op1='/';
              break;
          }
           switch(b){
            case 1:
              op2='+';
              break;
            case 2:
              op2='-';
              break;
            case 3:
              op2='*';
              break;
            case 4:
              op2='/';
              break;
          }
           if(a==1||a==2){
               if(b==1||b==2){
                Rresult1=calculate(op1,num1,num2);
                //printf("%f
    ",Rresult1);
                h1=(float)num3;
            //    printf("%f
    ",h1);
            //    printf("%f
    ",Rresult1);
                Rresult=calculate(op2,Rresult1,h1);
               }
               else
               {
                Rresult1=calculate(op2,num2,num3);
            //    printf("%f
    ",Rresult1);
                h1=(float)num1;
            //    printf("%.2f
    ",h1);
            //    printf("%f
    ",Rresult1);
                Rresult=calculate(op1,h1,Rresult1);
               }
           }
           else{
             Rresult1=calculate(op1,num1,num2);
        //     printf("%f
    ",Rresult1);
             h1=(float)num3;
            // printf("%.2f
    ",h1);
             //printf("%f
    ",Rresult1);
             Rresult=calculate(op2,Rresult1,h1);
           }
           if(Rresult<0){
             i--;
             continue;
           }
           else{
              printf("%d%c%d%c%d=",num1,op1,num2,op2,num3);
              //printf("%.2f",Rresult);
              scanf("%f",&result);
              if((int)(100*Rresult+0.5)/100==(int)(100*result+0.5)/100){
                printf("回答正确
    ");
                rnum++;
              }
              else{
                printf("回答错误,正确答案是:%.2f
    ",((100*Rresult+0.5)/100));          
              }
              //return Rresult;
           }
      }
      //printf("%d",rnum);
       
      z=(float)rnum/(float)n*100;
      printf("本次答题数目为%d,准确率为%.2f%!
    ",n,z);
    }
    void main(){
        int n;
        printf("请输入题目数量:");
        scanf("%d",&n);
        while(n<1||n>20){
            printf("你的输入有误,请重新输入:");
            scanf("%d",&n);
        }
            title(n);
    }

    四、运行结果

    五、设计过程分析

    答:由于该实验只为初级版,所以我没有用数据结构的栈来判断运算符的优先级,只用简单的判断语句就可得出。

  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/zy5250/p/9790538.html
Copyright © 2011-2022 走看看