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


    作业要求来自: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);
    }

    四、运行结果

    五、设计过程分析

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

  • 相关阅读:
    django如何给上传的图片重命名(给上传文件重命名)
    Nginx 常见问题解决
    nginx 出现413 Request Entity Too Large问题的解决方法
    python判断一个对象是否可迭代
    InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClas...
    Android Studio中新建和引用assets文件
    android 登录效果
    Android (争取做到)最全的底部导航栏实现方法
    抽屉效果的导航菜单
    Android开发之自定义局部导航菜单
  • 原文地址:https://www.cnblogs.com/zy5250/p/9790538.html
Copyright © 2020-2023  润新知