西南交通大學2012年面向?qū)ο蟪绦蛟O計_第1頁
西南交通大學2012年面向?qū)ο蟪绦蛟O計_第2頁
西南交通大學2012年面向?qū)ο蟪绦蛟O計_第3頁
西南交通大學2012年面向?qū)ο蟪绦蛟O計_第4頁
西南交通大學2012年面向?qū)ο蟪绦蛟O計_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

西南交通大學2012年面向?qū)ο蟪绦蛟O計試題及答案開發(fā)環(huán)境為VC++6.0,運行結(jié)果有截圖,若發(fā)現(xiàn)錯誤歡迎指正。實驗一、C++程序開發(fā)環(huán)境及c++簡單程序設計。題目1、簡單C++程序任務:按提示的操作步驟輸入下面的代碼,編譯連接并執(zhí)行。源程序代碼:#include"iostream.h"voidmain(){coutvv"Hello!\n";coutvv"Welcometoc++!"vvendl;coutvv"Thisismyfirstc++program"vvendl;}運行結(jié)果:Hello*Uelcometo匚十十「ThisismyFipstC++Pressanykuytocontinue題目2、編寫程序,從標準輸入讀入一個數(shù),把它轉(zhuǎn)化為英文單詞輸出,如輸入123,這是輸出“onetwothree”。源程序代碼:#includeviostream>usingnamespacestd;voidmain(){charch;cout<<"請輸入數(shù)字用來轉(zhuǎn)化為英文單詞:";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;}}運行結(jié)果:請輸入數(shù)字用來轉(zhuǎn)化為央文單詞:12345陸的onetuothr-esFourFivesixseveneightnine題目3、循環(huán)結(jié)構程序設計任務把一張一元紙幣換成一分、二分和五分的硬幣,假如每一種至少一枚,文友多少種換法,編程將各種換法顯示出來。源程序代碼:#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"換法的總數(shù)為:"vvxvvendl;}運行結(jié)果:871488218?13pl129311換法的總數(shù)為:4&1Prei5Sanykeytocontinue實驗二、函數(shù)題目1、內(nèi)聯(lián)函數(shù)任務定義內(nèi)斂函數(shù)max(),求兩個整數(shù)中的最大值,然后在main()函數(shù)中驚醒調(diào)用定義內(nèi)聯(lián)函數(shù)inline-fun()和一般函數(shù)common-fun(),使整型參數(shù)值加1,然后在main()函數(shù)中驚醒調(diào)用;源程序代碼:#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;}運行結(jié)果:是是內(nèi)56丄■一■-■-題目2、函數(shù)參數(shù)的傳遞機制、重載函數(shù)任務編寫重載函數(shù)maxi()可分別求2個整數(shù)、3個整數(shù)、2個雙精度和3雙精度數(shù)的最大值。定義兩個名稱都為sum()的函數(shù),第一個函數(shù)支持整型數(shù)組,第二個函數(shù)支持浮點型數(shù)組,求數(shù)組元素的和。源程序代碼:#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數(shù)組元素的和為:"vvsum(p,5)vvendl;coutvv"double型數(shù)組q的元素和為:"vvsum(q,5)vvendl;}運行結(jié)果:丄詔的取大值卷:21化3的取大值右:3int型圈組元羞箍吩=15double塾藪細d的兀素和為=23.7Pressnnykeytocontinue題目3、帶默認參數(shù)的函數(shù)任務定義函數(shù)volume。,計算立體的體積,要求在主函數(shù)中以5中不同的形式調(diào)用此函數(shù)。源程序代碼:#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)//注意這里不可以再帶默認的參

