C++程序設(shè)計案例教程課后習(xí)題答案1-13章 北郵(高職)_第1頁
C++程序設(shè)計案例教程課后習(xí)題答案1-13章 北郵(高職)_第2頁
C++程序設(shè)計案例教程課后習(xí)題答案1-13章 北郵(高職)_第3頁
C++程序設(shè)計案例教程課后習(xí)題答案1-13章 北郵(高職)_第4頁
C++程序設(shè)計案例教程課后習(xí)題答案1-13章 北郵(高職)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++程序設(shè)計案例教程課后習(xí)題答案1-13章北郵第1章C++語言基礎(chǔ)一、選擇題1.D2,C3.B4.B5.B二、填空題1.特殊符號2.注釋3.大括號4?分號5.cpp第2章數(shù)據(jù)類型、運算符和表達式一、選擇題D2.C3.B4.A5.A6.C7.B8.A9.D10.C11.C二、填空題.整型2.8103.double4.213000000000010010017.18.e三、編程題.從鍵盤輸入某個字母的ASCII碼,如:97(字母a),98(字母b),65(字母A)等,在屏幕上輸出給字母。#incIude<iostream.h>intmain(intargc,char*argv[])

二、填空題.類型、數(shù)量、下標運算符、下標、索引、常變量.必須要轉(zhuǎn)化為一維方式、按行方式、右、越快、a數(shù)組的首地址、(i*n+j)*u.地址、NULL、已經(jīng)分配了內(nèi)存的變量的地址、變量的地址、直接訪問、間接訪問三、寫出下列程序運行結(jié)果1.101,1012.sum=3003.C++ProgrammingDatastructureEngIishInternetMathematicsU!U!MathematicsU!U!U!、簡單題.解釋運算符“鏟和“&”的作用,運算符”和的作用。U!、簡單題答:在應(yīng)用指針變量時,“守是間接引用(dereference)運算符,作用于一個指針類型的變量,訪問該指針所指向的內(nèi)存數(shù)據(jù)。因結(jié)果是內(nèi)存中可尋址的數(shù)據(jù)。是取地址運算符,作用于內(nèi)存中一個可尋址的數(shù)據(jù)(如:變量,對象和數(shù)組元素等等),操作的結(jié)果是獲得該數(shù)據(jù)的地址。運算符“.”和“->”是成員訪問運算符(MemberAccessOprator)o在對象或結(jié)構(gòu)外部去訪問公有的數(shù)據(jù)成員或函數(shù)成員時,是在對象名后加(點操作符),再加成員函數(shù)名或函數(shù)名就可以了。但是這些成員必須是公有的成員,只有公有成員才能在對象的外面對它進行訪問。當(dāng)用指向?qū)ο蠛徒Y(jié)構(gòu)變量的指針訪問其公有成員時,則只要在指針變量名后加(箭頭操作符),再加公有成員名就可以了。.設(shè)a為數(shù)組名,那么a++是否合法?為什么?答:非法。因為a是指針常量。.指針作為函數(shù)的參數(shù)時,它傳遞的是什么?實參要用什么?而使用引用時實參要用什么?何時只能用指針而不能用引用?答:指針作為函數(shù)的參數(shù)時,它傳遞的是地址,是指針所指向的變量或?qū)ο蟮膬?nèi)存首地址,在物理上講我們傳的是指針的值,與傳其它變量是沒有差異的,函數(shù)獲得的是另一個變量的地址,在邏輯上講我們是把另一個變量的地址傳過去了,可以看作傳地址。實參要用變量或?qū)ο蟮牡刂?。而使用引用時實參要用變量或?qū)ο蟊旧怼崊閿?shù)組時,只能用指針而不能用引用,因為數(shù)組的引用不存在。五、編程題.打印楊輝三角形(10行)。#incIude<iostream.h>intmain(intargc,char*argv[])(constintn=10;inta[n][n];inti,j;for(i=0;i<n;i++)(for(j=0;j<=i;j++)(if(j-0||j-i)(a[i][j]=1;)eIsea[i][j]=a[i-1][j-1]+a[i-1][j];cout?a[i][j]?"\t";)cout?"\n\n";)return0;).寫一個函數(shù),將一個3階方陣轉(zhuǎn)置。#incIude<iostream.h>intarray[3][3];inti,j,t;for(i=0;i<3;i++)for(j=1+i;j<3;j++)It二array[i][j];array[i][j]=array[j][i];array[j][i]=t;)1intmain(intargc,char*argv[])(inti,j;cout<<"請輸入矩陣中各元素的值:"?endI;for(i=0;i<3;i++)for(j=0;j<3;j++)cin?array[i][j];cout<<"矩陣轉(zhuǎn)置前:"<<endl;for(i=0;i<3;i++)(for(j=0;j<3;j++)cout?array[i][j]?"cout?endI;convert(array);cout?”矩陣轉(zhuǎn)置后:"Gendl;for(i=0;i<3;i++)(for(j=0;j<3;j++)cout?array[i][j]?"cout?endI;1return0;)3.使用指針編寫函數(shù)strcat(),實現(xiàn)兩個字符串的首尾連接(將字符串str2接到st門的后面,st門最后面的''0'被取消)。#incIude<iostream.h>char*strcat(char*s,constchar*t)(char*st=s;while(*s)s++;while(*s++=*t++);returnst;1intmain(intargc,char*argv[])chars1[15]=HHelIo”,s2[15]=uWorId";cout?strcat(s1,s2)?endI;return0;)第6章非基本數(shù)據(jù)類型一、選擇題C2.C3.D4.A5.D二、寫出下面程序的運行結(jié)果zhangsan372493三、編程題.定義一個表示日期的結(jié)構(gòu)體變量(包括年月日),寫一個函數(shù),返回值為某天是當(dāng)年的第幾天。#include<iostream.h>structdate〃定義結(jié)構(gòu)體類型(intyear;intmonth;intday;1;inti,count,daysofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}:intmain(intargc,char*argv[])(structdated;〃定義結(jié)構(gòu)體變量intdays=0;cout<<"請輸入日期(年月日):"《endl;cin?d.year?d.month?d.day;count二d.day;〃把dt.d計入總天數(shù)for(i=0;i<d.month;i++)count+=daysofmonth[i];〃把輸入月份前面的每月的天數(shù)累計入總數(shù)f(d.month>2&&(d.year%4==0&&d.year%100!=0||d.year%400==0))count+=1;〃如果是閏年,則要把3月份和3月份以后的總天數(shù)加1cout<<"這一日是這一年的第"<<count<<"日"<<endI;return0;1.定義一種表示學(xué)生的姓名,課程名,期中和期末成績的結(jié)構(gòu),然后輸入一個學(xué)生的期中和期末成績,計算平均成績并輸出。#incIude<iostream.h>structstudentchar*name;char*coursename;floatqzcj;fIoatqmcj;}stu={"LiPing",“語文”,80,85};intmain(intargc,char*argv[])(floatavgScore;avgScore=(stu.qzcj+stu.qmcj)/2;cout?stu.coursenameV〈”平均成績?yōu)椋?<<avgScore〈〈endI;return0;)第7章類和對象一、選擇題A2.B3.C4.A5.A6.B7.C8.D9.A10.B11.D12.B二、程序題

