软件工程课堂测试07(结对开发)
一.设计思路
1.初始化一个单链表,用来储存输入的数字
2.输入数字n,控制链表长度
3.后插法,初始化一个n个结点的循环链表
4.输入n个正负整数,赋值给单链表的数字域,连接单链表成循环链表
5.定义3个变量,用2个for循环来找元素组合成连续子数组之和最大得值
6.第一个for循环实现从第一个数字起到最后一个数字起形成的n个元素组合成连续子数组之和最大得值
7.第二个for循环实现从第i个数字起找n个元素组合成连续子数组之和最大得值
8.输出元素组合成连续子数组之和最大得值
二.源程序代码
1 //输入数字串形成一个环,找出子数组的和的最大值 谷伟华、牛俊燕 2016.4.13 2 #include<iostream> 3 using namespace std; 4 typedef struct LNode 5 { 6 int num; //数字域 7 struct LNode *next; //指针域 8 }LNode,*LinkList; 9 void CreateList_H(LinkList &L,int n) //后插法,初始化一个n个节点的循环链表 10 { //正位序输入n个元素的值,建立带表头结点的单链表L 11 L=new LNode; 12 L->next=NULL; //先建立一个带头结点的空链表 13 LinkList r,p; 14 r=L; //尾指针r指向头结点 15 for(int i=0;i<n;i++) 16 { 17 p=new LNode; //生成新的结点 18 cout<<"请输入第"<<i+1<<"个数字:"<<endl; 19 cin>>p->num; //输入元素值赋给新结点*p的数字 20 p->next=NULL; r->next=p; //将新结点*p插入到尾结点*r之后 21 r=p; //r指向新的尾结点*p 22 } 23 r->next=L->next; //指针r指向头结点,形成循环单链表 24 } 25 void main() 26 { 27 LinkList L; 28 int n; 29 cout<<"请输入数字的个数:"; 30 cin>>n; 31 CreateList_H(L,n); //调用函数,创建列表 32 int i,j,bj,max,Max; 33 LNode *q; //建立新的指针*q,让它在循环单列表上进行移动 34 q=L; 35 Max=q->next->num; //Max初始化初始化为第1个数字的值 36 for(i=0;i<n;i++) //循环n次, 37 { 38 bj=q->next->num; //bj初始化为第i个数字的值 39 max=q->next->num; //max初始化为第i个数字的值 40 for(j=i+1;j<i+n-1;j++) //从j=i+1开始循环n-1次 41 { 42 if(bj>0) 43 { //如果前j-1个数字的子数组的和的最大值>0,那么max=bj+第j个数字 44 max=bj+q->next->next->num; 45 } 46 else 47 { //否则max=第j个数字 48 max=q->next->next->num; 49 } 50 q->next=q->next->next; //q指针向后移动 51 bj=max; //将max赋给bj 52 } 53 if(Max<max) 54 { //每一轮的max和Max比较取最大值 55 Max=max; 56 } 57 q->next=q->next->next; //q指针向后移动 58 } 59 cout<<"子数组的最大值是:"<<Max<<endl; //输出最大值 60 }
三.结果截图
四.两人合作中的过程、体会以及如何解决冲突
上一次的四则运算的几次迭代作业都是我的搭档写的,我寻思这次作业简单,就让我负责程序分析,代码编程,她负责代码复审和代码测试计划,但是当我把我的代码给她之后,她觉得应该用数据结构中循环链表来解决这个问题,于是我们又展开了一番讨论,最终决定用循环链表来解决,这次的作业让我有一个深刻的体会,当拿到一个题目时,和搭档讨论完之后,不论谁是负责程序分析,代码编程的,谁是负责代码复审和代码测试计划的,我们都应该动手自己做一做,即使思路一样,但是做法还是会有不同,做完之后要相互交流,以达到共同进步的目的。
五.附结对开发的工作照