西南交通大学2012年面向对象程序设计_第1页
西南交通大学2012年面向对象程序设计_第2页
西南交通大学2012年面向对象程序设计_第3页
西南交通大学2012年面向对象程序设计_第4页
西南交通大学2012年面向对象程序设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西南交通大学2012年面向对象程序设计试题及答案开发环境为VC++6.0,运行结果有截图,若发现错误欢迎指正。实验一、C++程序开发环境及c++简单程序设计。题目1、简单C++程序任务:按提示的操作步骤输入下面的代码,编译连接并执行。源程序代码:#include"iostream.h"voidmain(){coutvv"Hello!\n";coutvv"Welcometoc++!"vvendl;coutvv"Thisismyfirstc++program"vvendl;}运行结果:Hello*Uelcometo匚十十「ThisismyFipstC++Pressanykuytocontinue题目2、编写程序,从标准输入读入一个数,把它转化为英文单词输出,如输入123,这是输出“onetwothree”。源程序代码:#includeviostream>usingnamespacestd;voidmain(){charch;cout<<"请输入数字用来转化为英文单词:";while(1){cin>>ch;if(ch=='\n')break;switch(ch-48){case0:coutvv"zero";break;case1:cout<<"one";break;case2:cout<<"two";break;case3:cout<<"three";break;case4:coutvv"four";break;case5:cout<<"five";break;case6:coutvv"six";break;case7:cout<<"seven";break;case8:cout<<"eight";break;case9:cout<<"nine";break;}}运行结果:请输入数字用来转化为央文单词:12345陆的onetuothr-esFourFivesixseveneightnine题目3、循环结构程序设计任务把一张一元纸币换成一分、二分和五分的硬币,假如每一种至少一枚,文友多少种换法,编程将各种换法显示出来。源程序代码:#includeviostream>usingnamespacestd;voidmain(){inti,j,k,x=O;coutvv"—角"<<"两角"<<"三角"vvendl;for(i=l;iv=93;i++)for(k=l;kv=47;k++)for(j=1;jv=19;j++)if(i+2*k+5*j==100){x++;coutvvivv""vvjvv""vvkvv""vvendl;}coutvv"换法的总数为:"vvxvvendl;}运行结果:871488218?13pl129311换法的总数为:4&1Prei5Sanykeytocontinue实验二、函数题目1、内联函数任务定义内敛函数max(),求两个整数中的最大值,然后在main()函数中惊醒调用定义内联函数inline-fun()和一般函数common-fun(),使整型参数值加1,然后在main()函数中惊醒调用;源程序代码:#includeviostream>usingnamespacestd;inlineintmax(intx,inty);inlineintinline_fun(intx);intcommon_fun(intx);voidmain()