4.4.4.數(shù)數(shù)數(shù)數(shù)2函函函函01構(gòu)構(gòu)構(gòu)構(gòu)/2析析析析104.數(shù)數(shù)數(shù)數(shù)2函函函函01構(gòu)構(gòu)構(gòu)構(gòu)/2析析析析10用用用用1/tocontinue1.23.45,6Pressanykeytocontinue.構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用是什么?什么時候需要自己定義構(gòu)造函數(shù)和析構(gòu)函數(shù)?答:構(gòu)造函數(shù)是對象建立時,由系統(tǒng)調(diào)用的特殊的成員函數(shù)。它的作用是實現(xiàn)數(shù)據(jù)成員的初始化。析構(gòu)函數(shù)也是一個特殊的成員函數(shù),它的作用正好與構(gòu)造函數(shù)相反,旨在釋放對象所占空間的資源。類中可以定義多個構(gòu)造函數(shù),實現(xiàn)構(gòu)造函數(shù)重載,以適應(yīng)不同對象對數(shù)據(jù)成員初始化的不同要求。構(gòu)造函數(shù)可以不帶參數(shù),作為默認構(gòu)造函數(shù),也可以根據(jù)數(shù)據(jù)成員初始化情況,建立帶參構(gòu)造函數(shù)。類定義中析構(gòu)函數(shù)只有一個,且不帶參數(shù)。當(dāng)對象所在的函數(shù)或程序結(jié)束時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù),釋放對象所占空間。.靜態(tài)成員函數(shù)的主要作用是什么?答:在類中定義函數(shù)時,如果函數(shù)定義行前有關(guān)鍵字static,那么這個函數(shù)就是靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)主要用于處理靜態(tài)數(shù)據(jù)成員。.定義指向?qū)ο蟪蓡T函數(shù)的指針變量的方法和定義指向普通函數(shù)的指針變量方法的不同處?答:與普通指向函數(shù)的指針變量不同,定義指向?qū)ο蟪蓡T函數(shù)的指針變量時,指針變量名前需加上類名;初始化指針變量名時,成員函數(shù)名前面需加上類名,即函數(shù)類型(類名::*指針變量名)(參數(shù)表);//定義指針變指針變量名二&類名::成員函數(shù)名;〃初始化指針變量(對象名.*指針變量名)();〃調(diào)用指針變量所指的對象成員函數(shù).分析友元函數(shù)的利弊。答:如果在類之外定義的一個函數(shù),這個函數(shù)可以是不屬于任何類的非成員函數(shù),也可以是其他類的成員函數(shù),在類體中用friend對其進行聲明,此函數(shù)就稱為本類的友元函數(shù)。友元函數(shù)可以訪問這個類中的私有成員,雖然方便,但它的存在charc;cout<<"請輸入ASCII碼值:"。endI;cin?i;〃輸入ASCII碼c二i;cout?c?endI;//輸出對應(yīng)字符return0;12.編寫一個程序,將“China”譯成密碼。編碼的規(guī)律:用原來的字母后面第4個字母代替原來的字母。#incIude<iostream.h>intmain(intargc,char*argv[])(charc1='C',c2二'h',c3二'i',c4二'n',c5二'a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;cout?c1?c2?c3<<c4?c5?endI;return0;也對數(shù)據(jù)成員的安全性產(chǎn)生潛在的威脅。.定義一個類Point。要求如下所述:(1)構(gòu)造函數(shù)初始化類Point類的對象;(2)定義函數(shù)Distance,計算平面上兩點之間的距離。#incIude<iostream>#incIude<math.h>usingnamespacestd;cIassPoint(private:doubIex1,y1,x2,y2;pubIic:Point():x1(0),y1(0),x2(0),y2(0){}Point(inta1,intb1,inta2,intb2):x1(a1),y1(b1),x2(a2),y2(b2)1)doubIeDistance()t1=pow(x2-x1,2);t2=pow(y2-y1,2);returnsqrt(t1+t2);));voidmain()(Pointp(1,2,4,2);cout?HThedistanceisH?p.Distance()?endI;)2.建立一個對象數(shù)組,內(nèi)放5個人的數(shù)據(jù)(ID號、姓名),設(shè)立一個函數(shù)find,用指向?qū)ο蟮闹羔樧龊瘮?shù)參數(shù),在find函數(shù)中按給定的ID號輸出其姓名。#incIude<iostream>#incIude<string.h>usingnamespacestd;cIassPerson(pubIic:ntid;charname[10];

