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

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

四、运行结果

五、设计过程分析

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

原文地址:https://www.cnblogs.com/zy5250/p/9790538.html