mtx=4,y=5;coutvvxvv","vvy<<"中最大的是:"vvmax(x,y)vvendl;coutvvxv<"加1后为:"vvinline_fun(x)vvendl;coutvvy<<"力口1后为:"vvcommon_fun(y)vvendl;}inlineintmax(intx,inty){if(x>y)returnx;elsereturny;}inlineintinline_fun(intx){return++x;}intcommon_fun(intx){return++x;}运行结果:是是內56丄■一■-■-题目2、函数参数的传递机制、重载函数任务编写重载函数maxi()可分别求2个整数、3个整数、2个双精度和3双精度数的最大值。定义两个名称都为sum()的函数,第一个函数支持整型数组,第二个函数支持浮点型数组,求数组元素的和。源程序代码:#includeviostream>usingnamespacestd;intmax1(intx,inty){if(x>y)returnx;elsereturny;}intmax1(intx,inty,intz){if(x>max1(y,z))returnx;elsereturnmax1(y,z);}doublemax1(doublex,doubley){if(x>y)returnx;elsereturny;}doublemax1(doublex,doubley,doublez){if(x>max1(y,z))returnx;elsereturnmax1(y,z);}intsum(int*p,intn){inti=0,s=0;for(;i<n;i++)s+=p[i];returns;}doublesum(double*p,intn){inti;doubles=0;for(i=0;ivn;i++)s+=p[i];returns;}voidmain(){inta=l,b=2,c=3;doublex=4.5,y=6.7,z=8.9;intp[5]={1,2,3,4,5};doubleq[5]={4.5,6.7,8.9,2.4,1.2};coutvvavv","vvbvv"的最大值为:"vvmax1(a,b)vvendl;coutvvavv","vvbvv","vvcvv"的最大值为:"vvmax1(a,b,c)vvendl;coutvvxvv","vvyvv"的最大值为:"vvmax1(x,y)vvendl;coutvvxvv","vvyvv","vv"的最大值为:"vvmax1(x,y,z)vvendl;coutvv"int型p数组元素的和为:"vvsum(p,5)vvendl;coutvv"double型数组q的元素和为:"vvsum(q,5)vvendl;}运行结果:丄詔的取大值卷:21化3的取大值右:3int型圈组元羞箍吩=15double塾薮细d的兀素和为=23.7Pressnnykeytocontinue题目3、带默认参数的函数任务定义函数volume。,计算立体的体积,要求在主函数中以5中不同的形式调用此函数。源程序代码:#includeviostream>usingnamespacestd;doublevolume(doublex=1,doubley=2,doublez=3);voidmain(){doublex=4,y=5,c=6;coutvvvolume()vvendl;coutvvvolume(4)vvendl;coutvvvolume(4,5)vvendl;coutvvvolume(5,6)vvendl;coutvvvolume(4,5,6)vvendl;}doublevolume(doublex,doubley,doublez)//注意这里不可以再带默认的参

数{coutvv"以"vvxvv","vvyvv","vvzvv"为棱的长方体的体积为:";returnx*y*z;}运行结果:14454斗尸斗/33336

■■.■.■.I.225652414454斗尸斗/33336

