南京理工大学课程实践报告设计题目:程序设计(VC++)实践设计时间:2011至2011学院(系):电子信息学院专业班级:电子学生姓名:学号指导老师:亡灵2012年1月对于一个有正数和负数的数组,将其中所有小于0的元素放到所有大于0的元素的前面。使用的算法是:从左右两个方向扫描数组,从左向右找到大于等于0的元素,从右向左找到小于0的元素,将两者交换。以此类推,直到扫描完为止。试建立一个类ARR,完成上述工作。具体要求如下:(1)私有数据成员。intn:数组实际元素的个数。inta[100]:初始时存放原始数组,最终存放交换后的数组。(2)公有成员函数。ARR(intx[],intsize):构造函数,用参数size初始化n,用x数组初始化a数组。voidchange():使用以上算法,完成调换数组元素的工作。voidshow():输出a数组的值。(2)在主函数中完成对该类的测试。定义一个整型数组intb[10],其初始值是{1,-3,-1,3,2,4,-4,5,-5,-2},定义一个ARR类的对象v,用b数组及其元素个数初始化该对象,先输出原始数组的值,然后交换数组元素的值,最后输出交换后的结果。程序设计:#includestring.h#includeiostream.hclassARR{intn;inta[100];public:ARR(intx[],intsize){n=size;for(inti=0;in;i++)a[i]=x[i];}voidchange(){inti=0,j=n-1,t;for(;ij;){while(a[i]0)i++;while(a[j]0)j--;if(ij){t=a[i];a[i]=a[j];a[j]=t;}}}voidshow(){for(inti=0;in;i++)couta[i]'\t';cout'\n';}};voidmain(){intb[10]={1,-3,-1,3,2,4,-4,5,-5,-2};ARRv(b,10);v.show();v.change();v.show();}输出结果为:任务二、第4题:定义一个字符串类String,具体要求如下:(1)私有成员数据:char*str1,*str2;char*str;//str为str1与str2之和,如str1为“dba”,str2为“41”,则str为“dba41”;(“”为“空格”字符)(2)公有成员函数:构造函数:根据给定的两个字符串初始化成员数据str1和str2,由str1和str2,由str1和str2得到str;voiddele():删除str中的空格字符;voidsort():对str中的字符按升序进行排序;voidshow():输出所有成员数据;析构函数。(3)设计一个完整的程序对该类进行测试。以字符串“dba”和“41”初始化str1和str2;输出删除空格和排序前的字符串str1、str2和str;输出删除空格和排序后的字符串str1、str2和str。(4)#includeiostream.h#includestring.hclassString{private:char*str1;char*str2,*str;public:String(char*p1,char*p2);voiddele();voidsort();voidshow();~String();};String::String(char*p1,char*p2){str1=newchar[strlen(p1)+1];strcpy(str1,p1);str2=newchar[strlen(p2)+1];strcpy(str2,p2);str=newchar[strlen(p1)+strlen(p2)+2];for(inti=0;str1[i];i++)str[i]=str1[i];for(intj=0;str2[j];j++)str[i++]=str2[j];str[i]='\0';}voidString::dele(){chart[100];intjj;intii=0;for(jj=0;str[jj];jj++)if(str[jj]!='')//{t[ii]=str[jj];ii++;}t[ii]='\0';strcpy(str,t);str[ii]='\0';}voidString::sort(){for(inti=0;istrlen(str)-1;i++)for(intj=i;jstrlen(str);j++)if(str[i]str[j]){chart=str[i];str[i]=str[j];str[j]=t;}}voidString::show(){coutstr1'\n';coutstr2endl;coutstr'\n';}String::~String(){delete[]str1;delete[]str2;delete[]str;}voidmain(){charp1[]=dba;charp2[]=41;StringS(p1,p2);S.show();S.dele();S.sort();S.show();}任务三、第5题:定义一个数组类Array,求整型一维数组中值为素数的元素的平均值。具体要求如下:(1)私有成员数据:int*p,k;//p表示维组,k为数组大小float*s;//维组中素数元素的平均值(2)公有成员函数:Array(int*ptr,intn):根据参数初始化p和k,然后初始化s并为s赋初值;Intfun(intn):判断n是否为素数,若是返回1,否则返回0;voidsum():求素数元素的平均值;voidshow():输出所有成员数据,数组每行5个元素,其他成员每行一个;析构函数。(3)设计一个完整的程序对该类进行测试。以数组{5,2,7,4,8,23,65,1,40}说明Array类型对象arr,并对其测试。程序设计:(5)#includeiostream.hclassArray{private:int*p,k;floats;public:Array(int*ptr,intn);intfun(intn);voidsum();voidshow();~Array();};Array::Array(int*ptr,intn){/*int*/p=newint[n];for(inti=0;in;i++)p[i]=ptr[i];k=n;s=0;}intArray::fun(intn){if(n2)return0;//for(inti=2;in;i++)if(n%i==0)return0;return1;}voidArray::sum(){intt=0;for(inti=0;ik;i++)if(fun(p[i])){s+=p[i];t++;}//s/=t;}voidArray::show(){for(inti=0;ik;i++)coutp[i]'\t';coutendl;coutk'\n'sendl;}Array::~Array(){delete[]p;}voidmain(){intt[]={5,2,7,4,8,23,65,1,40};Arrayarr(t,sizeof(t)/4);arr.show();arr.sum();arr.show();cout37/4.0'\n';}输出结果为:任务四、第6题:建立一个类STR,连接两个字符串后,将结果字符串中的字符排成升序。例如,字符串s1的值为“pear”,字符串s2的值为“apple”,将s1与s2连接后得到字符串“pearapple”,存入字符数组s3,排序后得“aaeelpppr”。具体要求如下:(1)私有数据成员:chars1[80],s2[80],分别存放两个原始字符串;chars3[160],存放结果字符串。(2)公有成员函数:STR(chara[],b[]),构造函数,用字符串参数a和b分别初始化数据成员字符串s1和s2;voidconsort(),合并字符串后存入s3,再对s3中的字符排序;voidshow(),输出两个原始字符串和结果字符串。(3)在主程序中定义两个字符数组chara[80],b[80],任意输入两个字符串,再定义一个STR类对象str,用字符串a和b初始化该对象,然后按上述要求测试该类。可自行输入任意两个字符做测试数据。程序设计:(6)#includeiostream.h#includestring.hclassSTR{private:chars1[80];chars2[80];chars3[160];public:STR(chara[],charb[]);voidconsort();voidshow();};STR::STR(chara[],charb[]){strcpy(s1,a);strcpy(s2,b);s3[0]='\0';//}voidSTR::consort(){intj=0;strcpy(s3,s1);for(inti=strlen(s1);s2[j];i++){s3[i]=s2[j];j++;}s3[i]='\0';//for(i=0;istrlen(s3)-1;i++)for(intj=i;jstrlen(s3);j++)if(s3[i]s3[j]){chart=s3[i];s3[i]=s3[j];s3[j]=t;}}voidSTR::show(){couts1endls2endl;if(s3)//couts3'\n';}voidmain(){chara[80]=pear;charb[]=apple;STRstr(a,b);str.show();str.consort();str.show();}输出结果为:任务五、第7题:试定义RECT类(长方形)及其派生类CUB(长方体),具体要求如下:(1)类RECT的成员如下:(a)保护数据成员doublex,y;分别表示长方形的长和宽。(b)公有成员函数RECT(doublex1,doubley1):构造函数,分别用x1、y2初始化x、y。virtualdoublearea():虚函数,计算长方形的面积,计算公式:面积=长*宽。doubleperi():计算长方形的周长。计算公式:周长=2*长+2*宽。virtualintisSquare():虚函数,判断是否为正方形,如是,返回1;否则,返回0。(2)类CUB为类RECT的公有派生类,其成员如下:(a)私有数据成员doubleheight:表示长方体的高度。(b)公有成员函数CUB():构造函数,用h、x、y分别初始化height及其基类成员x和y。doublevolume():计算长方体的体积。计算公式:体积=底面积*高,其中底面积通过调用基类成员函数area()计算。doublearea():计算长方体的表面积。计算公式:表面积=2*底面积+底面周长*高度。底面积和底面周长分别调用基类成员函数area()和peri()计算。intisSquare():判断是否为正方体,如是,返回1;否则,返回0.在判断过程中,首先调用基类的成员函数isSquare()判断底面是否为正方形。(3)在主函数中,创建一个CUB对象cu和一个RECT指针*re,并使re指向cu。通过cu调用volume(),计算并输出长方体的体积;通过re调用area()和isSquare(),计算并输出长方体的表面积,并判断是否为正方体。程序设计:(7)#includeiostream.hclassRECT{protected:doublex,y;public:RECT(doublea,doubleb);virtualdoublearea();doubleperi();virtualintisSquare();};RECT::RECT(doublex1,doubley1){x=x1;