软件工程综合实践的第二次实验报告

队伍:阙定1757127,李铮达1759118

这次是软件工程综合实践的第二次实验,本次任务是结对编程,就是找一个小伙伴一起写代码,一人写代码一人复审代码,这样可以更快的找出代码的错误,然后立即更改,提高开发效率。

下面是老师发布的任务截图

讨论分析

拿到任务后,我们先考虑用哪种编程语言来写,直接用较为基础的C或C++编写即可,因为逻辑较为简单,且不需要涉及面向对象的问题。然后开始分析用什么方法来实现,以及如何实现。讨论持续了一整天,因为白天有课,所以我们都是用零星的时间来讨论的。

下面是周二中午我们两人在网上讨论的部分截图

大体思路确定了之后,我们俩抽了个空余的时间,然后开始我们的结对编程。开始时是我做敲代码的“驾驶员”,李铮达他做复审代码的“导航员”。然后我们俩再进行角色互换。

结对编程

我刚开始最基础的想法是设计四个函数,分别对应为加减乘除,然后根据用户的选择,调用各个函数,输出不同的算式。我采用了以时间作为随机种子来产生随机数的方法,用for循环来输出整个算式。

下图是我的第一次试验,先弄好一个运算符,随后再增加一个运算符即可

加减乘的算式已经打印出来了,然后我们开始遇到第一个难题,就是除法要考虑除零除余问题。

由于除法的特殊性,一个重要条件就是要做到除数不为0,我们俩商讨出两种解决方法:1、设置随机数的范围为1-99,直接不包括0即可;2、在除法函数中增加一个判断,如果除数为0,则重新取一个随机数。李铮达认为0包含在算式中会降低难度,而且代码编写也会复杂,所以更赞成第一点,但阙定认为小学数学会有关于0的算数问题,综合考虑还是选择了第二点的解决方法。至于是否能整除的问题也很容易解决,添加一个求余是否为0的条件判断即可,是0,则可以整除,不是0则重新取数。

阙定想出解决无法整除的方法有些不同,就是无限递归。由于除法操作用函数来实现的,所以可以加一个if条件判断语句,如果不能整除则调用自己,再次运算,直到算式能整除即可结束,这样的话得到的算式就是能整除的了。这样写代码比较简洁。所以采用了这种。

至此,我们已基本完成老师中的任务要求了,随机数,两个运算符,组合成一个随机算式。

添加一个运算符的方法也比较简单,加减乘除,就是4x4的思路,共有16种组合,这16种组合也是由随机数随机出的,这种想法有些笨拙,但是目前我们没有想出更好的方法

实现代码

#include <iostream>

#include <ctime>

using namespace std;

void f(int a,int b)

{

cout << rand() % (b-a+1)+a << " + " << rand() % (b-a+1)+a ;//a到b

}

void g(int a, int b)

{

//  cout << rand() % 51 << " - " << rand() % 31 ;//0-30

cout << rand() % (b-a+1)+a << " - " << rand() % (b-a+1)+a ;//a到b

}

void h(int a, int b)

{

//  cout << rand() % 11 << " * " << rand() % 11 ;//0-10

cout << rand() % (b-a+1)+a << " * " << rand() % (b-a+1)+a ;//a到b

}

void y(int a, int b)

{//只除一次

int p,q;

p = rand() % (b-a + 1) + a;// a到b

if(a==0)q = rand() % b  + 1;// 1到b

else q = rand() % (b-a + 1) + a;// a到b

if(p%q == 0) cout <<p<< " / " << q ;

else y(a,b);//只有整除才能输出,否则无限递归

}

void yy(int p, int q)

{//连除两次

int a, b, c;

//  a = rand() % 101;//0-100

a = rand() % (q-p + 1) + p;// p到q

//  b = rand() % 39 + 2;//2-40

if (p == 0)b = rand() % (q-1) + 2;// 2到q

else b = rand() % (q-p + 1) + p;// p到q

//  c = rand() % 20 + 1;//1-20

if (p == 0)c = rand() % q + 1;// 1到q

else c = rand() % (q-p + 1) + p;// p到q

if (a%b == 0 && (a/b)%c == 0) cout << a << " / " << b << " / " << c;

else yy(p,q);//只有整除才能输出,否则无限递归

}

int main()