■■.■.■.I.22565246998129lm—vlm—vlm—h.lm—VV..-斗JI...-斗/LHVLHVLN=•■■nJ—rrl—rTTj~Tt方方方方方o<-fe<:(K-fet.“爲“期/胡:」y・」一一・」一一--2_一一・二■e麦麦麦菱委k实验三、类于对象题目1、私有成员的访问任务下面的程序中用ERROR标明的语句有错误,在不删除和增加代码行的情况下,改正错误的语句,使其正确运行。错误代码及改正方法:#includeviostream>usingnamespacestd;classAa{public:Aa(inti=0){a=i;coutvv"Constructor"vvavvendl;}〜Aa(){coutvv"Destructor"vvavvendl;}voidprint(){coutvvavvendl;}private:inta;};intmain(){Aaa1(1),a2(2);a1.print();coutvva2.avvendl;//ERROR将该行代码中访问了a2的私有属性,改为a2.print();return0;}改正后的运行结果:ConstructorlGonstructor212DestPiJictop2DestructorlPt'ess秋Jieytocontinue题目2、构造函数、拷贝构造函数任务调试下列程序源程序代码:#includeviostream>usingnamespacestd;classTopint{public:Topint(intx,inty){X=x;Y=y;}Topint(Topint&p);〜Topint(){coutvv"destructoriscalled\n";}intgetx(){returnX;}intgety(){returnY;}private:intX,Y;};Topint::Topint(Topint&p){X=p.X;Y=p.Y;coutvv"Copy-initializationCnstructoriscalled'n";}intmain(){Topintpl(4,9);Topintp2(p1);Topintp3=p2;coutvv"p3=("vvp3.getx()vv","vvp3.gety()vv")\n";return0;}运行结果:Copy—init£allzat:lanCnstructoriscalledCopy-initialisatianCnstructoriscalledp3=<4,9>destructoris:calleddestpu.ctopiscalleddeetpu.ctopiscalledPv-essanykeytocontinue问题:(1)在该程序中将Topint类的带有两个参数的构造函数进行修改,在函数体内添加下述语句:coutvv"ConstructorisCalled.'n"。对程序的输出结果进行分析和说明。运行结果:Consti'ListorisCalled.Copy-initializationCnstructoris:calledCopy一initializationCnstructoris:calledp3=<4,9>destructoriscalleddestructoriscalleddestructoriscalledPressanykeytocontinue第一个ConstructorisCalled是构造pl时产生的,两个Copy-initializationConstructorisCalled分别hi构造p2和p3时产生的。析构p3、p2、pl,是产生了三个destructoriscalled。对上述程序在主函数中添加下列说明语句:Topintp4,p5(2)调试程序会出现什么现象,为什么?如何解决?结合运行结果分析如何使用不同的构造函数创建把不同的对象?对程序的输出结果进行分析和说明。会出现对象p4,p5无法构造。在类中将构造函数Topint(intx,inty);改成带有默认参数的构造函数,例如:Topint(intx=0,inty=0);运行结果:ConstructorisCalled.Cop^-initialisationCnstructoriscalledCop^-initializationGnstructoriscalledConstrustoi1isCalled-ConstpustopisCalled-p3=<4,9>destructorisca.Lleddestructor■ISca.Lleddestructorisca.ll&ddestructoriscalleddestructoriscalledPressan9keytocontinue分析同上。题目3、析构函数、new和delete运算符任务定义字符串类,包括私有数据成员(char*ch),构造函数中用new为ch申请空间,析构函数用delete释放空间,并验证构造函数和析构函数的调用书顺序。源程序代码:#includeviostream>usingnamespacestd;classString{private:char*ch;intn;public:String(intn=0){this->n=n;ch=newchar[n];coutvv"构造函数被调用!"vvnvvendl;}voidset(){coutvv"请输入"vvnvv"字符用来构造字符串。"vvendl;for(inti=0;ivn;i++)cin>>ch[i];}voidshow(){coutvv"字符串的储存的内容如下:"vvendl;for(inti=0;ivn;i++)coutvvch[i];coutvvendl;}〜String。{coutvv"析构函数被调用!"vvnvvendl;delete[]ch;}};voidmain(){intn1,n2;coutvv"请分别输入你所要建立的两个字符串的含有字符的个数:"vvendl;cin»n1»n2;Strings1(n1),s2(n2);s1.set();s2.set();s1.show();s2.show();}运行结果:请分别输入你所要建立的两个字符串的含有字符的个数=56构造函数披调用估请输入弓争符用来构造字符串。12345请输入£字符用来构造字符串。qwerty字符串的储存的内容如下:12345字符串的储存的内容如下;qwei'ty租勾函数被调用忆柿枷函数被调用帖 ■PressanyNe勺tocontinue可以看出构造函数和析构函数的调用的顺序相反!注意:特别重视构造函数、拷贝构造函数和析构函数的使用以及调用顺序,这在整个面向对象程序设计中一直是重点同时也一直是难点。实验四、静态成员与友元题目1、静态成员的特性任务(1)调试下列程序,写出输出的结果,并分析输出结果。程序代码:#includeviostream>usingnamespacestd;classMy{public:My(intaa){A=aa;B-=aa;}staticvoidfun(Mym);private:intA;staticintB;};voidMy::fun(Mym)〃这里的静态函数在类外实现时就无需在家static关键字。{coutvv"A="vvm.Avvendl;coutvv"B="vvBvvendl;}intMy::B=100;〃静态的数据成员要在类外进行初始化,并且初始化时无需加关键字限定。intmain(){MyP(6),Q(8);My::fun(P);〃静态函数的调用形式。Q.fun(Q);return0;}运行结果:1=6>=861=8>=86^ess讯n*kevtocontinue可以看出,static的数据成员是不属于任何的对象的而属于整个类。Static函同样是属于整个类可以用类名加作用域标识符进行调用,也可以用对象进行调用,两种形式的调用效果等价。题目2、友元函数任务分析并调试程序,完成下列问题程序代码:#includeviostream>#includevcmath>usingnamespacestd;classMy{public:My(doublei=0){x=y=i;}My(doublei,doublej){x=i;y=j;}My(My&m){x=m.x;y=m.y;}frienddoubledist(My&a,My&b);private:doublex,y;};doubledist(My&a,My&b){doubledx=a.x-b.y;doubledy=a.y-b.y;returnsqrt(dx*dx+dy*dy);}intmain(){Myml,m2(15),m3(13,14);Mym4(m3);coutvv"Thedistancel:"vvdist(m1,m3)vvendl;coutvv"Thedistance2:"vvdist(m2,m3)vvendl;coutvv"Thedistance3:"vvdist(m3,m4)vvendl;coutvv"Thedistance4:"vvdist(m1,m2)vvendl;return0;}运行结果:Thedistancel .799Thedistances:i.41421Thediatance3;1Thedistance4:21.2132Ppess日n野1{日野tocontinue思考:指出所有的构造函数,它们在本程序中分别起什么作用?My(doublei=0);My(doublei,doublej);My(My&m);第一个实现单参和带有一个默认参数构造,第二个实现双参构造;第三个事拷贝构造函数。(实际上前两个可以合并为一个My(doublei=0;doublej);).指出设置默认参数的构造函数。(前面已回答)指出友元函数。将友元函数放到私有部分,观察结果是否有变化。友元函数为:doubledist(My&a,My&b);放到私有部分是没有变化的。写出结果并分析结果。(结果已给出)题目3、静态成员的应用任务定义一个Student类,在该类中定义包括一个数据成员score()(分数)、两个静态数据成员total(总分)和学生人数count;成员函数scoretotalcount(floats)用于设置分数、求总分和累加学生人数;静态成员函数sum()用于计算总分;静态成员函数average()用于计算平均值。在main(0函数中输入学生成绩,并调用上述函数求出全班学生的总分和平均分。源程序代码:#includeviostream>usingnamespacestd;classStudent{private:doublescore;staticdoubletotal;staticintcount;

public:Student。{count++;}voidscoretotalcount(){cin>>score;total+=score;}doublegets(){returnscore;}staticvoidsum(){coutvv"这个班的学生该课程的总分为:"vvtotalvvendl;}staticvoidaverage。{coutvv"这个班的学生该课程的平均分为:"vvtotal/countvvendl;}};doubleStudent::total=0;intStudent::count=0;voidmain(){Students[10];coutvv"请输入10个学生的成绩:";for(inti=0;iv10;i++)s[i].scoretotalcount();coutvv"这10个学生的成绩为:";for(i=0;iv10;i++)coutvvs[i].gets()vvends;coutvvendl;Student::sum();Student::average();}运行结果:雷该亠生10学的的丿■■/■「刊別一输10—请这这这.■日占雷该亠生10学的的丿■■/■「刊別一输10—请这这这.■日占8--刀9八药78总平绩--的囱7878葩9465946B822:82-2tSS567S91SBBS67B9IOSan题目4、友元函数的应用任务声明Book和Ruler两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。源程序代码:#includeviostream>usingnamespacestd;classBook;classRuler{private:doubleweight;public:Ruler(doublex=0):weight(x){}voidset(){coutvv"请输入你在Ruler类中所要设置weight的值:";cin>>weight;}voidshow(){coutvv"weight="vvweightvvendl;}friendvoidtotalweight(Book&a,Ruler&b);};classBook{private:doubleweight;public:Book(doublex=0):weight(x){}voidset(){coutvv,请输入你在Book类所要设置weight的值:";cin»weight;}voidshow(){coutvv"weight="vvweightvvendl;}friendvoidtotalweight(Book&a,Ruler&b);};voidtotalweight(Book&a,Ruler&b){coutvv"二者的重量之和为:"vva.weight+b.weightvvendl;}voidmain(){Bookb;Rulerr;b.set();b.show();r.set();r.show();totalweight(b,r);}这里子两个类中属性比较单一,主要是为使用友元函数,如果需要可以添加其他属性。运行结果:请输入你在Book类所要设Sueight的值=45-78vieiffht=45.78请榆人你ftRulep类中所要设置晚加肚的值:78_98weig-ht=78.98二著的重量之和为=^24.76Pressanykeytocontinue实验五、继承与派生题目1、单继承任务调试下列程序,并对程序进行修改,指出程序中错误的原因。程序代码:#includeviostream>usingnamespacestd;classA{public:voidseta(inti){a=i;}intgeta(){returna;}public:inta;};classB:publicA{public:voidsetb(inti){b=i;}intgetb(){returnb;}voidshow(){coutvv"A::a="vvavvendl;}public:intb;};intmain(){Bbb;〃语句1bb.seta(6);〃语句2bb.setb(3);〃语句3bb.show();coutvv"A::a="vvbb.avvendl;coutvv"B::b="vvbb.bvvendl;coutvv"A::a="vvbb.geta()vvendl;coutvv"B::a="vvbb.getb()vvendl;return0;}运行结果:A::a=6A::a=6B::b=3A::a=6B::a=3Ppessan9keytocontinue问题、将派生类B的继承方式改为private,会出现那些错误和不正常的现象?为什么?在main()函数中直接使用用A类的属性将是不可以的,因为继承方式是private所以其属性将不可以直接被调用!将派生类的继承方式改为protected,会出现哪些错误和不正常的现象?为什么?同(1)支部过集成的方式改为protectedo将派生类B的继承方式恢复为public后,再将类A的数据成员int型的变量a的访问权限改为private时,会出现哪些错误和不正常的现象?为什么?将会出现在B类和main函数中是用数据a是不可以的,一维在A类中a是属性为privateo派生类B的继承方式仍为public,再将类A中的数据成员int型的变量a的访问权限该为protected,会出现哪些错误和不正常的现象?为什么?更改后数据a在B类中是可以使用,但在main函数仍是不可以被使用的,因为继承方式是protected!题目2、利用继承与派生类来管理学生和教师的档案任务假设要管理下述基类人员的如下的数据Teacher(教师):姓名、性别、年龄、职称、教授课程;Student(学生):姓名、性别、年龄、学号、专业;Graduate():姓名、性别、年龄、学号、专业、导师;源程序代码:#include<iostream>#include<string>usingnamespacestd;classPerson{private:stringxm,xb;intage;public:Person(stringna,stringsex,inta):xm(na),xb(sex),age(a){}voidshow(){cout<<"姓名:"<<xm<<"性别:"<<xb<<"年龄:"<<age;}};classTeacher:publicPerson{private:stringzc,kc;public:Teacher(stringna,stringsex,inta,stringz,stringk):Person(na,sex,a),zc(z),kc(k){}voidshow(){Person::show();cout<<"职称:"<<zc<<"教授课程:"<<kc<<endl;}};classStudent:publicPerson{private:stringxh,sb;public:Student(stringna,stringsex,inta,stringx,strings):Person(na,sex,a),xh(x),sb(s){}voidshow(){Person::show();cout<<"学号:"<<xh<<"专业:"<<sb;}};classGraduate:publicStudent{private:stringds;public:Graduate(stringna,stringsex,inta,stringx,strings,stringd):Student(na,sex,a,x,s),ds(d){}voidshow(){Student::show();coutv<"导师:"vvdsvvendl;}};

