程序設(shè)計實習(xí)作業(yè)解答_第1頁
程序設(shè)計實習(xí)作業(yè)解答_第2頁
程序設(shè)計實習(xí)作業(yè)解答_第3頁
程序設(shè)計實習(xí)作業(yè)解答_第4頁
程序設(shè)計實習(xí)作業(yè)解答_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序設(shè)計實習(xí)作業(yè)解答作業(yè)二:魔獸世界之一描述:魔獸世界的西面是紅魔軍的司令部,東面是藍(lán)魔軍的司令部。兩軍的司令部都會制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號、生命值、攻擊力這三種屬性。

雙方的武士編號都是從1開始計算。紅方制造出來的第n個武士,編號就是n。同樣,藍(lán)方制造出來的第n個武士,編號也是n。武士在剛降生的時候有一個生命值。在每個整點,雙方的司令部中各有一個武士降生。紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環(huán)制造武士。藍(lán)方司令部按照lion、dragon、ninja、iceman、wolf的順序循環(huán)制造武士。制造武士需要生命元。制造一個初始生命值為m的武士,司令部中的生命元就要減少m個。如果司令部中的生命元不足以制造某個按順序應(yīng)該制造的武士,那么司令部就試圖制造下一個。如果所有武士都不能制造了,則司令部停止制造武士。給定一個時間,和雙方司令部的初始生命元數(shù)目,要求你將從0點0分開始到雙方司令部停止制造武士為止的所有事件按順序輸出。作業(yè)二:魔獸世界之一描述:魔獸世界的西面是紅魔軍的司令部,東面是藍(lán)魔軍的司令部。兩軍的司令部都會制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號、生命值、攻擊力這三種屬性。

雙方的武士編號都是從1開始計算。紅方制造出來的第n個武士,編號就是n。同樣,藍(lán)方制造出來的第n個武士,編號也是n。武士在剛降生的時候有一個生命值。在每個整點,雙方的司令部中各有一個武士降生。紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環(huán)制造武士。藍(lán)方司令部按照lion、dragon、ninja、iceman、wolf的順序循環(huán)制造武士。制造武士需要生命元。制造一個初始生命值為m的武士,司令部中的生命元就要減少m個。如果司令部中的生命元不足以制造某個按順序應(yīng)該制造的武士,那么司令部就試圖制造下一個。如果所有武士都不能制造了,則司令部停止制造武士。給定一個時間,和雙方司令部的初始生命元數(shù)目,要求你將從0點0分開始到雙方司令部停止制造武士為止的所有事件按順序輸出。作業(yè)二:魔獸世界之一作業(yè)二:魔獸世界之一1寫出下面程序的運行結(jié)果解析:return返回時,產(chǎn)生臨時變量,調(diào)用拷貝構(gòu)造函數(shù),函數(shù)完全返回后,臨時變量銷毀,n減小41

驗證:插入print語句類和對象的基本概念—作業(yè)三2寫出下面程序的運行結(jié)果

解析:構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù)的調(diào)用注意區(qū)分:Sampleb=a;d=a;切記:不同的編譯選項可能會影響程序結(jié)果eg.Realsevs.Debug建議:賦值構(gòu)造函數(shù)參數(shù)使用const.9不優(yōu)化:22優(yōu)化:205

類和對象的基本概念—作業(yè)三Returnvalueoptimization原始版本原始版本實現(xiàn)偽碼優(yōu)化版本實現(xiàn)偽碼ReturnvalueoptimizationOptionsgcc-fno-elide-constructorsVisualC++/Od/O2擴展閱讀:NamedReturnValueOptimizationinVisualC++2005Returnvalueoptimization(wikipedia)2寫出下面程序的運行結(jié)果

解析:構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù)的調(diào)用注意區(qū)分:Sampleb=a;d=a;切記:不同的編譯選項可能會影響程序結(jié)果eg.Realsevs.Debug建議:賦值構(gòu)造函數(shù)參數(shù)使用const.9不優(yōu)化:22優(yōu)化:205