{

int i,a,b,n,ss;

srand(unsigned(time(NULL)));//随机时间种子

cout << "请输入随机整数范围(0 <= a < b): ";

cin >> a;    cin >> b;

cout << "请选择随机题目类型:"<<endl;

cout << "1、a + b + c\t2、a + b - c\t3、a + b * c\t4、a + b / c"<<endl;

cout << "5、a - b + c\t6、a - b - c\t7、a - b * c\t8、a - b / c"<<endl;

cout << "9、a * b + c\t10、a * b - c\t11、a * b * c\t12、a * b / c"<<endl;

cout << "13、a / b + c\t14、a / b - c\t15、a / b * c\t16、a / b / c"<<endl;

cout <<"                         0、全部随机";

loop:

cout <<endl<< "请选择序号:";

while (!(cin >> ss)) {

cin.clear(); cin.sync(); cout << "不是数字!" << endl; cin.ignore(1024, ‘\n‘);cout << "请选择序号:";}

if (ss<0||ss>16){cout <<"不存在此序号。";goto loop;}

cout <<endl<< "请输入生成数量:";

while (!(cin >> n)) {

cin.clear(); cin.sync(); cout << "不是数字!" << endl; cin.ignore(1024, ‘\n‘); cout << "请再次输入:";

}

cout << endl;

switch (ss)

{

case 1:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " + "; f(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ +

if (i % 4 == 0)cout << endl;}break;

case 2:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " + "; g(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ -

if (i % 4 == 0)cout << endl;}break;

case 3:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " + "; h(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ *

if (i % 4 == 0)cout << endl;}break;

case 4:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " + "; y(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ /

if (i % 4 == 0)cout << endl;}break;

case 5:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " - "; f(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- +

if (i % 4 == 0)cout << endl;}break;

case 6:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " - "; g(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- -

if (i % 4 == 0)cout << endl;}break;

case 7:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " - "; h(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- *

if (i % 4 == 0)cout << endl;}break;

case 8:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " - "; y(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- /

if (i % 4 == 0)cout << endl;}break;

case 9:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " * "; f(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* +

if (i % 4 == 0)cout << endl;}break;

case 10:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " * "; g(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* -

if (i % 4 == 0)cout << endl;}break;

case 11:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " * "; h(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* *

if (i % 4 == 0)cout << endl;}break;

case 12:for (i = 1; i <= n; i++) {

cout << rand() % (b - a + 1) + a << " * "; y(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* /

if (i % 4 == 0)cout << endl;}break;

case 13:for (i = 1; i <= n; i++) {

y(a, b); cout << " + " << rand() % (b - a + 1) + a; cout << " = " << ‘\t‘ << ‘\t‘;// / +

if (i % 4 == 0)cout << endl;}break;

case 14:for (i = 1; i <= n; i++) {

y(a, b); cout << " - " << rand() % (b - a + 1) + a; cout << " = " << ‘\t‘ << ‘\t‘;// / -

if (i % 4 == 0)cout << endl;}break;

case 15:for (i = 1; i <= n; i++) {

y(a, b); cout << " * " << rand() % (b - a + 1) + a; cout << " = " << ‘\t‘ << ‘\t‘;// / *

if (i % 4 == 0)cout << endl;}break;

case 16:for (i = 1; i <= n; i++) {

yy(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ +

if (i % 4 == 0)cout << endl;}break;

case 0:

for (i = 0; i <n/16 +1; i++) {

cout << rand() % (b-a + 1) + a << " + "; f(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//+ +

cout << rand() % (b-a + 1) + a << " + "; g(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//+ -

cout << rand() % (b-a + 1) + a << " + "; h(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//+ *

cout << rand() % (b-a + 1) + a << " + "; y(a, b);cout << " = " << endl;           //+ /

cout << rand() % (b-a + 1) + a << " - "; f(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//- +

cout << rand() % (b-a + 1) + a << " - "; g(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//- -

cout << rand() % (b-a + 1) + a << " - "; h(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//- *

cout << rand() % (b-a + 1) + a << " - "; y(a, b);cout << " = " << endl;          //- /

cout << rand() % (b-a + 1) + a << " * "; f(a, b);cout << " = " << ‘\t‘ << ‘\t‘;// * +

cout << rand() % (b-a + 1) + a << " * "; g(a, b);cout << " = " << ‘\t‘ << ‘\t‘;// * -

cout << rand() % (b-a + 1) + a << " * "; h(a, b);cout << " = " << ‘\t‘ << ‘\t‘;// * *

cout << rand() % (b-a + 1) + a << " * "; y(a, b);cout << " = " << endl;           // * /

y(a, b); cout << " + " << rand() % (b-a + 1) + a;cout << " = " << ‘\t‘ << ‘\t‘;// / +

y(a, b); cout << " - " << rand() % (b-a + 1) + a;cout << " = " << ‘\t‘ << ‘\t‘;// / -

y(a, b); cout << " * " << rand() % (b-a + 1) + a;cout << " = " << ‘\t‘ << ‘\t‘;// / *

yy(a,b);cout << " = " << endl;           // / /

}break;

}

return 0;

}

 

扩展功能

考虑到小学老师可能会重复训练以及选择训练,我给它加上了一些功能选择。

可以输入随机数生成的范围,如图,生成的随机数在2~99之间

可以选择算式的类型,共有16种情况可以选择,以及一个全部随机运算符的选择

可以输入生成题目的数量

全部随机的截图

不足之处(Bug)

在输入时若是错误的输入可能会导致程序崩溃或者进入死循环

改进方法:加上一个if条件判断,若不为数字则循环重新输入,若输入正确则跳出循环

心得体会

体验了一次结对编程,感觉效果挺不错的,尤其是自己敲代码时有人在旁边提醒,省去了我自己去检查出错的地方,提高了我的效率。但毕竟是第一次合作,我们俩也不是完全磨合的很好,有时会因为一些小bug而产生一些不同的意见,解决方案也是各有千秋。最后我们通过不断融合改进,解决了大部分的bug,程序已经可以完美的运行了。

结对编程确实比个人编程效率高了不少,它能有效的提高编代码的准确率,同时也可以轮流转换角色,避免产生个人单调的敲代码的烦躁感。我们也觉得各自都有了一些小小的收获,通过对比不同的方法,分析出利弊,想法相互交流,可以达到1+1>2的效果,体验到团队合作的高效,在这个较为基础的项目中,就有这么多思想的汇聚,等将来做大一点的项目,应该会有更多的问题需要配合解决,相互讨论出较为合理高效的解决方法。

原文地址:https://www.cnblogs.com/kiky000/p/10549818.html

时间: 2024-11-03 22:16:59

软件工程综合实践的第二次实验报告的相关文章

软件工程综合实践(2)

软件工程综合实践(2) LoginAction  到底做了什么? 1.     通过String username = request.getParameter("username"); 获取了页面当中输入的用户名 2.     有可能获取到乱码,那可以通过 username = new String (username.getBytes("ISO-8859-1"),"utf-8"); 转码   如果 获取的信息不是乱码,那你就不要转码了,否则会

《软件工程综合实践专题》——1程序简单测试与升级

<软件工程综合实践专题> ———程序简单测试与升级 1759233 目录 <软件工程综合实践专题>... 1 ———程序简单测试与升级... 1 1.  程序代码:... 2 2.  代码解读:... 2 3.  需求增加:... 2 4.  新增需求的测试用例:[可能写的不好,因为软件测试这学期才开始学习]... 3 5.增量开发... 4 6.收获和不足... 9 1.   程序代码: 2.   代码解读: Python是一门很强大的语言主要是因为它包含了很多使用的库,这里的程

《软件工程综合实践》学习内容3

软件工程综合实践转眼已经接近尾声了,通过这九天的学习,我们可以说是收获颇丰. 在实践的最后几天,我们一步一步地完善网页页面,在网上找到相应的素材对其进行美工操作.网上的素材千千万万,但是找到合适的素材却不简单,好在经过一番耐心寻找之后,终于找到合适的代码.经过修改完善之后,我们的主要代码如下: (1)登陆操作的代码 <%@ page language="java" import="java.util.*" pageEncoding="utf-8&qu

软件工程综合实践心得(1)

软件工程综合实践心得(1) mysql 使用 sql 文的使用(增.删.改.查询) 创建数据库    mybatis a1.  表的创建   保存的表名  userinfo userid int 11 选中 username char 20 pwd char 20 CREATE TABLE `userinfo` ( `userid` int(11) NOT NULL auto_increment, `username` char(20) default NULL, `pwd` char(20)

软件工程综合实践(1)

软件工程综合实践(1) 1.学习回顾  mysql 使用 a.  sql 文的使用(增.删.改.查询) 创建数据库    mybatis a1. 表的创建   保存的表名  userinfo userid int 11 选中 username char 20 pwd char 20 CREATE TABLE `userinfo` ( `userid` int(11) NOT NULL auto_increment, `username` char(20) default NULL, `pwd`

《软件工程综合实践》学习内容2

软件工程综合实践又过去了三天,学习了MVC.servelt(前后台交互)等相关内容,每天学习的内容都在更进一步,复杂难懂的东西也越来越多.好在老师十分耐心,在比较复杂难度的地方总会添加注释方便我们理解代码,还会向我们推荐一些网站学习. 在第四天,我们继续对代码进行拓展补充,使网页的功能更加完善,网页页面也初见端倪,可以进行简单的登录操作. 具体的主要代码如下: <%@ page language="java" import="java.util.*" page

2019春第二次实验报告

2019春第二次实验报告 一.实验项目名称 空战游戏 二.实验项目功能描述 在第一次实验基础上增加多台敌机,在一定的得分后发散导弹 三.项目模块结构介绍 四.实现界面展示 五.代码托管链接 https://gitee.com/wenyizhang999/ZWY/blob/master/空战游戏.cpp 六.实验总结 问题:创造无限循环模式 解决方法:编代码,未完成 总结:游戏规模越来越大,玩法越来越多,无限的空间待开发,觉得自己能完成一个游戏的开发太不容易,团队很重要. 原文地址:https:/

java第二次实验报告

课程:Java实验   班级:201352     姓名:黄坤  学号:2015226 成绩:           指导教师:娄佳鹏     实验日期:15.05.05 实验密级:         预习程度:       实验时间: 仪器组次:         必修/选修:选修    实验序号:2 实验名称:java面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5.

java程序设计第二次实验报告

北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: 2015.5.6 实验密级:         预习程度:             实验时间:5:30-10:00 仪器组次:23   必修/选修:必修       实验序号:02 实验名称:Java面向对象程序设计 实验目的与要求:1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.