zoukankan      html  css  js  c++  java
  • 软件工程作业 第二次

    关键字:结对编程

    作业要求:

    小学老师要每周给同学出300道四则运算练习题。
    这个程序有很多种实现方式。
    C/C++
    C#/VB.net/java
    Excel
    Unix Shell
    Emacs/Powershell/Vbscnpt
    Python
    两个运算符100以内的数字,不需要写答案。【估计时同t】
    现在估计写这个程序需要的时间
    马上把代码写出来
    需要写答案,并且保证答案在0 -100之间【估计时间t】

    1.合作伙伴
      1731227 周潇杰 (一位颜值与智商兼具的男子)
     
    2.合作过程
      (1)面基
      一开始选择程序的实现方式的时候,看到我们会的有C/C++/VB.net/Java/Excel/Python,Python我不会,小伙伴会,所以不打算用Python;看到Excel,犹豫了一下,(原来Excel也可以写代码的吗???孤陋寡闻了。)像我们这么优秀的人,怎么可能不用高级语言写代码呢!所以我们一起毅然决然的选择了彼此都比较熟悉的C语言!早上9点左右开始面基,假如说只要求两个运算符100以内的数字而不考虑答案的话,我们预计完成的时间T=2h
      (2)波折
      由于我的小伙伴码字速度与编程能力略高于我,所以他荣获我们两人小组的码字者,而同样集美貌与智慧的我成为了观察者!我两的编程风格各具特色,为了统一这个合作小程序的代码规范,我们设定:注释使用 //  ;变量命名使用对应英文缩写;缩进使用一个tab,以便排版清晰。对于程序,我们彼此交流了自己整体的思路,他先列出所需的基本变量,题目增加变量t,三个随机数分别用三个变量存储,两个运算符用两个变量存储,外层想用一个do-while循环控制题目数在300,内层通过两个for循环一个控制3个随机数的产生,另一个控制随机运算符;怎么才能让运算符随机产生,上网借鉴了一下网友的思路,利用随机产生1-4之间的随机数控制 + - * /。我的思路是三个随机数和两个随机变量可以通过两个数组来进行分配,这样子就免了多个变量混乱的情况。其实他在分享自己想法的时候,好的点已经慢慢进入我的脑海了。我们两个人想法综合在一起,然后就开始码字了。整体框架差不多了,可真正写起来却没有想象中那么顺利,不少细节性的问题逐渐暴露出来。随机数使用方式、变量名对应的英文单词怎么写、如何将控制两个随机运算符输出...代码写写停停,被这些小细节卡住,不得不停下来一个一个解决。
     (3)灵感出现
      倘若还要考虑答案控制在0-100,两个小时真的完成不了,况且两个小时还没能解决“两个运算符100以内数字而不考虑答案”的问题,所以,如果考虑答案的话预计完成时间T=4h。11点左右,两个小时过去了,午饭时间也差不多了,我们一致决定不闷在图书馆,出去吃个饭,走一走说不定解决问题的思路就有了。边走边想边继续讨论出现的问题,果真,我们出来走一走是对的。突然灵光一闪,灵感就来了。最大的问题——控制结果在一百以内并输出题目,我们打算用两个result来解决。首先,题目如果有乘除运算,必定先进行乘除运算,我们可以先对两个随机数进行乘除运算得到result1,同时,还要控制三个随机数中有一个不为0,这个不为0的随机数做除法运算的分母;然后,在用result1与剩下的一个随机数做加减运算得到最终result2,即为最终的结果result!接着,只要判断result是不是在0-100之间就可以输出两个运算符和三个随机数了。
     (4)结束
      好了,再一次整理了全部的思路,脑海中已经有整体的代码框架了,接下来就是等待码出来了。所以,最后面谁码代码都一样,我就来码啦,顺便提高一下自己的码字速度。当然,过程中还有一些小bug,特别小,一眼就能看出那种,那就不说了。整个过程还好吧,期间也没有出现“童话”里那种合作不下去然后打一架的场面,尽管大家都有一点个人主义,但是我们关系比较好,一些基本的人情世故还是懂的。最终由我整理出这篇博客。
     
    2.源代码和实验结果
      末尾附上代码。以下是实验结果截图:
      
    3.总结
      结对编程对于我们来说是一次巨大的挑战,从一开始接触编程,我们就以为以后就是孤军奋战了;然而,结对编程革新了我们对编程的想法。在合适的情况下,结对编程不仅能够提高编程的效率,加快项目的开发进度,还能优化一个程序员的编程风格、提高编程水平。在思想的传递中迸发不一样的火花,给人灵感与活力。第一次体验结对编程,受益匪浅,特别是思想上。结对编程可以学到很多东西,可以互相学习编程技巧。在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。互相监督,不容易偷懒;两个人一起工作需要互相配合,如果想偷懒去干别的,就会拖延工作进度。多双眼睛,少点 bug,两人互相监督工作,可以增强代码和产品质量,并有效的减少 BUG。尽管结对编程也有不好的地方,但是,“因地适宜”!
    #include <stdio.h>
    #include"stdafx.h"
    #include <stdlib.h>
    #include <time.h>
    void exercises(){
    
        int t=0;    //题目数目变量
        char op1,op2,b[4]={'+','-','*','/'};  //op1是等式的第一个运算符,op2是等式的第二个运算符
        float result,result1,result2;  //题目结果
        int num[3]; //随机数运算数
        srand(time(0));    
    
        do{
    
            for(int i=0;i<3;i++){          //3个随机数生成
                num[i]=rand()%100;
                    
            }
            num[1]=rand()%100+1;  //保证其中一个随机数不为零(做除法运算时的分母)
             
            switch(rand()%4+1){   //先让两个随机数进行乘除或者加减运算
                case 1:result1=(float)num[0]*num[1],op1='*';break;
                case 2:result1=(float)num[0]/num[1],op1='/';break;
                case 3:result1=(float)num[0]+num[1],op1='+';break;
                case 4:result1=(float)num[0]-num[1],op1='-';break;
            }
            switch(rand()%4+1){       //将乘除运算的结果与第三个随机数进行加减运算        
                case 1:result2=(float)result1+num[2],op2='+';break;
                case 2:result2=(float)result1-num[2],op2='-';break;
                case 3:result2=(float)result1*num[2],op2='*';break;
                case 4:result2=(float)result1/num[2],op2='/';break;
                }
            if(op1=='+' && op2=='*'){
                result1=(float)num[1]*num[2];
                result2=num[0]+result1;
            
            }
            else if(op1=='+' && op2=='/'){
                result1=(float)num[1]/num[2];
                result2=num[0]+result1;
            }
            else if(op1=='-' && op2=='*'){
                result1=(float)num[1]*num[2];
                result2=num[0]-result1;
            }
            else if(op1=='-' && op2=='/'){
                result1=(float)num[1]/num[2];
                result2=num[0]-result1;
            }
            else
                result=result2;        
    
            result=result2;
            if(result>=0 && result<=100){         //保证结果在0-100之间,输出等式            
                    printf("第%d个题目:%2d %c %2d %c %2d = %-.2f
    ",t+1,num[0],op1,num[1],op2,num[2],result);
                    t=t+1;        
            }        
        }while(t<300);
    }
    
    void main(){
        exercises();
        system("pause");
    }
    View Code

    转载注明出处!

  • 相关阅读:
    html中的块级元素、行内元素
    ptyhon_opencv 图像的基本操作
    正则表达式总结 2017.1.6
    HashMap 中的 entrySet()使用方法 2016.12.28
    (转)Redis持久化的几种方式
    负数与二进制换转方法
    (转)2019JAVA面试题附答案(长期更新)
    Java后端技术面试汇总(第一套)
    (转)Dubbo服务暴露过程源码分析
    Dubbo消费方服务调用过程源码分析
  • 原文地址:https://www.cnblogs.com/jiangfenli/p/10549189.html
Copyright © 2011-2022 走看看