voidmam(){Teachert("张三","男",45,"教授","面向对象程序设计");Students("李四","男",20,"201100001","计算机科学与技术");Graduateg("李红","女",24,"200800001","计算机科学与技术","张三");t.show();s.show();coutvvendl;g.show();: 上二:女年continue}运行结果:eot:201100001: 上二:女年continue}运行结果:eot:201100001题目3、教师干部类定义Person(人)类,由Person分别派生Teacher(教师)类和Cader(干部)类,再有Teacher(教师)类和Caderl类采用多重继承的方式派生出TeacherCader(教师兼干部)类。源程序代码:#includeviostream>#includevstring>usingnamespacestd;classPerson{private:stringxm,xb;intage;public:Person(stringna,stringsex,inta):xm(na),xb(sex),age(a){}voidshow(){coutvv"姓名:"vvxmvv"性别:"vvxbvv"年龄:"<<age;}};classTeacher:virtualpublicPerson{private:stringzc;public:Teacher(stringna,stringsex,inta,stringz):Person(na,sex,a),zc(z){}voidshow1(){Person::show();coutvv"职称:"<<zc;}voidshow(){coutvv"职称:"vvzc;}};classCader:virtualpublicPerson{private:stringpost;public:

Cader(stringna,stringsex,inta,stringp):Person(na,sex,a),post(p){}voidshowl(){Person::show();coutvv"职务:"vvpost;}voidshow(){coutvv"职务:"vvpost;}};classTeacherCader:publicTeacher,publicCader{private:doublewages;public:TeacherCader(stringna,stringsex,inta,stringz,stringp,doublew):Person(na,sex,a),Teacher(na,sex,a,z),Cader(na,sex,a,p),wages(w){}voidshow(){Person::show();Teacher::show();Cader::show();coutvv"工资:"vvwagesvvendl;}};voidmain(){Teachert("张三","男",45,"教授");Caderc("李四","男",55,"校长“);TeacherCadertc("王五","女",45,"教授","院长",10000);t.show1();coutvvendl;c.show1();coutvvendl;tc.show();}运行结果:另另另t生生生f:男年肾另另另t生生生f二男年昭:55职養咙长三女乎龄=45职称娥授职务邛完长工资M醃醃continue实验六、虚函数与多态题目1、动态联编和静态联编任务分析并调试下列程序程序代码:#includeviostream>usingnamespacestd;classBase{public:virtualvoidf(floatx){coutvv"Base::f(float)"vvxvvendl;}voidg(floatx){coutvv"Base::g(float)"vvxvvendl;}voidh(floatx){coutvv"Base::h(float)"vvxvvendl;}};classDerived:publicBase{public:virtualvoidf(floatx){coutvv"Derived::f(float)"vvxvvendl;}voidg(intx){coutvv"Derived::g(int)"vvxvvendl;}voidh(floatx){coutvv"Derived::h(float)"vvxvvendl;}};intmain(){Derivedd;Base*pb=&d;Derived*pd=&d;pb->f(3.14f);pd->f(3.14f);pb->g(3.14f);pd->h(3.14f);pd->h(3.14f);return0;}运行结果:Derived:=f<flo-at>3.14Deriued::f<float>3.14Base::g(float>3.14Deviued::h<float)3.14Derived=:li<flo-at>3.14Pressani/ tocontinu.e问题:(1)找出以上程序张是使用了重载和覆盖的函数。覆盖的有virtualvoidf(floatx);和voidh(floatx);重载的有voidg(intx)和voidg(floatx);写出程序的输出结果,并解释结果。结果已截图解释省去。题目2、动态联编和静态联编任务分析并调试下列程序:#includeviostream>usingnamespacestd;constdoublePI=3.1415;classSharp{public:virtualdoubleArea()=0;};classTriangle:publicSharp{public:Triangle(doubleh,doublew){H=h;W=w;}doubleArea(){return0.5*W*H;}private:doubleH,W;};classRectangle:publicSharp{public:Rectangle(doubleh,doublew){H=h;W=w;}doubleArea(){returnH*W;}private:doubleH,W;};classCricle:publicSharp{public:Cricle(doubler){R=r;}doubleArea(){returnPI*R*R;}private:doubleR;};classSqure:publicSharp{public:Squre(doubles){S=s;}doubleArea(){returnS*S;}private:doubleS;};doubleTotal(Sharp*s[],intn){doublesum=0;for(inti=0;i<n;i++)sum=sum+s[i]->Area();returnsum;}intmain(){Sharp*s[5];s[0]=newSqure(4.0);s[1]=newRectangle(2.0,4.0);s[2]=newSqure(8.0);s[3]=newCricle(2.0);s[4]=newTriangle(4.0,8.0);doublesum=Total(s,5);coutvv"SUM="vvsumvvendl;return0;运行结果:指出抽象类;Sharp指出纯虚函数,并说明它的作用。DoubleArea()=0是抽象类,作用是为同类的函数日工同意的外部接口。每个类的作用是什么,正程序的作用是什么?读者可以通过读程序就会明白该程序的作用和每个类的作用,所以就不在这里做过多的解释。题目3•图形类的设计任务定义抽象类Shape;ClassShape{Public:virtualdoubleArea()=0;〃任意图形的面积virtualdoubleVolume()=0;//任意图形的体积};要求定义派生类Circle(圆)、Rectangle(矩形),并实现相应的纯虚函数。定义CAR,使得到通过CAR一如下方式统一操作Circle和Rectangle图形。classCAR{private:Shape&shape;public:CAR(Shape&s):shape(s){};doubleArea(){returnshape.Area();}doubleVolume(){returnshape.Volume();}};源程序代码:#includeviostream>usingnamespacestd;constdoublePI=3.1415;classShape{public:virtualdoubleArea()=0;virtualdoubleVolume()=0;};classTriangle:publicShape{public:Triangle(doubleh,doublew){H=h;W=w;}doubleArea(){return0.5*W*H;}doubleVolume(){return0.0;}//注意着里即使不用Volume()属性也要对其进行一定函数实现。private:doubleH,W;};classRectangle:publicShape{public:Rectangle(doubleh,doublew){H=h;W=w;}doubleArea(){returnH*W;}doubleVolume(){return0.0;}private:doubleH,W;};classCricle:publicShape{public:Cricle(doubler){R=r;}doubleArea(){returnPI*R*R;}doubleVolume(){return0.0;}private:doubleR;};classSqure:publicShape{public:Squre(doubles){S=s;}doubleArea(){returnS*S;}doubleVolume(){return0.0;}private:doubleS;};classFT:publicShape{public:doubleV01ume(){returnH*W*G;}doubleArea(){return0.0;}FT(doubleh,doublew,doubleg){H=h;W=w;G=g;}private:doubleW,H,G;};classCAR{private:Shape&shape;public:CAR(Shape&s):shape(s){};doubleArea(){returnshape.Area();}doubleVolume(){returnshape.Volume();}};voidmain(){Criclea(5.0);Rectanglec(10.0,5.0);FTb(10.0,8.0,9.0);CARA(a),C(c),B(b);coutvv"圆A的面积为:"vvA.Area()vvendl;coutvv"球B的体积为:"<<B.Volume()<<endl;coutvv"矩形C的面积为:"vvC.Area()vvendl;}运行结果:圜A的面积为;78.5375球R的体粗为:720宛形匚的首积为:50Pressajiykeytocontinue题目4、运算符重载任务定义一个Time用来保存时间(时、分、秒),通过重载操作符“+”实现两个时间的相加。要求定义一个Time类,包括3个数据成员:hours(时)、minutes(分)、second(秒),另外两个构造函数,时间相加运算符“+”重载函数输出函数gettime().源程序代码:#includeviostream>#includeviomanip>usingnamespacestd;classTime{private:inth,m,s;public:Time(inth=O,intm=0,ints=0){this->h=h;this->m=m;this->s=s;}Time(Time&t){h=t.h;m=t.m;s=t.s;}voidoperator+(Time&t){h+=t.h;m+=t.m;s+=t.s;}voidgettime(){coutvv"现在时间为:";cout.fill('O');coutvvsetw(2)vvhvv":"vvsetw(2)vvmvv":"vvsetw(2)vvsvvendl;}};voidmain(){Timetl(5,5,5),t2(10,10,10);tl.gettime();t2.gettime();t1+t2;t1.gettime();}运行结果:=05:05:05现在河间为=10=10=10阴在时间为:15:15:15Pi'-ess:Anykeytocontinue实验7、模板与STL库题目1、函数模板任务编写一个函数模板实现n个数据的最小值,具体要求为:能求不同的数据类型的最小值,n个数据由键盘输入。可以用int、float、double等类型的参数,并在main函数进行测试。源程序代码:#include<iostream>usingnamespacestd;template<classT>Tmin(T*a,intn){Tk=a[0];for(inti=0;i<n;i++)if(a[i]<k)k=a[i];returnk;}voidmain(){intn;coutvv"请输入n的值:";cin>>n;int*p=newint[n];double*q=newdouble[n];coutvv"请输入"vvnvv"个整型的数:";for(inti=O;ivn;i++)cin»p[i];coutvv"请输入"vvnvv"个双精度的数:";for(i=0;i<n;i++)cin»q[i];coutvvendlvvnvv"个整型数中最小的是:"<<min(p,n)<<endl;cout<<n<<"个双精度数最小的是:"vvmin(q,n)vvendl;delete[]p;delete[]q;}运行结果:题目2、类模板任务编写一个使用类模板对数组经型排序、查找和求元素的和的程序,并才用相关的数据进行测试。源程序代码:#include〈iostream〉#include〈cstdlib〉usingnamespacestd;template<classT>classsz{private:T*a;intn;public:sz(intnn):n(nn){}voidset(T*p){a=p;cout〈〈"请输入"〈〈n〈〈"个数据";for(inti=0;i〈n;i++)cin〉〉a[i];cout〈〈"该数组的原始数据是:";for(i=0;i〈n;i++)cout〈〈a[i]〈〈ends;cout〈〈endl;}voidpx(){for(inti=0;i〈n;i++)for(intj=i;j〈n;j++) if(a[j]〈a[i]){Tb;b=a[j];a[j]=a[i];a[i]=b;}}intcz(Tc){intm=T;for(inti=0;i〈n;i++)if(a[i]==c)m=i;returnm;}

};voidmain(){intn;cout〈〈"请输入您想要建立的数组元素的个数:";cin〉〉n;int*a,c;double*b,d;a=newint[n];b=newdouble[n];sz<int〉A(n);sz(double〉B(n);A.set(a);B.set(b);cout〈〈"请分别输入您所要查找的整型和双精度数:〃;cin〉〉c〉〉d;cout〈〈endl;if(A.cz(c)!=-l)cout〈〈"您所要查找的整型数在"〈〈A.cz(c)+1〈〈"位";elsecout〈〈"查找失败";cout〈〈endl;if(B.cz(d)!=-1)cout〈〈"您所要查找的双进度数在"〈〈B.cz(d)+1〈〈"位";elsecout〈〈"查找失败";cout〈〈endl;px();cout〈〈"整型数排序后的顺序为:";for(inti=0;i〈n;i++)cout〈〈a[i]〈〈ends;cout〈〈endl;px();cout〈〈"双精度数排序后的顺序为:";for(i=0;i〈n;i++)cout〈〈b[i]〈〈ends;cout〈〈endl;cout〈〈"整型数组的和为:"〈〈A.add()〈〈endl;cout〈〈"双精度数组的和为:"〈〈B.add()〈〈endl;}运行结果:c型进顺的••为tD整収鬻为和y的詈序書key查查專组数anc型进顺的••为tD整収鬻为和y的詈序書key查查專组数an要s蕩精es入您想要题目3、标准模板库的应用任务声明一个整型的数组,使用C++标准模板库(STL)中查找算法find()惊醒数据的查找,然后排序算法soort()对数据进行升序和降序排序。源程序代码:#include<iostream〉#include〈vector〉#include〈algorithm>#include〈functional〉usingnamespacestd;voidmain(){intA[]={1,4,2,3,3};constintN=sizeof(A)/sizeof(int);vector<int>coll(A,A+N);ostream_iterator<int>output(cout,"");cout〈〈〃数组的原始数据为:〃;copy(coll.begin(),coll.end(),output);cout〈〈〃数组值相等的第一个元素为:〃;cout〈〈*adjacent_find(coll.begin(),coll.end())〈〈endl;sort(coll.begin(),coll.end());cout〈〈endl〈〈〃升序排列后:〃;copy(coll.begin(),coll.end(),output);sort(coll.begin(),coll.end(),greater〈int〉());cout〈〈endl〈〈〃降序排列后:〃;copy(coll.begin(),coll.end(),output);cout〈〈endl;}运行结果:【数组的原始数据为:丄4233数组值相等的第一个元素为汁升墮排列后:升墮排列后:Pressanykey1233443321tocontinue实验八、C++的输入、输出流于文件操作题目1、格式化输入输出任务以左对齐的方式输出整数,域宽为10;打印有符号数和无符号数200;将十进制整数200以ox开头的十六进制格式输出;用前导*格式打印3.911;域宽为10;源程序代码:#include〈iostream〉#include〈iomanip〉usingnamespacestd;voidmain(){inta=100;unsignedintb=200;intc=200;cout〈〈setw(10)〈〈a〈〈endl;cout〈〈b〈〈endl;cout〈〈c〈〈endl;cout〈〈hex〈〈c〈〈endl;cout.width(10);cout.fill('*');cout〈〈3.911〈〈endl;}运行结果:IQS200200c8*****3.911Ppessanyl<E_ytocontinue题目2、文本文件操作任务编写程序,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论