publie:Person(inti,charn[10]):id(i)(strepy(name,n);)booIfind(intid_find)(if(id_find二二id)(,,?name?endI;cout?"id:"?id?",name:returntrue;,,?name?endI;);intmain()(intid_find;Personp[5]={Person(1,"zhao"),Person(2,"qian11),Person(3,"sun"),Person(4,"Ii"),Person(5,"zhou")};Person*p_find;cout?"pIeaseinputtheid:"?endI;cin?id_find;for(inti=0;i<5;i++)(p_find=&p[i];if(p_find->find(id_find))break;)return0;)3.有一信息管理系統(tǒng),要求檢查每個登錄系統(tǒng)的用戶(User)的用戶名和口令,系統(tǒng)檢查合格以后方可登錄系統(tǒng)。用C++程序予以描述。#incIude<iostream>#incIude<string.h>usingnamespacestd;cIassPersonprivate:charuserName[10];charpassword[6];pubIic:Person(charu[10],charp[6])(strcpy(userName,u);strcpy(password,p);)booIfind(charname[10],charpass[6])(if(strcmp(userName,name)!=0)(cout?Hnotexist"?endI;returnfalse;)eIseif(strcmp(password,pass)!=0)cout?ninvaIidpasswordH?endI;returnfalse;)eIse(cout?"valid!!!"?endI;returntrue;)1);intmain()(Persons[5]=[Person("zhao","zhao"),Person("qian","qian"),Person("sun","sun"),Person("Ii","Ii"),Person("zhou","zhou"));charname[10],pass[6];cout?npIeaseinputusername:n?endI;cin?name;cout?npIeaseinputpassword:n?endI;cin?pass;for(inti=0;i<5;i++)(if(s[i].find(name,pass))break;))4,定義一個類Student記錄學(xué)生計算機課程的成績。要求使用靜態(tài)成員變量或靜態(tài)成員函數(shù)計算全班計算機課程的總成績和平均成績。#incIude<iostream>#incIude<string.h>usingnamespacestd;cIassStudentpublie:ntid;charname[10];intscore;staticinttotaIScore;Student(inti,charn[10],ints):id(i),score(s)lstrepy(name,n);1staticvoiddispIay()(cout?HtotaIScore:H?totaIScore?endI;cout?HaveScore:n?totaIScore/5?endI;)staticvoidcompute(Students)totaIScore+=s.score;);intStudent::totaIScore=0;intmain0(Students[5]={Student(1,"zhao",90),Student(2,"qian",82),Student(3,sun",75),Student(4,"Ii",89),Student(5,"zhou",62)};for(inti=0;i<5;i++)(s[i].compute(s[i]);)Student::dispIay();return0;第8章類的繼承與派生一'選擇題D2.A3.A4.B5.B6.B二、程序題(略)三、簡答題.派生類對基類的繼承方式有哪些?在派生類中,成員有幾種不同的訪問屬性?答:派生類對基類的繼承方式有三種:public、protectedxprivate0成員也有三種訪問屬性:public、protectedxprivate。.多級派生的訪問屬性如何確定?答:多級派生的訪問屬性確定的原則與單層派生一致。.在執(zhí)行派生類時,如何調(diào)用基類的構(gòu)造函數(shù)?答:在派生類構(gòu)造函數(shù)的初始化列表中描述。.對數(shù)據(jù)成員初始化時,如何對子對象初始化?答:在派生類構(gòu)造函數(shù)的初始化列表中,寫上子對象名(實際參數(shù))。.程序中有多重繼承時,系統(tǒng)如何調(diào)用析構(gòu)函數(shù)?答:按照調(diào)用構(gòu)造函數(shù)相反的順序調(diào)用析構(gòu)函數(shù)。.舉例說明多重繼承引起的二義性,如何解決此問題?多重繼承指一個類從多個基類中派生而來。如果一個派生類有多個直接基類,而這些直接基類又都派生于同一個基類,則在最終派生類中會保留間接基類中的多份數(shù)據(jù)成員,從而導(dǎo)致在派生類中訪問這些數(shù)據(jù)成員時,可能產(chǎn)生錯誤,即二義性的錯誤。C++提供了虛基類(virtualbaseclass)的方法來解決這個問題,使得派生類在獲得間接基類的數(shù)據(jù)成員時只保留一份拷貝。.談?wù)勌摶惖淖饔?。在進行多重繼承時,為保證最終派生類中只繼承一次,通常聲明該基類為所有直接派生類的虛基類。如果虛基類中定義了帶參數(shù)的構(gòu)造函數(shù),則在其所有的派生類(直接派生類或者間接派生類)中,必須通過這些派生類的構(gòu)造函數(shù)對虛基類構(gòu)造函數(shù)調(diào)用。但是,其實只有最后的派生類成功地調(diào)用了虛基類的構(gòu)造函數(shù),并對虛基類的數(shù)據(jù)成員進行了初始化,其余派生類中對虛基類的調(diào)用只是形式,以形成派生類構(gòu)造函數(shù)聲明格式的一致性,而沒有真正調(diào)用虛基類的構(gòu)造函第3章程序控制語句一、選擇題1.C2.C3.D4.A5.B6.A二、填空題do-whiIe2.順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)3.64.break5.47106.16三、編程題.求100^200之間不能被3整除也不能被7整除的數(shù)。#incIude<iostream.h>intmain(intargc,char*argv[])(nti;for(i=100;i<=200;i++)(if(i%3==01|i%7==0)continue;eIsecout?i?endI;)return0;).從鍵盤輸入一個整數(shù),判斷該數(shù)是否為回文數(shù)。所謂的回文數(shù)。這就保證了虛基類的數(shù)據(jù)成員不會被多次初始化。U!、編程題U!、編程題分別聲明Teacher類和Cadre類,采用多重繼承方式由這兩個類派生出新類TC類。要求:’(1)在兩個基類中都包含姓名、年齡、性別、地址、電話等數(shù)據(jù)成員。(2)在Teacher類中還包含數(shù)據(jù)成員titIe,在Cadre類中還包含數(shù)據(jù)成員post。在TC類中還包含wages。(3)對兩個基類中的姓名、年齡、性別、地址、電話等數(shù)據(jù)成員用相同的名字,在引用這些數(shù)據(jù)成員時,指定作用域。(4)在派生類TC的成員函數(shù)show中調(diào)用Teacher類中的display函數(shù),輸出姓名、年齡、性別、職稱、地址、電話,然后再輸出職務(wù)與工資。#incIude<iostream>#incIude<string>usingnamespacestd;cIassTeacherprivate:charname[10];ntage;chartitle[20];charsex[10];charaddress[100];charteI[20];pubIic:Teacher(charnam[],intag,chartit[],charse[],charadd[],chart[])age=ag;strcpy(sex,se);strcpy(name,nam);strcpy(ti11e,tit);strcpy(address,add);strcpy(teI,t);)voiddispIay()(cout?name?endI?age?endI?sex?endI?address?endI?teI?endI;));cIassCadre(private:charname[10];intage;charpost[20];charsex[10];charaddress[100];charteI[20];pubIic:Cadre(charnam[],intag,charpo[],charse[],charadd[],chart[])(age=ag;strcpy(sex,se);strcpy(name,nam);strcpy(post,po);strcpy(address,add);strcpy(teI,t);)char*pos0returnpost;));cIassTC:pubIicTeacher,pubIicCadre(private:intwage;pubIic:TC(charnam[],intag,charpo[],charcharse[],charadd[],chart口,intw):wage(w),Teacher(nam,ag,tit,se,add,t),Cadre(nam,ag,po,se,add,t){}voidshowk()(Teacher::display0;cout?Cadre::pos()?endI?wage?endI;));main()(TCA("wang",25,"leader","teacher","female","Nanjing",,5000);A.showk();return0;第9章多態(tài)性和虛函數(shù)的使用一、選擇題1.C.2.C3.A4.C5.6.D二、程序題(略)三、簡答題.C++多態(tài)性主要體現(xiàn)在哪兩個方面?答:在C++中,多態(tài)性是指系統(tǒng)調(diào)用同名的函數(shù),實現(xiàn)不同的功能。多態(tài)性包含靜態(tài)多態(tài)性和動態(tài)多態(tài)性。靜態(tài)多態(tài)性體現(xiàn)在編譯時函數(shù)重載或者運算符重載上;展現(xiàn)了同一類中多個同名函數(shù)的處理機制。而動態(tài)多態(tài)性是指程序運行過程中通過虛函數(shù)動態(tài)地確定針對的對象,展現(xiàn)繼承層次結(jié)構(gòu)中同名函數(shù)的處理機制。.比較函數(shù)重載和虛函數(shù)在概念上和使用方式有什么區(qū)別。函數(shù)重載是指函數(shù)名稱相同,但是參數(shù)的個數(shù)或者參數(shù)的數(shù)據(jù)類型不同。因此,系統(tǒng)調(diào)用重載函數(shù)時,會依據(jù)參數(shù)確定調(diào)用哪一個。而在繼承的機制中,基類的成員函數(shù)可能會與派生類新增的成員函數(shù)同名,包括參數(shù)個數(shù)和參數(shù)類型,這種現(xiàn)象不屬于函數(shù)重載。當(dāng)基類的一個成員函數(shù)被聲明為虛函數(shù)后,其派生類中的同名函數(shù)都自動成為虛函數(shù)。派生類可以對虛函數(shù)重新定義。虛函數(shù)實現(xiàn)動態(tài)多態(tài)的問題。.比較抽象類、虛函數(shù)、純虛函數(shù)的概念和使用上的區(qū)別。虛函數(shù)通常在基類中定義,定義可以是空,派生類中可以對虛函數(shù)重寫,也可以不寫。虛函數(shù)起到了接口的默認行為作用。純虛函數(shù)在基類中是沒有定義的,必須在直接或者間接派生類中加以實現(xiàn),它起到了接口的作用。包含了純虛函數(shù)的類,被稱為抽象類。抽象類不能建立對象。.談?wù)勌摶惡吞摵瘮?shù),區(qū)分兩者不同的概念和各自的作用。在繼承機制中,一個派生類繼承多個直接基類,而這些基類又有一個公共的基類,這個公共的基類成員在繼承中可能產(chǎn)生多個拷貝。虛基類的基本原則是在內(nèi)存中只有基類成員的一份拷貝。這樣,通過把基類繼承聲明為虛擬的,就只能繼承基類的一份拷貝,從而消除歧義。用virtual限定符把基類繼承說明為虛擬的。虛函數(shù)指基類中成員函數(shù)聲明為virtual,使它在一個或多個派生類中被重新定義,虛函數(shù)的作用是實現(xiàn)多態(tài)性。虛函數(shù)必須是基類的非靜態(tài)成員函數(shù),其訪問權(quán)限可以protected或publico1.編寫一個程序,聲明抽象基類Shape,由它派生出3個派生類:CirIce,Rectangle,Triangle,用—個函數(shù)printArea分別輸出以上三種的面積,3個圖形的數(shù)據(jù)在定義對象時給定。#include<iostream>usingnamespacestd;cIassShape(pubIic:virtuaIvoidprintArea()=0;);cIassCircle:publicShape(private:intr;pubIic:CircIe(intrr):r(rr){}voidprintArea()(cout?ntheareaofcircle:n?3.14*r*r?endI;);cIassRectangIe:pubIicShapeprivate:intIen,width;pubIic:RectangIe(intI,intw):Ien(I),width(w){}voidprintArea()(cout?"theareaofrectangle:"?Ien*width?endI;)];cIassTriangle:pubIicShape(private:intbase,height;pubIic:Triangle(intb,inth):base(b),height(h){}voidprintArea()