數(shù){coutvv"以"vvxvv","vvyvv","vvzvv"為棱的長方體的體積為:";returnx*y*z;}運行結(jié)果: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;}改正后的運行結(jié)果:ConstructorlGonstructor212DestPiJictop2DestructorlPt'ess秋Jieytocontinue題目2、構造函數(shù)、拷貝構造函數(shù)任務調(diào)試下列程序源程序代碼:#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;}運行結(jié)果:Copy—init£allzat:lanCnstructoriscalledCopy-initialisatianCnstructoriscalledp3=<4,9>destructoris:calleddestpu.ctopiscalleddeetpu.ctopiscalledPv-essanykeytocontinue問題:(1)在該程序中將Topint類的帶有兩個參數(shù)的構造函數(shù)進行修改,在函數(shù)體內(nèi)添加下述語句:coutvv"ConstructorisCalled.'n"。對程序的輸出結(jié)果進行分析和說明。運行結(jié)果:Consti'ListorisCalled.Copy-initializationCnstructoris:calledCopy一initializationCnstructoris:calledp3=<4,9>destructoriscalleddestructoriscalleddestructoriscalledPressanykeytocontinue第一個ConstructorisCalled是構造pl時產(chǎn)生的,兩個Copy-initializationConstructorisCalled分別hi構造p2和p3時產(chǎn)生的。析構p3、p2、pl,是產(chǎn)生了三個destructoriscalled。對上述程序在主函數(shù)中添加下列說明語句:Topintp4,p5(2)調(diào)試程序會出現(xiàn)什么現(xiàn)象,為什么?如何解決?結(jié)合運行結(jié)果分析如何使用不同的構造函數(shù)創(chuàng)建把不同的對象?對程序的輸出結(jié)果進行分析和說明。會出現(xiàn)對象p4,p5無法構造。在類中將構造函數(shù)Topint(intx,inty);改成帶有默認參數(shù)的構造函數(shù),例如:Topint(intx=0,inty=0);運行結(jié)果:ConstructorisCalled.Cop^-initialisationCnstructoriscalledCop^-initializationGnstructoriscalledConstrustoi1isCalled-ConstpustopisCalled-p3=<4,9>destructorisca.Lleddestructor■ISca.Lleddestructorisca.ll&ddestructoriscalleddestructoriscalledPressan9keytocontinue分析同上。題目3、析構函數(shù)、new和delete運算符任務定義字符串類,包括私有數(shù)據(jù)成員(char*ch),構造函數(shù)中用new為ch申請空間,析構函數(shù)用delete釋放空間,并驗證構造函數(shù)和析構函數(shù)的調(diào)用書順序。源程序代碼:#includeviostream>usingnamespacestd;classString{private:char*ch;intn;public:String(intn=0){this->n=n;ch=newchar[n];coutvv"構造函數(shù)被調(diào)用!"vvnvvendl;}voidset(){coutvv"請輸入"vvnvv"字符用來構造字符串。"vvendl;for(inti=0;ivn;i++)cin>>ch[i];}voidshow(){coutvv"字符串的儲存的內(nèi)容如下:"vvendl;for(inti=0;ivn;i++)coutvvch[i];coutvvendl;}?String。{coutvv"析構函數(shù)被調(diào)用!"vvnvvendl;delete[]ch;}};voidmain(){intn1,n2;coutvv"請分別輸入你所要建立的兩個字符串的含有字符的個數(shù):"vvendl;cin?n1?n2;Strings1(n1),s2(n2);s1.set();s2.set();s1.show();s2.show();}運行結(jié)果:請分別輸入你所要建立的兩個字符串的含有字符的個數(shù)=56構造函數(shù)披調(diào)用估請輸入弓爭符用來構造字符串。12345請輸入£字符用來構造字符串。qwerty字符串的儲存的內(nèi)容如下:12345字符串的儲存的內(nèi)容如下;qwei'ty租勾函數(shù)被調(diào)用憶柿枷函數(shù)被調(diào)用帖 ■PressanyNe勺tocontinue可以看出構造函數(shù)和析構函數(shù)的調(diào)用的順序相反!注意:特別重視構造函數(shù)、拷貝構造函數(shù)和析構函數(shù)的使用以及調(diào)用順序,這在整個面向?qū)ο蟪绦蛟O計中一直是重點同時也一直是難點。實驗四、靜態(tài)成員與友元題目1、靜態(tài)成員的特性任務(1)調(diào)試下列程序,寫出輸出的結(jié)果,并分析輸出結(jié)果。程序代碼:#includeviostream>usingnamespacestd;classMy{public:My(intaa){A=aa;B-=aa;}staticvoidfun(Mym);private:intA;staticintB;};voidMy::fun(Mym)〃這里的靜態(tài)函數(shù)在類外實現(xiàn)時就無需在家static關鍵字。{coutvv"A="vvm.Avvendl;coutvv"B="vvBvvendl;}intMy::B=100;〃靜態(tài)的數(shù)據(jù)成員要在類外進行初始化,并且初始化時無需加關鍵字限定。intmain(){MyP(6),Q(8);My::fun(P);〃靜態(tài)函數(shù)的調(diào)用形式。Q.fun(Q);return0;}運行結(jié)果:1=6>=861=8>=86^ess訊n*kevtocontinue可以看出,static的數(shù)據(jù)成員是不屬于任何的對象的而屬于整個類。Static函同樣是屬于整個類可以用類名加作用域標識符進行調(diào)用,也可以用對象進行調(diào)用,兩種形式的調(diào)用效果等價。題目2、友元函數(shù)任務分析并調(diào)試程序,完成下列問題程序代碼:#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;}運行結(jié)果:Thedistancel .799Thedistances:i.41421Thediatance3;1Thedistance4:21.2132Ppess日n野1{日野tocontinue思考:指出所有的構造函數(shù),它們在本程序中分別起什么作用?My(doublei=0);My(doublei,doublej);My(My&m);第一個實現(xiàn)單參和帶有一個默認參數(shù)構造,第二個實現(xiàn)雙參構造;第三個事拷貝構造函數(shù)。(實際上前兩個可以合并為一個My(doublei=0;doublej);).指出設置默認參數(shù)的構造函數(shù)。(前面已回答)指出友元函數(shù)。將友元函數(shù)放到私有部分,觀察結(jié)果是否有變化。友元函數(shù)為:doubledist(My&a,My&b);放到私有部分是沒有變化的。寫出結(jié)果并分析結(jié)果。(結(jié)果已給出)題目3、靜態(tài)成員的應用任務定義一個Student類,在該類中定義包括一個數(shù)據(jù)成員score()(分數(shù))、兩個靜態(tài)數(shù)據(jù)成員total(總分)和學生人數(shù)count;成員函數(shù)scoretotalcount(floats)用于設置分數(shù)、求總分和累加學生人數(shù);靜態(tài)成員函數(shù)sum()用于計算總分;靜態(tài)成員函數(shù)average()用于計算平均值。在main(0函數(shù)中輸入學生成績,并調(diào)用上述函數(shù)求出全班學生的總分和平均分。源程序代碼:#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個學生的成績?yōu)?";for(i=0;iv10;i++)coutvvs[i].gets()vvends;coutvvendl;Student::sum();Student::average();}運行結(jié)果:雷該亠生10學的的丿■■/■「刊別一輸10—請這這這.■日占雷該亠生10學的的丿■■/■「刊別一輸10—請這這這.■日占8--刀9八藥78總平績--的囪7878葩9465946B822:82-2tSS567S91SBBS67B9IOSan題目4、友元函數(shù)的應用任務聲明Book和Ruler兩個類,二者都有weight屬性,定義二者的一個友元函數(shù)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);}這里子兩個類中屬性比較單一,主要是為使用友元函數(shù),如果需要可以添加其他屬性。運行結(jié)果:請輸入你在Book類所要設Sueight的值=45-78vieiffht=45.78請榆人你ftRulep類中所要設置晚加肚的值:78_98weig-ht=78.98二著的重量之和為=^24.76Pressanykeytocontinue實驗五、繼承與派生題目1、單繼承任務調(diào)試下列程序,并對程序進行修改,指出程序中錯誤的原因。程序代碼:#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;}運行結(jié)果:A::a=6A::a=6B::b=3A::a=6B::a=3Ppessan9keytocontinue問題、將派生類B的繼承方式改為private,會出現(xiàn)那些錯誤和不正常的現(xiàn)象?為什么?在main()函數(shù)中直接使用用A類的屬性將是不可以的,因為繼承方式是private所以其屬性將不可以直接被調(diào)用!將派生類的繼承方式改為protected,會出現(xiàn)哪些錯誤和不正常的現(xiàn)象?為什么?同(1)支部過集成的方式改為protectedo將派生類B的繼承方式恢復為public后,再將類A的數(shù)據(jù)成員int型的變量a的訪問權限改為private時,會出現(xiàn)哪些錯誤和不正常的現(xiàn)象?為什么?將會出現(xiàn)在B類和main函數(shù)中是用數(shù)據(jù)a是不可以的,一維在A類中a是屬性為privateo派生類B的繼承方式仍為public,再將類A中的數(shù)據(jù)成員int型的變量a的訪問權限該為protected,會出現(xiàn)哪些錯誤和不正常的現(xiàn)象?為什么?更改后數(shù)據(jù)a在B類中是可以使用,但在main函數(shù)仍是不可以被使用的,因為繼承方式是protected!題目2、利用繼承與派生類來管理學生和教師的檔案任務假設要管理下述基類人員的如下的數(shù)據(jù)Teacher(教師):姓名、性別、年齡、職稱、教授課程;Student(學生):姓名、性別、年齡、學號、專業(yè);Graduate():姓名、性別、年齡、學號、專業(yè)、導師;源程序代碼:#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<<"專業(yè):"<<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,"教授","面向?qū)ο蟪绦蛟O計");Students("李四","男",20,"201100001","計算機科學與技術");Graduateg("李紅","女",24,"200800001","計算機科學與技術","張三");t.show();s.show();coutvvendl;g.show();: 上二:女年continue}運行結(jié)果:eot:201100001: 上二:女年continue}運行結(jié)果: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();}運行結(jié)果:另另另t生生生f:男年腎另另另t生生生f二男年昭:55職養(yǎng)嚨長三女乎齡=45職稱娥授職務邛完長工資M醃醃continue實驗六、虛函數(shù)與多態(tài)題目1、動態(tài)聯(lián)編和靜態(tài)聯(lián)編任務分析并調(diào)試下列程序程序代碼:#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;}運行結(jié)果: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)找出以上程序張是使用了重載和覆蓋的函數(shù)。覆蓋的有virtualvoidf(floatx);和voidh(floatx);重載的有voidg(intx)和voidg(floatx);寫出程序的輸出結(jié)果,并解釋結(jié)果。結(jié)果已截圖解釋省去。題目2、動態(tài)聯(lián)編和靜態(tài)聯(lián)編任務分析并調(diào)試下列程序:#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;運行結(jié)果:指出抽象類;Sharp指出純虛函數(shù),并說明它的作用。DoubleArea()=0是抽象類,作用是為同類的函數(shù)日工同意的外部接口。每個類的作用是什么,正程序的作用是什么?讀者可以通過讀程序就會明白該程序的作用和每個類的作用,所以就不在這里做過多的解釋。題目3?圖形類的設計任務定義抽象類Shape;ClassShape{Public:virtualdoubleArea()=0;〃任意圖形的面積virtualdoubleVolume()=0;//任意圖形的體積};要求定義派生類Circle(圓)、Rectangle(矩形),并實現(xiàn)相應的純虛函數(shù)。定義CAR,使得到通過CAR一如下方式統(tǒng)一操作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()屬性也要對其進行一定函數(shù)實現(xiàn)。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;}運行結(jié)果:圜A的面積為;78.5375球R的體粗為:720宛形匚的首積為:50Pressajiykeytocontinue題目4、運算符重載任務定義一個Time用來保存時間(時、分、秒),通過重載操作符“+”實現(xiàn)兩個時間的相加。要求定義一個Time類,包括3個數(shù)據(jù)成員:hours(時)、minutes(分)、second(秒),另外兩個構造函數(shù),時間相加運算符“+”重載函數(shù)輸出函數(shù)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"現(xiàn)在時間為:";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();}運行結(jié)果:=05:05:05現(xiàn)在河間為=10=10=10陰在時間為:15:15:15Pi'-ess:Anykeytocontinue實驗7、模板與STL庫題目1、函數(shù)模板任務編寫一個函數(shù)模板實現(xiàn)n個數(shù)據(jù)的最小值,具體要求為:能求不同的數(shù)據(jù)類型的最小值,n個數(shù)據(jù)由鍵盤輸入??梢杂胕nt、float、double等類型的參數(shù),并在main函數(shù)進行測試。源程序代碼:#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"個整型的數(shù):";for(inti=O;ivn;i++)cin?p[i];coutvv"請輸入"vvnvv"個雙精度的數(shù):";for(i=0;i<n;i++)cin?q[i];coutvvendlvvnvv"個整型數(shù)中最小的是:"<<min(p,n)<<endl;cout<<n<<"個雙精度數(shù)最小的是:"vvmin(q,n)vvendl;delete[]p;delete[]q;}運行結(jié)果:題目2、類模板任務編寫一個使用類模板對數(shù)組經(jīng)型排序、查找和求元素的和的程序,并才用相關的數(shù)據(jù)進行測試。源程序代碼:#include〈iostream〉#include〈cstdlib〉usingnamespacestd;template<classT>classsz{private:T*a;intn;public:sz(intnn):n(nn){}voidset(T*p){a=p;cout〈〈"請輸入"〈〈n〈〈"個數(shù)據(jù)";for(inti=0;i〈n;i++)cin〉〉a[i];cout〈〈"該數(shù)組的原始數(shù)據(jù)是:";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〈〈"請輸入您想要建立的數(shù)組元素的個數(shù):";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〈〈"請分別輸入您所要查找的整型和雙精度數(shù):〃;cin〉〉c〉〉d;cout〈〈endl;if(A.cz(c)!=-l)cout〈〈"您所要查找的整型數(shù)在"〈〈A.cz(c)+1〈〈"位";elsecout〈〈"查找失敗";cout〈〈endl;if(B.cz(d)!=-1)cout〈〈"您所要查找的雙進度數(shù)在"〈〈B.cz(d)+1〈〈"位";elsecout〈〈"查找失敗";cout〈〈endl;px();cout〈〈"整型數(shù)排序后的順序為:";for(inti=0;i〈n;i++)cout〈〈a[i]〈〈ends;cout〈〈endl;px();cout〈〈"雙精度數(shù)排序后的順序為:";for(i=0;i〈n;i++)cout〈〈b[i]〈〈ends;cout〈〈endl;cout〈〈"整型數(shù)組的和為:"〈〈A.add()〈〈endl;cout〈〈"雙精度數(shù)組的和為:"〈〈B.add()〈〈endl;}運行結(jié)果:c型進順的??為tD整収鬻為和y的詈序書key查查專組數(shù)anc型進順的??為tD整収鬻為和y的詈序書key查查專組數(shù)an要s蕩精es入您想要題目3、標準模板庫的應用任務聲明一個整型的數(shù)組,使用C++標準模板庫(STL)中查找算法find()驚醒數(shù)據(jù)的查找,然后排序算法soort()對數(shù)據(jù)進行升序和降序排序。源程序代碼:#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〈〈〃數(shù)組的原始數(shù)據(jù)為:〃;copy(coll.begin(),coll.end(),output);cout〈〈〃數(shù)組值相等的第一個元素為:〃;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;}運行結(jié)果:【數(shù)組的原始數(shù)據(jù)為:丄4233數(shù)組值相等的第一個元素為汁升墮排列后:升墮排列后:Pressanykey1233443321tocontinue實驗八、C++的輸入、輸出流于文件操作題目1、格式化輸入輸出任務以左對齊的方式輸出整數(shù),域?qū)挒?0;打印有符號數(shù)和無符號數(shù)200;將十進制整數(shù)200以ox開頭的十六進制格式輸出;用前導*格式打印3.911;域?qū)挒?0;源程序代碼:#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;}運行結(jié)果:IQS200200c8*****3.911Ppessanyl<E_ytocontinue題目2、文本文件操作任務編寫程序,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論