2017年秋季学期软件工程第二次作业(陆祈祯)

Posted lqznb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017年秋季学期软件工程第二次作业(陆祈祯)相关的知识,希望对你有一定的参考价值。

一、源代码地址:https://github.com/lqzlqzlqz/-2

二、 PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

   

· Estimate

· 估计这个任务需要多少时间

 12x60  18x60

Development

开发

   

· Analysis

· 需求分析 (包括学习新技术)

 6x60

 6x60

· Design Spec

· 生成设计文档

 60  60

· Design Review

· 设计复审 (和同事审核设计文档)

 30  无

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 30  30

· Design

· 具体设计

 4x60  8x60

· Coding

· 具体编码

 6x60 12x60

· Code Review

· 代码复审

 30  30

· Test

· 测试(自我测试,修改代码,提交修改)

 30  30

Reporting

报告

 30  30

· Test Report

· 测试报告

 60  60

· Size Measurement

· 计算工作量

 10  10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 60  60

合计

   12x60 

 

三、解题思路

    看到这个题目我内心是崩溃的,因为之前关于c++的知识全部都忘记了,需要花一定时间去复习。在进行简单的复习后,根据老师的要求,形成了以下解题思路。

    需要随机生成的运算符和运算数通过随机函数生成;通过构造分数结构体来生成包含分数的计算式;核对结果,先计算乘除后加减的方法较为合适;通过时间函数,计算答题时间来调整最后分数;题目的难度则根据运算符个数来判断,超过5个即为难,得附加分;在每次循环前通过srand((unsigned)time(NULL)),避免题目重复;题目所给的要求基本都能达到。

    在具体实施前,将循环语句,if语句等可能会用到的语句复习一遍;再利用几个简单的c++小程序找回编程的感觉看到一大堆代码不会很烦;这中间比较难得应该是核对答案,要用计算机能看懂的方法来进行四则运算;最后将一些细节处理,比如具体加减分的规则。

    



三. 设计实现过程

    1.在主函数前先定义函数方便计算:四则运算函数,求最大公约数函数,构造fengshu结构体。进入主函数,根据用户输入的题目数来产生相应的算式;接着进入一个主循环,先随机生成算式,再利用四则运算计算结果,最后核对结果,输出相应提示;主循环结束后输出本次测试的情况,再根据用户输入,判断是否结束测试。

    2.结果核对。得到一个随机算式后,先计算乘除,将结果赋予算式右边的数,运算符变加法,最后进行加减法。

   

四、代码说明

    1.构造fengshu结构体

        fengshu jisuan(fengshu n1,fengshu n2 ,char op )

    2.求最大公约数函数

      int gys(int x, int y) 
      {
      return y ? gys(y, x%y) : x; 
      }

    3.四则运算函数

      fengshu jisuan(fengshu n1,fengshu n2 ,char op )
      {
      fengshu jieguo;
      switch (op) {
      case ‘+‘: {
      jieguo.a = n1.a*n2.b + n2.a*n1.b;
      jieguo.b = n1.b*n2.b;
      break;
      }
      case ‘-‘: {
      jieguo.a = n1.a*n2.b - n2.a*n1.b;
      jieguo.b = n1.b*n2.b;
      break;
      }
      case ‘*‘: {
      jieguo.a = n1.a*n2.a;
      jieguo.b = n1.b*n2.b;
      break;
      }
      case ‘/‘: {
      jieguo.a = n1.a*n2.b;
      jieguo.b = n1.b*n2.a;
       break;
      }
     default: {
     jieguo.a = 0;
     jieguo.b = 1;
       }
     }
     int t;

      t = gys(jieguo.a, jieguo.b);
    jieguo.a = jieguo.a / t;
    jieguo.b = jieguo.b / t;//约分

    return jieguo;
     }

    4.计算结果

      技术分享图片

 

五、测试运行

    技术分享图片

      技术分享图片

六、项目小结

      这次作业的完成可以说是非常艰难的,因为之前学的也没有用心,基础不够扎实,虽然专门抽时间去学习和复习,但是一到编程序就会有各种小问题,导致整个程序运行不下去,这次的收获和总结如下:

      1.看程序不慌了。一大堆代码出现在面前就心乱如麻,不知从何下手,但是结果这几天的苦练,看了不少代码,能够耐心地读下去,对以前的知识也忽想起一部分,看到代码没有之前那么没有头绪了。

      2.学习东西以解决问题为导向。在做这个作业的时候,由于基本功不扎实,拿着以前的教材看了很久,这样效率不高,看完之后面对一堆代码也是心里没底,还不如直接分析这份作业的问题,去网上查找相关资料,看不懂的地方再返回来看书本,这样能节省很多时间。

      3.在接下来的学习中还要加强c++基本知识的学习。在解决如何计算结果的时候,找到一个后缀计算法,思路能理解,但是具体的代码实现没有搞明白,照葫芦画瓢搬到自己程序上来,结果运行不了,花了很多时间也没有找到解决方法,在计算过程中进行了测试,输出结果不对,不知道是自己计算代码出问题?还是其他的参数或者函数定义有问题?后来换了一种简单的计算方法,还是不行,在确认自己计算的程序没问题后,返回去再看其他代码是不是写错了,最后发现是在定义四则运算函数时出了问题,之前是用了3个else if来进行不同情况的计算,换成switch语句后,输出结果就对了,虽然问题解决了,但是错在哪还是没搞明白。两种编法我都传到源代码地址了。

      4.简单的问题也是一种锻炼。现在完成这次作业后,回头看,这个问题也不难嘛。解题思路没有出问题,在具体编写代码的过程中各种小问题不断,而且往往这种小疏漏也很难发现,翻来覆去地被这些小问题困扰,心情也变得很差,有的时候很难进展下去。经过折磨的几天,终于把作业交了,中间浪费的时间实在可惜,循环语句中控制循环的参数记错,给参数赋值的位置不对等等小问题,这也是基本功不扎实的表现,希望接下来继续学习,把为都解决了。












































以上是关于2017年秋季学期软件工程第二次作业(陆祈祯)的主要内容,如果未能解决你的问题,请参考以下文章

2017年秋季学期软件工程第二次作业

2017年秋季学期软件工程第一次作业(曹洪茹)

2022年秋季学期人工神经网络第二次作业

大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业

2017年秋季学期获“领跑衫”感言

闽江学院2015-2016学年下学期《软件测试》课程-第二次作业(个人作业)