cout?Hcout?Hthecout?Hthecout?Hthecout?Hthecout?Htheareaoftriangle:n?0.5*base*height?endI;));ntmain0(Circlec(2);c.printArea();RectangIer(2,3);r.printArea();Trianglet(2,3);t.printArea();return0;.改寫以上程序,用虛函數(shù)分別計算幾種圖形面積,并求它們之和。要求用基類指針數(shù)組,使它每一個元素指向一個派生類對象。#include<iostream>usingnamespacestd;cIassShapepubIic:virtuaIintcomputeArea()=0;virtuaIvoidprintArea()=0;);cIassCircle:publicShape(private:intr;intcircIeArea;pubIic:Circle(intrr):r(rr){}intcomputeArea0(circIeArea=3.14*r*r;returncircIeArea;)voidprintArea()(cout?Htheareaofcircle:H?circIeArea?endI;));cIassRectangle:pubIicShape(private:intIen,width;intrectangIeArea;pubIic:RectangIe(intI,intw):Ien(I),width(w){}rectangleArea=len*width;returnrectangIeArea;)voidprintArea()(cout?Htheareaofrectangle:H?rectangIeArea?endI;));cIassTriangle:publicShape(private:intbbase,height;inttriangIeArea;pubIic:Triangle(intb,inth):bbase(b),height(h){}intcomputeArea()(triangIeArea=(bbase*height)/2;returntriangIeArea;)voidprintArea()(cout?ntheareaoftriangle:H?triangIeArea?endI;));數(shù)就是從左到右讀與從右向左讀都是一樣的數(shù)。例如7887、23432是回文數(shù)。#incIude<iostream.h>intmain(intargc,char*argv[])(inti,x,r,y=0;cout?!闭堓斎胍粋€整數(shù):”;cin?x;i二x;whiIe(i!=0)(r=i%10;i二i/10;y=y*10+r;)if(y==x)cout?x<<"是回文數(shù)"<<endI;if(y!二x)cout?x<<"不是回文數(shù)"<<endI;return0;)3.編程求1001000之間所有的水仙花數(shù)?!八苫〝?shù)”是指一

Circlec(2);RectangIer(2,3);Trianglet(2,3);Shape*p[3]=[&c,&r,&t};doubIetotalArea=0;for(inti=0;i<3;i++)(totaIArea+=p[i]->computeArea();p[i]->printArea();)cout?ntotaIArea:n?totaIArea?endI;return0;)第10章運算符重載一、選擇題A2.D3.A4.B5.D6.C二、寫出下列程序運行結(jié)果(略)三、簡答題(1)只能重載已有的C++運算符,不可自創(chuàng)新的運算符。⑵重載后運算符的優(yōu)先級和結(jié)合性都不變。⑶重載的功能應(yīng)當(dāng)與原有功能相類似。typeidtypeidtypeidtypeidtypeidtypeidtypeid::.*?:sizeoftypeid3.&&四、編程題#incIude<iostream>cIassMyString{pubIic:MyString()(strLength=0;pStr=newchar[1];*pStr='\0';)MyString(constchar*pString)(strLength=strlen(pString);pStr=newchar[strLength+1];strcpy(pStr,pString);)strLength=n;pStr=newchar[strLength+1];for(unsignedinti=0;i〈strLength;*(pStr+i++)=ch);*(pStr+strLength)='\0';)MyString(intnumber)(charbuffer[20];inttemp=number;if(number<0)number=-number;intlen=0;do(buffer[Ien++]=static_cast<char>(*O'+number%10);number/=10;}whiIe(number>0);if(temp<0)buffer[Ien++]=;buffer[Ien]=1\01;strLength=len;pStr=newchar[strLength+1];strcpy(pStr,buffer);charch=0;for(inti=0,j=Ien-1;i<j;i++,j一)(ch=pStr[i];pStr[i]=pStr[j];pStr[j]=ch;1)MyString(constMyString&rString)(strLength=rString.strLength;pStr=newchar[strLength+1];strcpy(pStr,rString.pStr);)deIete[]pStr;MyString&operator+(constMyString&rStr)const(returnMyString(*this)+=rStr;));2.#incIude<iostream>cIassMyString{pubIic:MyString()(strLength=0;pStr=newchar[1];*pStr='\0';)MyString(constchar*pString)strLength=strIen(pString);pStr=newchar[strLength+1];strcpy(pStr,pString);)MyString(charch,intn)(strLength=n;pStr=newchar[strLength+1];for(unsignedinti=0;《strLength;*(pStr+i++)=ch);*(pStr+strLength)=、0';)MyString(intnumber)(charbuffer[20];inttemp=number;if(number<0)number=-number;intlen=0;do(buffer[Ien++]=staticcast<char>(!01+number%10number/=10;}whiIe(number>0);if(temp<0)buffer[Ien++]=,-1;buffer[Ien]='\0';strLength=Ien;pStr=newchar[strLength+1];strcpy(pStr,buffer);charch=0;for(inti=0,j=Ien-1;i<j;i++,j--)(ch=pStr[i];pStr[i]=pStr[j];pStr[j]=ch;1)MyString(constMyString&rString)strLength=rString.strLength;pStr=newchar[strLength+1];strcpy(pStr,rString.pStr);)~MyString0(delete[]pStr;)MyString&Operator=(constMyString&rStr)const(if(this=&rStr)return*this;delete[]str;str=newchar[strIen(rStr.str)+1];strcpy(str,rStr.str);return*this;));第11章輸入/輸出流一、選擇題B2.B3.A4.C5.A二、填空題.cinxcout\cerr\cIogiostream.hiomanip.hendIsetw0hexscientific、fixedcout?endI數(shù)據(jù)從一個位置流向另一個位置三、寫出下面程序運行結(jié)果2531#0.12346f***12345168.612468U!U!12468U!U!U!、編程題U!1.編程統(tǒng)計從鍵盤上輸入每一行字符的個數(shù),從中選出最長的行的字符個數(shù),統(tǒng)計共輸入多少行?#include<iostream.h>constintSIZE=80;intmain(intargc,char*argv[])(introw=0,lmax=-1;charbuf[SIZE];cout<<”請輸入字符串:\n”;while(cin.getIine(buf,SIZE))(intcount=cin.gcount();row++;if(count>lmax)lmax=count;cout?"第"<<row?"行:\t"?"字符數(shù):"?count?endI;)cout?endI;cout<<"總行數(shù):M?row?endI;cout<<”最長的行字符個數(shù):"?lmax?endI;個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個“水仙花數(shù)”,因為⑸土+^+黑#incIude<iostream.h>intmain(intargc,char*argv[])(inti=1,j=1,k=1,x=100;cout?-100"1000之間的水仙花數(shù)有:”;for(x=100;x<1000;x++)(i=x%10;j=x/10%10;k=x/100;if(x=i*i*i+j*j*j+k*k*k)cout?x?"";)cout?endI;return0;)4.將100元換成10元、5元和1元的組合,共有多少種組合方法?要求每種組合方法中都有10元、5元和1元。#incIude<iostream.h>return0;2.#include<iostream.h>#include<fstream.h>voidsavefiIe(char*fiIename,intn);〃輸出到文件voidreadfiIe(char*fiIename,intn);〃讀入文件voidsort(inta[],intn);〃排序intmain(intargc,char*argv[])(savefiIe("D:\\f1.dat",5);savefiIe("D:\\f2.dat",5);ofstreamfout("D:\\f2.dat",ios::out|ios::app);//定義輸出流對象fout并與f2.dat關(guān)聯(lián)if(!fout)(cerr?"outputfilefail!"?endI;)ifstreamfin("D:\\f1.dat",ios::in);//定義輸入流對象fin,并與f1.dat關(guān)聯(lián)if(!fin)cerr?"readfilefail!"?endI;inta[5];for(inti=0;i<5;i++)//讀入f1.dat文件,輸出到f2.dat文件原有數(shù)據(jù)的后面(fin?a[i];fout?a[i]?")cout?endI;fin.close();〃關(guān)閉輸入流對象fout.closeO;〃關(guān)閉輸出流對象readfile("D:\\f2.dat",10);〃讀入f2.dat文件并排序輸出到屏幕return0;1〃定義輸出文件函數(shù)voidsavefiIe(char*fiIename,intn)(ofstreamfout(fiIename,ios::out);if(!fout)cerr?"outputfilefail!"?endI;inta[5];for(inti=0;i<n;i++)(cin?a[i];fout?a[i]?"1fout.cIose();1〃定義讀文件函數(shù),并在函數(shù)調(diào)用排序函數(shù)進行排序voidreadfiIe(char*fiIename,intn)(ifstreamfin(fiIename,ios::in);if(!fin)(cerr?"readfiIefail!"?endI;)inta[10];for(inti=0;i<n;i++)fin?a[i];

cout?a[i]cout?a[i]?cout?a[i]?cout?a[i]?cout?a[i]?IIcout?cout?a[i]?II)〃定義排序函數(shù)voidsort(inta[],intn)(inttemp;for(intj=0;j<n;j++)for(inti=0;i<n-j;i++)if(a[i]>a[i+1])(temp=a[i];a[i]=a[i+1];a[i+1]=temp;)for(inti=0;i<n;i++)cout?a[i]?Hcout?endI;第12章模板一、選擇題1.D2.C3.C4.C5.B6.A二、寫出程序運行結(jié)果n=Bn=3三、編程題1.編寫一個函數(shù)模板,從一維數(shù)組a[n]中查找值為key的元素,若查找成功則返回真,否則返回假。#include<iostream.h>tempIate<cIassT>booIfun(Ta[],intn,Tkey)(for(inti=0;i<n;i++)(if(a[i]—key)returntrue;returnfalse;))2.編寫一個類模板,對數(shù)組元素進行排序。#incIude<iostream.h>tempIate<cIassT>cIassArrayTempIate(private:T*arr;intn;pubIic:ArrayTempIate(T*a,inti)(arr

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論