第三次作业

要求0

作业地址:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266

要求1

git项目名称:f4

git地址形式【https://git.coding.net/Shenlixiang123/f4.git 

要求2

一、结对编程同学姓名:沈丽香

结对编程同学博客地址: https://www.cnblogs.com/shenlx123/

二、解题思路:

1)刚开始实现了两个随机整数和一个随机运算符的四则运算。然后尝试实现生成固定题目数的函数,

2)由于不能出现负数,在进行减法运算的时候,我用了2种不同的方法实现,一种是先随机生成减数,然后在0到减数之间随机生成被减数,这样可以控制被减数一定小于减数,第二种是随机生成两个数,然后比较大小,大的数作为减数,小的数作为被减数。

3)在进行除法运算时,因为被除数不能为零,所以在被除数的随机取值范围内不能包括0,在取随机分数的时候,分母不能为零,所以分母的随机取值范围也不包括0

4)自动随机生成加减乘除四则运算、控制生成题目的个数。

 

三、每个功能的重点/难点:

功能1重点:

1我认为功能一的重点是随机生成数字与随机生成运算符号

2实现表达式计算过程中有些困难,比如1/3 != 0.3333333333333333333333333,而是无限长,例如 2/3-1/3的正确结果是0.333,而并非是0.334(计算过程为2/3-1/3=0.667-0.333=0.334),小数数位如何保留实现起来有困难。

功能1难点:

1实现四个运算数和三个运算符号的混合运算,用到的循环语句花了很长时间。

2Rand函数的使用。

四、编程收获,展示重要代码片断,展示你感觉得意、突破、困难的地方。

1、编程收获:这个程序写出来对于我来说感觉有点难,还要继续努力。通过写这个程序,我学习到了语句:srand((unsigned)time());,这条语句可以把当前时间使随机数发生器随机化,四则运算题目,需要产生随机数以及随机运算符号,虽然还有些小瑕疵,但是对于我来说已经是一种进步了,继续加油吧!

2、重要代码

生成随机运算符

char getSignal1() {
    char signala[4]= {'+','-','*','/'};
    return signala[rand()%4];
}

char getSignal2() {
    char signalb[4]= {'+','-','*','/'};
    return signalb[rand()%4];
}

char getSignal3() {
    char signalc[4]= {'+','-','*','/'};
    return signalc[rand()%4];
}

获取随机数函数

int random(double start, double end) {
    return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}

结果计算函数,使用了大量的if else循环函数,部分代码如下:

 if(singal1=='+') {//第一个符号定为+
        if(singal2=='+') {
            if(singal3=='+') {
                res=num1+num2+num3+num4;
            } else if(singal3=='-') {
                res=num1+num2+num3-num4;
            } else if(singal3=='*') {
                res=num1+num2+num3*num4;
            } else if(singal3=='/') {
                res=num1+num2+num3*1.0/num4;
            }
        } else if(singal2=='-') {
            if(singal3=='+') {
                res=num1+num2-num3+num4;
            } else if(singal3=='-') {
                res=num1+num2-num3-num4;
            } else if(singal3=='*') {
                res=num1+num2-num3*num4;
            } else if(singal3=='/') {
                res=num1+num2-num3*1.0/num4;
            }
     ………………

题目生成函数

int takeTest() {
    int get;
    int num1,num2,num3,num4,a;
    char singal1,singal2,singal3;
    srand((unsigned)time(NULL));
    singal1=getSignal1();
    singal2=getSignal2();
    singal3=getSignal3();

    num1=random(0,100);
    num2=random(1,100);
    num3=random(1,100);
    num4=random(1,100);

3、感觉最得意、突破、困难的地方

1)学习到了随机生成函数的使用方式

2)控制题目生成的数量。

3)困难的地方就是功能二加括号以及优先级判断和功能三的实现。

五、给出结对编程的体会:

      在结对编程中,两个人项目磨合也相互帮助,且两个人对待同样的问题的看法是多角度的,和自己一个人编程不一样,结对编程需要考虑更多的事情,体会到了与人合作是更为重要的事情,且整个的编程的收获与自己一人进行编程的收获要大得多

优点:结对作业过程中,可以和队友商量,遇到不懂的问题可以互相启发并提出建议,尽管作业要求功能没有能够实现,但还是收获很多,从不同的方面,学习到了许多别的知识。对相互的水平、经验、思想都会有所影响和帮助。

缺点:对于有不同习惯的人来说,一起完成任务会产生麻烦,甚至矛盾,比如在编程语言和编程分格习惯上有差异;遇到问题,结对一方或许会对一个问题各执己见,反而产生一定的阻力;两个人在一起结对完成可能会出现注意力不能集中的情况,交谈一些与任务无关的信息,分散注意力,导致效率低下。

六、至少3项在编码、争论等活动中花费时间较长,给你较大收获的事件

1)因为两个人的习惯不同,在代码规范与对代码在何处加注释发证了争论

2)对于代码实现的过程中,在对于是选择switch case语句还是if else大循化也产生了争论

3)对于代码中变量和函数的命名规则也没有事先进行统一,在整个的过程中也发生了争论

4)在对于组队编码过程中对于两个人的时间拟合不是很到位,不能一整天的待在一起

5)在运用rand函数时,没有考虑到随机生成的三个运算符种子都的一样的情况,导致运行出错。

6)题目中仍然有许多小的细节都比较难实现,而且基础水平不好,最终也没能解决,比如功能二和三。

7)计算带括号的运算方法,包括通过设定符号优先级的使用等功能的未实现是因为自己编程水平不够,正在努力中。

七、给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。

 

原文地址:https://www.cnblogs.com/zhoull/p/9931987.html