您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > C++课程实践报告试题及答案
任务一一、实践任务1.试建立一个类PP,求出下列多项式的前n项的值。nxPnxxPnxxPnn/))()1()()12((1)(2n1-110nnn二、详细设计1、类的描述与定义(1)私有数据成员intn:前若干项的项数。doublex:存放x的值。double*p:根据n的大小动态申请存放Pn(x)前n项的数组空间。(2)公有成员函数PP(intnum,doublex1):构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。~PP():析构函数,释放p指向的动态内存空间。doublefun(intn1,doublex):递归函数,用于求多项式)(xPn的第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数调用。voidprocess():完成求前n项的工作,并将它们存放到p指向的动态数组中。voidshow():输出n和x,并将前n项以每行4个数的形式输出到屏幕上。2、主要函数设计在主函数中完成对该类的测试。先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值。三、源程序清单#includeiostream.hclassPP{private:intn;doublex;double*p;public:PP(intnum,doublex1){n=num;x=x1;p=newdouble[n];}~PP(){if(p)delete[]p;}doublefun(intn1,doublex);voidprocess();voidshow();};doublePP::fun(intn1,doublex){if(n1==0)return1;elseif(n1==1)returnx;elseif(n11)return((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1;}voidPP::process(){for(inti=0;in;i++){p[i]=fun(i,x);}}voidPP::show(){coutn=nendlx=xendl;for(inti=0;in;i++){coutp[i]'\t''\t';if((i+1)%4==0)coutendl;}}voidmain(){intnum;doublex1;cout请输入num和x1:;cinnumx1;PPitems(num,x1);items.process();items.show();}任务二一、实践任务2.试建立一个类SP,求kkkknknf....321),(,另有辅助函数power(m,n)用于求nm。二、详细设计1、类的描述与定义(1)私有数据成员intn,k:存放公式中n和k的值;(2)公有成员函数SP(intn1,intk1):构造函数,初始化成员数据n和k。intpower(intm,intn):求mn。intfun():求公式的累加和。voidshow():输出求得的结果。2、主要函数设计在主程序中定义对象s,对该类进行测试。三、源程序清单#includeiostream.hclassSP{private:intn,k;public:SP(intn1,intk1){n=n1;k=k1;}intpower(intm,intn);intfun();voidshow();};intSP::power(intm,intn){ints=1;for(inti=0;in;i++){s*=m;}returns;}intSP::fun(){ints=0;for(inti=1;i=n;i++){s+=power(i,k);}returns;}voidSP::show(){coutf(n,k)=fun()endl;}voidmain(){intn1,k1;cout请输入n1,k1:;cinn1k1;SPs(n1,k1);s.fun();s.show();}任务三一、实践任务3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。二、详细设计1、类的描述与定义(1)私有数据成员floatarray[20]:一维整型数组。intn:数组中元素的个数。(2)公有成员函数MOVE(floatb[],intm):构造函数,初始化成员数据。voidaverage():输出平均值,并将数组中的元素按要求重新放置。voidprint():输出一维数组。2、主要函数设计在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。三、源程序清单#includeiostream.hclassMOVE{private:floatarray[20];intn;public:MOVE(floatb[],intm){for(inti=0;im;i++){array[i]=b[i];}n=m;}voidaverage();voidprint();~MOVE(){};};voidMOVE::average(){floatave=0;inti,j;for(i=0;in;i++){ave+=array[i];}ave/=n;coutaveendl;floatturn[20];j=0;for(i=0;in;i++){if(array[i]=ave){turn[j]=array[i];j++;}}j=0;for(i=0;in;i++){if(array[i]ave){turn[n-1-j]=array[i];j++;}}for(i=0;in;i++){array[i]=turn[i];}}voidMOVE::print(){for(inti=0;in;i++){coutarray[i]'';}}voidmain(){floatb1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};intnum;num=sizeof(b1)/sizeof(float);MOVEs(b1,num);s.average();s.print();}任务四一、实践任务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();}任务五一、实践任务定义一个类Palindrome,实现绝对回文数。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。二、详细设计1、类的描述与定义(1)私有数据成员intn:整型数字。inty:标记是否为回文数。(2)公有成员函数Palindrome(intx):构造函数,根据x参数初始化数据成员n,y初始化为0。voidhuiwen():判断数n是否为绝对回文数。voidshow():若该数为回文数,则在屏幕显示。2、主要函数设计在主程序中定义inta,由键盘输入数字。定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。三、源程序清单#includeiostream.hclassPalindrome{private:intn;inty;public:Palindrome(intx){n=x;y=0;}voidhuiwen();voidshow();};voidPalindrome::huiwen(){inti=0,j=0;intm;m=n;while(m){m/=10;i++;}m=n;while(m){m/=2;j++;}int*s10=newint[i];int*s2=newint[j];m=n;for(intk=0;ki;k++){s10[i-1-k]=m%10;m/=10;}m=n;for(k=0;kj;k++){s2[j-1-k]=m%2;m/=2;}intnum10=0;for(k=0;ki/2;k++){if(s10[i-1-k]==s10[k])num10++;elsebreak;}intnum2=0;for(k=0;kj/2;k++){if(s2[j-1-k]==s2[k])num2++;elsebreak;}if(num10==(i/2)&&num2==(j/2))y=1;}voidPalindrome::show(){inti=0,j=0;intm;m=n;while(m){m/=10;i++;}m=n;while(m){m/=2;j++;}int*s10=newint[i+1];int*s2=newint[j+1];m=n;for(intk=0;ki;k++){s10[i-1-k]=m%10;m/=10;}m=n;for(k=0;kj;k++){s2[j-1-k]=m%2;m/=2;}if(y){cout该数为绝对回文数!:endl;cout十进制表示为:;for(k=0;ki;k++)couts10[k];cout二进制表示为:;for(k=0;kj;k++)couts2[k];}else{cout该数不是绝对回文数!:endl;cout十进制表示为:;for(k=0;ki;k++)couts10[k];cout二进制表示为:;for(k=0;kj;k++)couts2[k];}coutendl;}voidmain(){inta;cout请输入一个数字:;cina;Palindromep(a);p.huiwen();p.show();}任务六一、实践任务6.定义一个字符串类String,实现判断该字符串是否为回文字符串
本文标题:C++课程实践报告试题及答案
链接地址:https://www.777doc.com/doc-4081362 .html