類和對象的基本概念—作業(yè)三3程序輸出結(jié)果如下,請?zhí)羁誧lassA{public: intval; A(____________){val=n;}; ___________GetObj(){ return________; }};main(){ Aa;cout<<a.val<<endl;0 a.GetObj()=5; cout<<a.val<<endl;//修改了val5}(intn=0)int&GetObj(){

returnval;}或者A&GetObj(){

return*this;}類和對象的基本概念—作業(yè)三自動類型轉(zhuǎn)換之構(gòu)造函數(shù)轉(zhuǎn)換自動類型轉(zhuǎn)換:如果編譯器看到一個表達(dá)式或函數(shù)調(diào)用了一個不合適的類型,它經(jīng)常會將當(dāng)前類型轉(zhuǎn)到所需要的類型。構(gòu)造函數(shù)轉(zhuǎn)換:如果一個構(gòu)造函數(shù)函數(shù)能把另一類型對象(或引用)作為它的單個參數(shù),那么這個構(gòu)造函數(shù)允許編譯器執(zhí)行自動類型轉(zhuǎn)換。4程序輸出結(jié)果如下,請?zhí)羁?+4i5+6i補足Complex類的成員函數(shù),不能增加成員變量classComplex{private: doubler,i;public: voidPrint(){cout<<r<<"+"<<i<<"i"<<endl;}};intmain(){ Complexa; a="3+4i"; a.Print(); a="5+6i"; a.Print(); }類和對象的基本概念—作業(yè)三構(gòu)造函數(shù)Complex(){};Complex(constchar*a){

…}另一種思路重載賦值操作符Complex&operator=(constchar*a){

…}演示類和對象的基本概念—作業(yè)三Print()函數(shù)限制了只做正數(shù)答案只是參考完整的Complex類還需要完善5程序輸出結(jié)果如下,請?zhí)羁?0補足Sample類的成員函數(shù),不能增加成員變量classSample{ public: intv; Sample(intn):v(n){};};main(){ Samplea(5); Sampleb=a; cout<<b.v;}Sample(constSample&x){v=2*x.v;}類和對象的基本概念—作業(yè)三6程序輸出結(jié)果如下,請?zhí)羁誘hisHello補足MyString類的成員函數(shù),不能增加成員變量classMyString{ char*p;public: MyString(char*s){ p=newchar[strlen(s)+1]; strcpy(p,s); } ~MyString(){delete[]p;} constchar*c_str(){returnp;}};main(){ MyStrings1("This"),s2=s1; s2.Copy("Hello"); cout<<s1.c_str()<<endl<<s2.c_str();}類和對象的基本概念—作業(yè)三補足成員函數(shù)voidCopy(char*s){ delete[]p; p=newchar[strlen(s)+1]; strcpy(p,s);}MyString(MyString&o){ p=newchar[strlen(o.p)+1]; strcpy(p,o.p);}類和對象的基本概念—作業(yè)三7程序輸出結(jié)果如下,請?zhí)羁?,55,5classBase{public: intk; Base(intn):k(n){}};classBig{public: intv; Baseb; Big_____________{} Big_____________{}};main(){ Biga1(5); Biga2=a1; cout<<a1.v<<","<<a1.b.k<<endl; cout<<a2.v<<","<<a2.b.k<<endl;}Big(intn):v(n),b(n){}Big(constBig&x):v(x.v),b(x.b.k){}類和對象的基本概念—作業(yè)三1程序輸出結(jié)果如下,請?zhí)羁?,1請寫出被隱藏的部分,MyInt的成員函數(shù)里不允許使用靜態(tài)變量classMyInt{ intnVal; public: MyInt(intn){nVal=n;} intReturnVal(){returnnVal;} ….};main(){ MyIntobjInt(10); objInt-2-1-3; cout<<objInt.ReturnVal(); cout<<","; objInt-2-1; cout<<objInt.ReturnVal();}MyInt&operator-(intx){nVal-=x; return*this;}運算符重載—作業(yè)三2程序輸出結(jié)果如下,請?zhí)羁?4,5)(7,8)classPoint{private: intx; inty;public: Point(intx_,inty_):x(x_),y(y_){};_____;};_____operator<<(_____,constPoint&p){_____; return______;}main(){cout<<Point(4,5)<<Point(7,8);}運算符重載—作業(yè)三classPoint{private: intx; inty;public: Point(intx_,inty_):x(x_),y(y_){};_____;};_____operator<<(_____,constPoint&p){_____; return______;}friendostream&operator

