江苏科技大学课程实践报告设计题目:程序设计(VC++)实践设计时间20014-2-24至2014-2-28学院(系):船舶与海洋工程专业班级:卓越(一)班学生姓名:朱国栋学号1240101138指导老师:张晓茹任务一一、实践任务38.建立一个类Sample,对数组中元素用选择法进行升序排序。排序函数定义到Sample类的友元类Process中。具体要求如下:类Sample#defineMax100;二、详细设计1、类的描述与定义(1)私有数据成员intA[MAX]:一维整型数组,存放需要排序的数。intn:需要排序的数的个数。(2)公有成员函数Sample():构造函数,初始化成员数据n,初始值为0。友元类Process公有成员函数voidgetdata(Sample&s):从键盘输入数据,对数组A进行赋值。voidselectsort(Sample&s):对数组A中的元素进行升序排序。voiddisp(Sample&s):输出数组中的元素。2、主要函数设计在主程序中定义对象对该类进行测试。三、源程序清单#includeiostream.h#defineMAX100classSample{private:intA[MAX];intn;public:Sample(){n=0;}friendclassProcess;};classProcess{public:voidgetdata(Sample&s){cout请输入需要排序的数的个数:endl;cins.n;cout请依次输入s.n个需要排序的数:endl;for(inti=0;is.n;i++)cins.A[i];}voidselectsort(Sample&s){intt;for(inti=0;is.n-1;i++){t=i;for(intj=i+1;js.n;j++){if(s.A[t]s.A[j])t=j;}if(t!=i){j=s.A[t];s.A[t]=s.A[i];s.A[i]=j;}}}voiddisp(Sample&s){cout数组中的元素为:endl;for(inti=0;is.n;i++)couts.A[i]'\t';coutendl;}};voidmain(){Sampletest1;Processtest2;test2.getdata(test1);test2.disp(test1);test2.selectsort(test1);test2.disp(test1);}四、运行结果任务二一、实践任务4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。二、详细设计1、类的描述与定义(1)私有数据成员int*array:一维整型数组。intn:数组中元素的个数。(2)公有成员函数MOVE(intb[],intm):构造函数,初始化成员数据。voidexchange():输出平均值,并将数组中的元素按要求重新放置。voidprint():输出一维数组。~MOVE():析构函数。2、主要函数设计在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。三、源程序清单#includeiostream.hclassMOVE{private:int*array;intn;public:MOVE(intb[],intm){array=newint[m];n=m;for(inti=0;im;i++){array[i]=b[i];}}voidexchange();voidprint();~MOVE(){if(array)deletearray;}};voidMOVE::exchange(){floatave=0;for(inti=0;in;i++){ave+=array[i];}ave/=n;cout平均值为aveendl;intmax,min;max=min=array[0];intm;for(i=0,m=0;in;i++){if(array[i]=max)m=i,max=array[i];}intl;for(i=0,l=0;in;i++){if(array[i]max)l=i,max=array[i];}i=array[m],array[m]=array[l],array[l]=i;}voidMOVE::print(){for(inti=0;in;i++)coutarray[i]'';}voidmain(){inttext[]={21,65,43,87,12,84,44,97,32,55};intnum;num=sizeof(text)/sizeof(int);MOVEs(text,num);s.print();coutendl;s.exchange();s.print();}四、运行结果任务三一、实践任务8.建立一个MATRIX,生成并显示一个螺旋方阵。螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。二、详细设计1、类的描述与定义(1)私有数据成员inta[20][20]:二维整型数组存放螺旋方阵。intstartnum:螺旋方阵的起始数。intn:存放方针的层数。(2)公有成员函数MATRIX(ints,intm):构造函数,初始化成员数据startnum和n。voidprocess():生成起始数为startnum的n行螺旋方阵。voidprint():输出螺旋方阵。2、主要函数设计在主程序中定义MATRIX类的对象t对该类进行测试。三、源程序清单#includeiostream.hclassMATRIX{private:inta[20][20];intstartnum;intn;public:MATRIX(ints,intm){startnum=s;n=m;}voidprocess();voidprint();};voidMATRIX::process(){inti,j;intk;intturn=startnum;12345161718196152425207142322218131211109for(k=1;k=n/2;k++){for(i=k-1,j=k-1;jn-(k-1);j++){a[i][j]=turn++;}j--;turn--;for(;in-k+1;i++){a[i][j]=turn++;}i--;turn--;for(;j=k-1;j--){a[i][j]=turn++;}j++;turn--;for(;i=k;i--){a[i][j]=turn++;}}a[n/2][(n-1)/2]=n*n-1+startnum;}voidMATRIX::print(){inti,j;for(i=0;in;i++){for(j=0;jn;j++){couta[i][j]'\t';}coutendlendl;}}voidmain()//测试;{ints,m;cout请输入起始数和方阵的层数:;cinsm;MATRIXt(s,m);t.process();t.print();}四、运行结果任务四一、实践任务35.建立一个类Union求两个整数集合的并集。二、详细设计1、类的描述与定义(1)私有数据成员int*set1,len1:用动态空间set1存储集合1,len1表示其元素的个数。int*set2,len2:用动态空间set2存储集合2,len2表示其元素的个数。intset[20],len:用数组空间set存储并集,len表示其元素的个数(2)公有成员函数Union(int*s1,intl1,int*s2,intl2):用变量s1和l1初始化集合1及其长度,用变量s2和l2初始化集合2及其长度,并把并集的长度置为0;intf(intnum):判断整数num是否属于集合1,是返回1,否则返回0;voidfun():求集合1和集合2的并集,方法是先把集合1中的所有元素复制给并集,然后调用f函数把集合2中不属于集合1的元素复制给并集;voidshow():输出集合1、集合2和并集;~Union():释放动态空间。2、主要函数设计在主函数中对定义的类进行测试。定义数组s1:{1,2,3,4,5,6,7,8}、s2:{1,3,5,7,9,11},并用它们初始化类Union的对象obj,然后调用相关的成员函数,求并集,输出集合1、集合2和并集。三、源程序清单#includeiostream.hclassUnion{private:int*set1,len1;int*set2,len2;intset[20],len;public:Union(int*s1,intl1,int*s2,intl2){set1=newint[l1];inti;for(i=0;il1;i++)set1[i]=s1[i];len1=l1;set2=newint[l2];for(i=0;il2;i++)set2[i]=s2[i];len2=l2;len=0;}intf(intnum){for(inti=0;ilen1;i++){if(set1[i]==num)return1;}return0;}voidfun();voidshow();};voidUnion::fun(){for(inti=0;ilen1;i++)set[len++]=set1[i];for(i=0;ilen2;i++){if(f(set2[i])==0)set[len++]=set2[i];}}voidUnion::show(){cout集合1:endl;for(inti=0;ilen1;i++)coutset1[i]'\t';coutendl;cout集合2endl;for(i=0;ilen2;i++)coutset2[i]'\t';coutendl;cout并集endl;for(i=0;ilen;i++)coutset[i]'\t';coutendl;}voidmain(){ints1[]={1,2,3,4,5,6,7,8},s2[]={1,3,5,7,9,11};Unionobj(s1,8,s2,6);obj.fun();obj.show();}四、运行结果任务五一、实践任务22.建立一个类Saddle_point,求一个数组中的所有鞍点。提示:鞍点是这样的数组元素,其值在它所在行中为最大,在它所在列中为最小。二、详细设计1、类的描述与定义(1)私有数据成员inta[4][4]:存放二维数组元素。intb[4][4]:存放二维数组中的鞍点值。intnum:存放鞍点个数。(2)公有成员函数Saddle_point(intdata[][4]):构造函数,用参数intdata[][4]初始化数组a,,同时初始化数组b与num的值均为0。voidprocess():求数组a所有鞍点(如果有鞍点),把它们行、列、及值相应存放在数组b中,并将求出的鞍点个数赋给num。voidprint():输出数组a、鞍点个数,与鞍点坐标及相应值。2、主要函数设计在主程序中定义数组intb[][4]={2,6,3,4,5,6,5,5,5,7,6,7,1,9,2,7}作为原始数组。定义一个Saddle_point类对象fun。通过fun调用成员函数完成求鞍点及输出工作。三、源程序清单#includeiostream.hclassSaddle_point{private:inta[4][4];intb[4][4];intnum;public:Saddle_point(intdata[][4]){for(inti=0;i4;i++){for(intj=0;j4;j++){a[i][j]=data[i][j];b[i][j]=0;}}nu