<<(ostream&o,constPoint&p);ostream&operator<<(ostream&o,constPoint&p)o<<"("<<p.x<<","<<p.y<<")"

<<endl;o運算符重載—作業(yè)三3寫一個二維數(shù)組類Array2,使得下面程序的輸出結(jié)果是:0,1,2,3,4,5,6,7,8,9,10,11next0,1,2,3,4,5,6,7,8,9,10,11運算符重載—作業(yè)三usingstd::cout;usingstd::endl;intmain(){Array2a(3,4);inti,j;for(i=0;i<3;i++)for(j=0;j<4;j++) a[i][j]=i*4+j;for(i=0;i<3;i++){for(j=0;j<4;j++){ cout<<a(i,j)<<","; }cout<<endl;}cout<<"next"<<endl;Array2b;b=a;for(i=0;i<3;i++){for(j=0;j<4;j++){ cout<<b[i][j]<<","; }cout<<endl;}return0;}運算符重載—作業(yè)三有哪些操作?內(nèi)部如何實現(xiàn)?運算符重載—作業(yè)三注:重載的實際上是第二維的[],第一維的[]直接調(diào)用int型一維數(shù)組的定義運算符重載—作業(yè)三第二種解法:4程序輸出結(jié)果如下,寫一個HugeInt類3)100004)100005)100016)10006運算符重載—作業(yè)三有多少人沒有把代碼編譯運行就提交了?我是編譯器?voidmain(){ CHugeInta CHugeIntd(9999);+111112; CHugeInttemp2=111112+ cout<<"1)"<<temp<<endl; cout<<"2)"<<temp2<<endl; cout<<"3)"<<++d<<endl;

cout<<"4)"<<d++<<endl; cout<<"5)"<<d<<endl; d+=5; cout<<"6)"<<d<<endl; cout<<"7)"<<d+temp;}運算符重載—作業(yè)三Again:標(biāo)準(zhǔn)答案只是參考,同樣存在問題1寫一個Mystring類,使得程序輸出結(jié)果如下:

1.abcd-efgh-abcd-

2.abcd-

3.

4.abcd-efgh-

5.efgh-

6.c

7.abcd-

8.ijAl-

9.ijAl-mnop

10.qrst-abcd-

11.abcd-qrst-abcd-uvwxyz

about

big

me

take

abcd

qrst-abcd-繼承和多態(tài)—作業(yè)四#include<iostream>#include<cstring>usingnamespacestd;classMyString{public:char*p;MyString()//構(gòu)造函數(shù)

{p=NULL;}MyString(char*t)//構(gòu)造函數(shù){p=newchar[strlen(t)+1];strcpy(p,t);}MyString(constMyString&s)//復(fù)制構(gòu)造函數(shù){p=newchar[strlen(s.p)+1];strcpy(p,s.p);}Mystring類(1)繼承和多態(tài)—作業(yè)四~MyString()//析構(gòu)函數(shù){if(p)delete[]p;}MyStringoperator+(constMyString&s)//+號重載,這里表示//兩個MyString類型相加的情況{char*q;q=newchar[strlen(p)+strlen(s.p)+1];strcpy(q,p);strcat(q,s.p);MyStringtemp(q);delete[]q;returntemp;}Mystring類(2)繼承和多態(tài)—作業(yè)四

MyStringoperator+(constchar*s)//+號重載,這里表示//MyString類型+字符串的情形

{char*q;q=newchar[strlen(p)+strlen(s)+1];strcpy(q,p);strcat(q,s);MyStringtemp(q);delete[]q;returntemp;}MyString&operator=(constMyString&s)//賦值號重載

{if(p!=NULL){delete[]p;}p=newchar[strlen(s.p)+1];strcpy(p,s.p);return*this;}0Mystring類(3)繼承和多態(tài)—作業(yè)四char&operator[](intn)//[]號重載

{returnp[n];}MyString&operator+=(char*s)//+=號重載

{char*q;q=newchar[strlen(p)+1];strcpy(q,p);if(p!=NULL){delete[]p;}p=newchar[strlen(p)+strlen(s)+1];strcpy(p,q);strcat(p,s);delete[]q;return*this;}

Mystring類(4)繼承和多態(tài)—作業(yè)四MyStringoperator()(inti,intn){//()重載 char*q;q=newchar[n+1];strncpy(q,p+i,n);q[n]='\0';MyStringtemp(q);delete[]q;returntemp;}};ostream&operator<<(ostream&o,constMyString&s)//<<號重載{o<<s.p;returno;}MyStringoperator+(char*s,constMyString&t)//+號重載,這里是字符串+MyString的情形{charq[100];strcpy(q,s);strcat(q,t.p);returnMyString(q);}Mystring類(5)繼承和多態(tài)—作業(yè)四//<,==,>號的重載intoperator<(constMyString&s1,constMyString&s2){if(strcmp(s1.p,s2.p)<0){return1;}else{return0;}}intoperator==(constMyString&s1,constMyString&s2){if(!strcmp(s1.p,s2.p)){return1;}else{return0;}}intoperator>(constMyString&s1,constMyString&s2){if(strcmp(s1.p,s2.p)>0){return1;}else{return0;}}Mystring類(6)繼承和多態(tài)—作業(yè)四2從string類派生的寫法classMyString:publicstring{public: MyString():string(){} MyString(constchar*s):string(s){} MyString(conststring&s):string(s){} MyStringoperator()(ints,intl) { returnthis->substr(s,l); }};Mystring類(7)繼承和多態(tài)—作業(yè)四作業(yè)六:魔獸世界之二兩軍的司令部都會制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號、生命值這兩種屬性。

有的武士可以擁有武器。武器有三種,sword,bomb,和arrow,編號分別為0,1,2。不同的武士有不同的特點。dragon可以擁有一件武器。編號為n的dragon降生時即獲得編號為n%3的武器。dragon還有“士氣”這個屬性,是個浮點數(shù),其值為它降生后其司令部剩余生命元的數(shù)量除以造dragon所需的生命元數(shù)量。ninjia可以擁有兩件武器。編號為n的ninjia降生時即獲得編號為n%3和(n+1)%3的武器。iceman有一件武器。編號為n的iceman降生時即獲得編號為n%3的武器。lion有“忠誠度”這個屬性,其值等于它降生后其司令部剩余生命元的數(shù)目。wolf沒特點。請注意,在以后的題目里,武士的士氣,生命值,忠誠度在其生存期間都可能發(fā)生變化,都有作用,武士手中的武器隨著使用攻擊力也會發(fā)生變化。作業(yè)六:魔獸世界之二作業(yè)六:魔獸世界之二問題沒使用類把類當(dāng)全局變量,只用來保存數(shù)據(jù)類設(shè)計得不好,結(jié)構(gòu)層次不清晰只有很少幾位同學(xué)的作業(yè)達(dá)到要求希望找點時間對照參考答案多思考1寫出下面程序的運行結(jié)果classB{private:intnBVal;public:voidPrint(){cout<<"nBVal="<<nBVal <<endl;}voidFun(){cout<<"B::Fun"<<endl;}B(intn){ nBVal=n;}};classD:publicB{private:intnDVal;public:voidPrint(){B::Print();cout<<"nDVal="<<nDVal <<endl;}D(intn):B(3*n){nDVal=n;}voidFun(){cout<<"D::Fun"<<endl;}};繼承和多態(tài)—作業(yè)六main(){B*pb; D*pd;Dd(4); d.Fun();pb=newB(2); pd=newD(8);pb->Fun();pd->Fun();pb->Print();pd->Print();pb=&d;pb->Fun();pb->Print();}D::FunB::FunD::FunnBVal=2nBVal=24nDVal=8B::FunnBVal=12繼承和多態(tài)—作業(yè)六2寫出下面程序的運行結(jié)果classA{public: A(){} virtualvoidfunc() {cout<<"A::func"<<endl;} ~A(){} virtualvoidfund() {cout<<"A::fund"<<endl;}};classB:publicA{public: B(){func();} voidfun(){func();} ~B(){fund();}};classC:publicB{public: C(){} voidfunc() {cout<<"C::func"<<endl;} ~C(){fund(); } voidfund() {cout<<"C::fund"<<endl;}};main(){ Cc;}繼承和多態(tài)—作業(yè)六A::funcC::fundA::fund3程序輸出

溫馨提示

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

最新文檔

評論

0/150

提交評論