版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
..完美.格式.編輯專業(yè).資料.整理第一章C++基礎(chǔ)知識習(xí)題1第一章C++基礎(chǔ)知識習(xí)題1.1判斷下列標(biāo)識符的合法性。sinbook5arry_nameExample2.1main$1class_cppa3x*ymyname答:合法的:sinbook_namemainclass_cppa3非法的:5arryExample2.1$1x*ymyname1.2假定有下列變量:inta=3,b=5,c=0;floatx=2.5,y=8.2,z=1.4;charch1=’a’,ch2=’5’,ch3=’0’,ch4;求下列表達(dá)式的值,以及運(yùn)算后表達(dá)式所涉及的各變量的值。x+<int>y%ax=z*b++,b=b*x,b++ch4=ch3-ch2+ch1int<y/z>+<int>y/<int>z!<a>b>&&c&&<x*=y>&&b++ch3||<b+=a*c>||c++z=<a<<2>/<b>>1>答:x+<int>y%a表達(dá)式值為:4.5,運(yùn)算后x、y、a的值不變,仍分別為2.5、8.2、3。提示:運(yùn)算時取出y變量的數(shù)值強(qiáng)制轉(zhuǎn)化為整型數(shù)放入寄存器參加運(yùn)算,但內(nèi)存中y本身的數(shù)值不變化。只有賦值運(yùn)算和自增、自減運(yùn)算才改變變量本身的值x=z*b++,b=b*x,b++表達(dá)式值為:42,運(yùn)算后x為7.0,b為43。提示:逗號表達(dá)式,依次運(yùn)算,表達(dá)式的值是最后一次運(yùn)算的值。后++是變量先參加運(yùn)算然后變量自身加1,所以第1步x等于1.4*5,即7.0,然后b增為6;第2步b賦值為42;第3步,表達(dá)式的值是上一步后b的值42,但隨后b的值自增1,成為43。ch4=ch3-ch2+ch1表達(dá)式值為:’\\’,字符外斜杠。運(yùn)算后ch1、ch2、ch3值不變。提示:字符型的變量實質(zhì)是范圍很小的整型量。int<y/z>+<int>y/<int>z表達(dá)式值為:13。y和z自身的值不變。提示:int<y/z>是完成實數(shù)除法后,商強(qiáng)制轉(zhuǎn)化為整型,<int>y/<int>z則是數(shù)值先轉(zhuǎn)換,完成的是整除。!<a>b>&&c&&<x*=y>&&b++表達(dá)式值為:0。運(yùn)算后x仍為2.5,b仍為5提示:只要出現(xiàn)一個false右邊的不再做,因為c為0,即false,所以其右的所有運(yùn)算不再做。ch3||<b+=a*c>||c++表達(dá)式值為:1。運(yùn)算后b為5,c為0,均不變。提示:只要出現(xiàn)一個true,右邊不再做。ch3的值為48。z=<a<<2>/<b>>1>表達(dá)式值為:6。運(yùn)算后a與b的值不變?nèi)詾?和5。提示:a的數(shù)值為<00000011>2,左移2位為<00001100>2即12,相當(dāng)整數(shù)2兩次,而b的數(shù)值為<00000101>2,右移1位為<00000010>2,即2,相當(dāng)于整除2。1.3判斷下列哪些是常量,哪些是變量。"China"constintn=10;intm=5;'a'charch='a'intarray[5]={1,2,3,4,5};chars[]="Hello";答:"China"文字常量constintn=10;常變量intm=5;變量'a'文字常量1第一章C++基礎(chǔ)知識習(xí)題2charch='a'變量intarray[5]={1,2,3,4,5};變量chars[]="Hello";變量1.4將下列算式或敘述用C++表達(dá)式描述。<1>22><arcsin2cx<2><x+y>/<<x-y>*ay><3>位于原點(diǎn)為圓心,a,b為半徑的圓環(huán)中的點(diǎn)坐標(biāo)。<4>。cba<5>并且字符ch不為'\0'。20k答:pi/2+sqrt<asin<x>*asin<x>+c*c><x+y>/<<x-y>*pow<a,y>><<x*x+y*y>>=a*a>&&<<x*x+y*y><=b*b><a!=b>&&<a!=c>&&<b!=c><k<=20>&&<ch!='\0'>1.6設(shè)有語句:inta,b;floatx,y;charch1,ch2,ch3;cin>>a>>b>>x>>y>>ch1;ch2=cin.get<>;cin>>ch3;若從鍵盤輸入:321.87abc執(zhí)行后各變量取值如何?注意abc三字符兩兩間有空格。答:a是3,b是2,x是1.8,y是7,ch1是’a’,ch2是空格,ch3是’b’。1.7設(shè)有語句:inta,b,c,d;cin>>oct>>a>>b>>hex>>c>>dec>>d;若從鍵盤輸入:23232323執(zhí)行后各變量的值用十進(jìn)制表示各是多少?答:a:19,b:19,c:35,d:231.8對于習(xí)題1.7,若執(zhí)行:cout<<a<<′\t′<<hex<<b<<′\t′<<oct<<c<<endl;顯示結(jié)果是什么?答:190x130432第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題一.基本概念與基礎(chǔ)知識自測題3.1程序閱讀題3.1.1設(shè)有明inta3,b=0;下面的循環(huán)語句執(zhí)行1次,執(zhí)行后a、b值分別為2、〔。while</a5>{if<b-a>25>a++;elseb/a;}解答:本題檢查學(xué)生整除的概念。跟蹤:a3b10b/a33循環(huán)次數(shù)1b-a97410252965…10…20…3…95…15106138516106148417105?!?〔2〔3003.1.2設(shè)有明intnxk,;n下面程序段的功能是備選答案中的〔1,當(dāng)n=0x=0打印結(jié)果是〔2。ncin>>x>>n;k=;do{x/2;k+;}while<k<n>;y=1+x;k=;do{y=y*y;k+;}while<k<n>;cout<<y<endl;備選答案:..A.y=1+x>nnB.y=1+x>2n2nC.y=1+x>n2nD.y=1+x>22n1..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題2..解答:第一個循環(huán)使x成為:x2n〔1B;y成為:1+x2n;第一個循環(huán)使y成為:1+x>2n;2n..考慮整除,x2n〔21連除4次后為零,所以:..3.1.3請看if<nu==1> cout<"Alph";elseif<nu==2> cout<"ata;elseif<nu==3> cout<"aa";elsecout<"Delt";當(dāng)nu的值分別為1、23時,上面序段的輸出分別為〔1、〔2、〔3。解答:檢查條件語句與字符串輸出概念:〔1Alpha〔2Bta〔3aa3.1.4執(zhí)行面程序段后,和k的值分別為、int,k;for<k=1,=0;k<=50;k++>{if<>=10>brak;if<%2==0>{+=5;cotnu;}=3;}解答:注意oniue語的使用初值=1k=0第1次循后=5k=1第2次循環(huán)=2k=2第3次循環(huán)=7k=3第4次循環(huán)=4k=4第5次循環(huán)=9k=5第6次循環(huán)=6k=6第7次循環(huán)=1結(jié)束,k++〔1〔26二.編程與綜合練習(xí)題3.2編程求元二次方程x2b+c0的根包括以下判斷和結(jié)果若輸入a=0給提示;..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題3若Δ>0,輸兩個不等實根;若Δ=0輸出兩個相等實根;若Δ<0,輸出個復(fù)數(shù)根。解:本題以一個絕對值極小的數(shù)作為實數(shù)0。#nldeotemh>#nldeahh>#nldetlbh>vidan{dule,c;duleeax,2;cntduezr=e;//定義一個很小的常數(shù)itsgcout<<"輸入三個系數(shù)a<a!=0>,b,c:"<<endl;cn>>bc;i<asazr>{cout<<"二次項系數(shù)為0,方程根是-c/b";ei<>;}cu<"=<<'t<b"<<''<c"<<nl;dlabb**i<asdt>zr>//絕對值很小的數(shù)即被認(rèn)為是0cout<<"方程有兩個相同實根:";cu<"12"<b<a<ed}ese{i<et>>sg=;esesg=;dlasrfb<et>;x=b<*x=et/*>;i<in{cu<方程有兩個不同實根:";cu<"1<x+2<t<"2"x-2<n;}es{/eacu<方程無實根!有兩個不同復(fù)數(shù)根:";cu<"1<x<"i<2<\'"2"<1"i<x<nl;}}}3.3設(shè)計程將輸入的百分制成績轉(zhuǎn)換為五分制輸出,90以上為5,80~9為4分,70~9分為3分,60~9為2分60分以下為1分。解:10分檔用0進(jìn)整除獲得,轉(zhuǎn)換用開關(guān)語句實行。..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題4#nldeotemh>vidan{itmr,sl; //mark是百分制成績,result是5分制cout<<"請輸入百分制成績:"<<endl;cn>ak;i<ak0>{cout<<"缺考!"<<endl;rtr;}sichmk1>{cse:cse0:rsl=cout<<"輸出五分制成績:"<<result<<endl;bek;csersl=cout<<"輸出五分制成績:"<<result<<endl;bek;cse:rsl=cout<<"輸出五分制成績:"<<result<<endl;bek;cse:rsl=cout<<"輸出五分制成績:"<<result<<endl;bek;cse:ae:ae3ae2cse1cse:rsl=cout<<"輸出五分制成績:"<<result<<endl;bek;dfut:cout<<"輸入錯誤!"<<endl;}}3.4編程打如下圖形:** * ** * * * ** * * * * * ** * ** * ** * *解:難點(diǎn)在三角形左邊的空格的控制,嵌套一個循環(huán)語句完成此任務(wù)。..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題5#nldeotemh>vidan{itij;fr<=;=;+> {frj4i>;->//三角形每行前部的空格cu<" ;frj1j2i1j+>cu<"*;cu<ed}fri1i3i+> ct<" ***n}3.5編程輸下列圖形,中間一行英文字母由輸入得到。AB B BC C C C CD D D D D D DC C C C CB B BA解:分上三角和下三角兩部分分別處理左邊的空格。#nldeotemh>vidan{carn;itij;d{cout<<"輸入一個字母:";cn>n;i<i>9&<n=2>i-3;//小寫改大寫}hl<i6>|i>>itln=-Afr<=;=iei+//上三角frjlnij0j->cu<" //前方空格frj1j2i1j+>cu<''ca<+A;cu<ed}fr<=i;>;->//下三角〔少一行frj0jln-;+cu<" ;frj1j2i1j+>cu<''ca<-+';..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題6cu<ed}}3.6輸入n求1!+2!3!…+n!解:通常求和作為外循環(huán),階乘作為內(nèi)循環(huán)。這里考慮到:n!=n*<n-1>!,利用遞推法運(yùn)算速度大大提高,同時者可合并為一個循環(huán)。本程序考慮了輸入的健壯性。#nldeotemh>#nldetlbh>vidan{itn;duleel=; //result是結(jié)果cn>i<<>{cout<<"輸入錯誤!"<<endl;/rtr;ei<>;}rsl=friti,c=;<;+{jh=; //jch是i的階乘,注意n!=n*<n-1>!這樣可少一層循環(huán)rsl+j}cu<rst<nl;}3.7猴子吃問題猴子摘下若干個桃子第一天吃了桃子的一半多一個以后每天吃了前一天剩下的一半多一個,到第十天吃以前發(fā)現(xiàn)只剩下一個桃子,問猴子共摘了幾個桃子。解:采用遞推法。從最后一天逆推到第一天,9次循環(huán)。#nldeotemh>cntita=0;vidan{itix1//最后一天只有一個fri1ia;+>//從一天前推到九天前x<+>2;cout<<"開始共有桃子"<<x<<"個。\n";}3.8從鍵盤入一組非0整數(shù)以輸入0標(biāo)志束求這組整數(shù)的平均值并統(tǒng)計其中的個數(shù)。解將這組整數(shù)放在整型數(shù)組中一邊輸入一邊求和及統(tǒng)計正數(shù)和負(fù)數(shù)的個數(shù)平均數(shù)由和除以整數(shù)數(shù)量取得。..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題7#nldesra.#nldeotemh>vidan{itse[6,u=,u=,nm,=cout<<"從鍵盤輸入一組非0整數(shù),以輸入標(biāo)志結(jié)束:"<<endl;cn>tm];wiesei!0sm=tm]//求和i<tmi0>nm+//正數(shù)數(shù)量esenm;//負(fù)數(shù)數(shù)量i+;cn>tm];}i<i>o<""edese{cout<<"平均值="<<dbesm<u+nm<nl//平均值習(xí)慣不用整數(shù)cout<<"正數(shù)個數(shù)="<<pnum<<endl;cout<<"負(fù)數(shù)個數(shù)="<<nnum<<endl;}}3.9編程出1~00中滿足除以3余2,除以5余3,除以7余2的整。解:中國古代數(shù)學(xué)問題〔韓信點(diǎn)兵,采用窮舉法。注意三個條件同時成立用&&。#nldeotemh>vidan{iti;fri1i50i+>i<i3=&<%=3&i7=>>cu<i<d;}3.0編求100之內(nèi)所有完全數(shù)。所謂完全數(shù)指的是一個數(shù)恰好等于它的所有因子和。例如61+3,就是一完全數(shù)。解:采用窮舉法。兩重循環(huán),外層是從1到99依次處理內(nèi)層是求該數(shù)的所有因子的和,并判斷是否等于該數(shù)。#nldeotemh>vidan{itias_z; //sum_yz是a的因子和fra1a00a+smy=fri1i;+ifai=>u_z=ifa=uy>cu<a<d;}..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題8}31將10元換成用0元、5元和1元的組合,共有多少種組合方法。解:采用窮舉法??紤]0元最多10張,5元多0張,下是1元。#nldeotemh>vidan{friti,,,on0i=0i>//i是10元張數(shù),j是元張數(shù),k是1元張數(shù)frj0j2;+>{k101*5j;i<>0{cu<i<t<j<\<k<nl;cut+;}}cu<cu<ed}3.2利用正切展開計算π的近似值,要求誤差0-5,公式如下:357arctg<x>≈x?x+x?x+L3573 5 7令x1,可算出π/4的似值。解采用遞推法初看每一項的遞推通式不易寫出但每一項全看作奇數(shù)項而偶數(shù)項全為零則很容易寫出第1項為x第3項為第1乘以x的方除以項序號3乘以-其余類推。同時和的誤差小于最后一項的絕對值。#nlde<sra.#nlde<tduee1-vidan{dule,sm;iti3;cout<<"請輸入弧度值:"<<endl;cn>ax;smx;d{a=**-sm=/i=}hl<a</>ecu<"rg"<<""<u<el;}..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題93.3用迭法求方程210os=0根,誤差限為1-。迭代公式如下:x2?10<xsinx+cosx>x = n n n n..n12xn?10sinxn..解:迭代法也是用循環(huán)語句實現(xiàn),數(shù)學(xué)上#nlde<sra.#nlde<tduee1-vidan{fotx,itn0;cout<<"輸入初始近似值:"<<endl;cn>1;d{x=1;x=x*00<0sn0+o<0><*01snx>//x0是上次算出的結(jié)果,x1用作保存新算出的結(jié)果n+;}hl<fsx-0>>&n=e>;i<>e>cout<<"超出迭代1e5次\n";esecout<<"方程*x+10*cos<x>=0的一個根為:"<<x1<<endl;cout<<"方程誤差為:"<<x1*x1+10*cos<x1><<endl;}3.4兩隊手每隊5進(jìn)行一對一的比賽甲隊為ABCDE乙隊為JKLM、N,經(jīng)過抽簽決定比賽配對名單。規(guī)定A不和J比賽,M和D及E賽。列出所有可能的比賽名單。解這是一個組合問題使用窮舉法共有5個位置設(shè)甲隊5名員位置不變乙隊改變隊員位置進(jìn)行配對注意第1位置可在5個隊員中任選一個以后的位置必須扣除已選過的隊員。并扣除不能配對的情況,即得所有可能的比賽名單。#nlde<sra.vidan{cart[=''''C,D,E,t[]{'''''M,N};iti0j,,,frj0j;+>//0號位i<=0>niu;//A不與J比賽,即st1[0]不與st2[0]比賽frk0k;+>//1號位i<=j>niu;frl0l;+>//2號位i<=j|=>cnie;frm0m;+>//3號位i<=j|=|m=>otne;..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題10i<=3>niu;//M不與D比賽,即s13不與st2[3]比賽frn0n;+>//4號位i<=3>niu;//M不與E比賽,即s14不與st2[3]比賽i<=j|=|n=|=m>otu;cu<s1]<-<s[]<\'s11<'<s2k<\';cu<s1]<-<s[]<\'s13<'<s2m<\';cu<s1]<-<s[]<nl;i+;}}}}}cu<i<d}3.5編程擬選舉過程。假定四位候選人:zhng、wang、、zho,號分別為12、3、4。選舉人接鍵入候選人代號,1~4之外的整視為棄權(quán)票,-1為終標(biāo)志。打印各位候選人的得票以及當(dāng)選者〔得票數(shù)超過選票總數(shù)一半名單。解:用5元素的整型數(shù)組,分別放棄權(quán)票和各候選人的得票,然后用開關(guān)語句打印。#nlde<sra.#nlde<mnph>vidan{eumadaefii,hn,a,iza}nitvt[=0,,=n;cn>wien=>{k+;i<>1&=>vt[+eseoe]+;cn>}fri0i;+>{cn=cndt>sic<a>{cseepo:cu<st1><fia"<\'vt[ad<nl;be;csehncu<st1><za"<\'<t[adi<oecd>/>ct<" <edeseotedbek;cseagot<ew0<"ag<\'<o[adi<oecd>/>ct<" <ed..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題eseotedbek;cseict<ew1<"i<''<oecdi<oecd>/>ct<" <edeseotedbek;csehoot<ew0<"ho<\'<o[adi<oecd>/>ct<" <edeseotedbek;}}}3.6改造例31,運(yùn)行結(jié)果〔Fibnaii數(shù)的前0項存入文件。解:采用3步法。首先建立或打開一個輸出文件,并與磁盤文件聯(lián)系:osramie"yi31.x"再按一定格式存入數(shù)據(jù):ofile<<setw<15><<fib0<<setw<15><<fib1;等然后關(guān)閉文件:oiels<如要讀出數(shù)據(jù),則用輸入文件打開,并同一磁盤文件聯(lián)系:isramie"yi31.x"再按同一格式讀入數(shù)據(jù):ifile>>i>>j>>k>>l;等,并輸出最后關(guān)閉文件:fl.oe>;#nlde<temh>#nlde<mnph>cntit=0;vidan{itfb=fb=,i,,,,carha5];osramie"yi31.x"oie<e<5<fb<ew1>fbfritn;<mn+fb=i0i1;oie<e<5<fbi<%=0> fl<el; //控制每行5個數(shù)據(jù)fb=i1; i1fb}oieco<cout<<"是否要將文件輸出?Y或"<<endl;cn>h;i<h=y|h=Y>{isramie"yi31.x"wie1iie>>>k>;//由文件讀入..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題12i<fl.f>=>ba;cu<st1><<sw1><<ew1><<ew1>l<nl;//屏幕顯示}iieco<}}3.7改造例31,運(yùn)行結(jié)果〔00以內(nèi)素存入文件。解:采用4步法。首先定義一個輸出文件:otemoi再打開該文件并與并與磁盤文件聯(lián)系:oiepn"yi31.x"按一定格式把數(shù)據(jù)存入文件。最后關(guān)閉文件。效果與3步法相同。讀文件同樣可用3步法或4步法。#nlde<temh>#nlde<mnph>#nlde<tit=0vidan{itan,j;carhb5];osramie;isramie;fri0i;+>ai1i; //用數(shù)組保存整數(shù)1-100a0=; //1不是素數(shù),置0fri0i;+>{i<[]=> cniue; //該數(shù)已經(jīng)置0,判斷下一個數(shù)frji1<;+>iaj%[]0>[]0;//是a[i]倍數(shù)的元素置0;}oieoe"yie_.x"itcutofile<<"1-"<<n<<"之間的素數(shù):"<<endl;fri0i;+> //輸出所有素數(shù)i<[]={oie<e<><[];cut+;i<on%=0> oi<ed; //每行10個數(shù)據(jù)}oieco<cout<<"是否要將文件輸出?Y或"<<endl;cn>h;i<h=y|h=Y>{iieoe"yie_.x"i0;wieii.e<[]{//不可用>>,它不能讀白字符,..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題13i<[]=n>bek;i+;}bi=\';cu<b<dcut0;wie1iie>;//由文件讀入cu<st6<i//屏幕顯示cut+;i<on%=0> cu<nl; //每行10個數(shù)i<fl.f>=>ba;//這里與例3.20不同,最后一個數(shù)據(jù)后面可能沒有回車,直接為文件結(jié)束}iieco<cu<ed}}3.8改造例31,本由文本文件輸入。解:文本文件讀入要用成員函數(shù): fileget<>,而不可用插入運(yùn)算符<<,否則會丟失空白字符。#nlde<temh>vidan{carh;itnie,wr=,h0;itiwr0;isramie"p_.p"cu<e31.p<edd{c=fl.t>;i<h=\> ln+; //遇換行符行數(shù)+1i<h='&h=\'c!'n&h=O>{ //讀到非間隔符i<iwr> nod+; //在單詞的起始處給單詞數(shù)+1nh+; //字符數(shù)加+1iwr=;}ese iwd0; //讀到間隔符}hl<hEF; //讀到文本結(jié)束符為止iieco<;cout<<"行數(shù):"<<nline<<endl;cout<<"單詞數(shù):"<<nword<<endl;cout<<"字符數(shù):"<<nch<<endl;}..第二章基本控制結(jié)構(gòu)程序設(shè)計習(xí)題14\第三章函數(shù)習(xí)題1第三章函數(shù)習(xí)題一.基本概念與基礎(chǔ)知識自測題3.1填空題3.1.1被定義為形參的是在函數(shù)中起〔1作用的變量,形參只能用〔2表示。實參的作用是〔3,實參可以用〔4、〔5、〔6表示。答案:〔1自變量〔2變量名〔3將實際參數(shù)的值傳遞給形參〔4具有值的變量〔5常量〔6表達(dá)式3.1.2局部域包括〔1、〔2和〔3。使用局部變量的意義在于〔4。答案:〔1塊域〔2函數(shù)域〔3函數(shù)原型域〔4局部變量具有局部作用域使得程序在不同塊中可以使用同名變量3.1.3靜態(tài)局部變量存儲在〔1區(qū),在〔2時候建立,生存期為〔3,如定義時未顯式初始化,則其初值為〔4。答案:〔1全局?jǐn)?shù)據(jù)區(qū)〔2編譯〔3全局生存期〔4全03.1.4局部變量存儲在〔1區(qū),在〔2時候建立,生存期為〔3,如定義時未顯式初始化,則其初值為〔4。答案:〔1棧〔2在函數(shù)或塊開始執(zhí)行時〔3函數(shù)或塊的執(zhí)行期〔4隨機(jī)值3.1.5編譯預(yù)處理的作用是〔1,預(yù)處理指令的標(biāo)志是〔2。多文件系統(tǒng)中,程序由〔3來管理,用戶自定義頭文件中通常定義一些〔4。答案:〔1將源程序文件進(jìn)行處理,生成一個中間文件,編譯系統(tǒng)對此中間文件進(jìn)行編譯并生成目標(biāo)代碼〔2#〔3工程文件第三章函數(shù)習(xí)題2〔4用戶構(gòu)造的數(shù)據(jù)類型〔如枚舉類型,外部變量,外部函數(shù)、常量和內(nèi)聯(lián)函數(shù)等具有一定通用性或常用的量3.1.6設(shè)有函數(shù)說明如下:intf<intx,inty>{returnx%y+1;}假定a=10,b=4,c=5,下列語句的執(zhí)行結(jié)果分別是〔1和〔2。<1>cout<<f<a,b>+f<a,c>;<2>cout<<f<f<a+c,b>,f<b,c>>;解答:〔1答案:4411035abcf<a,b>f<a,c>main<>f<a,b>f<a,c>410xy510xyreturnx%y+1;returnx%y+1;〔2答案:53.1.7下列程序的輸出結(jié)果分別為〔1和〔2。<1>#include<iostream>usingnamespacestd;inta,b;voidf<intj>{第三章函數(shù)習(xí)題3staticinti=a;//注意靜態(tài)局部變量intm,n;m=i+j;i++;j++;n=i*j;a++;cout<<"i="<<i<<'\t'<<"j="<<j<<'\t';cout<<"m="<<m<<'\t'<<"n="<<n<<endl;}intmain<>{a=1;b=2;f<b>;f<a>;cout<<"a="<<a<<'\t'<<"b="<<b<<endl;return0;}解:21abmain<>f<b>f<a>ji+j=2+2=4i*j=3*3=9nmf<>321i3232j32i+j=1+2=3i*j=2*3=6nm答案:i=2j=3m=3n=6<對應(yīng)藍(lán)色>i=3j=3m=4n=9<對應(yīng)綠色>a=3b=2<2>#include<iostream>usingnamespacestd;floatsqr<floata>{returna*a;}floatp<floatx,intn>{cout<<"in-process:"<<"x="<<x<<'\t'<<"n="<<n<<endl;if<n==0>return1;elseif<n%2!=0>returnx*sqr<p<x,n/2>>;elsereturnsqr<p<x,n/2>>;}intmain<>{cout<<p<2.0,13><<endl;return0;}第三章函數(shù)習(xí)題4圖解遞歸,共五層,返回值是回歸時產(chǎn)生:13nmain<>1<>p<2.0,13>81922.0xp<2.0,6>646n2<>2.0xp<2.0,3>83n3<>2.0xp<2.0,1>21n4<>2.0xp<2.0,0>10n5<>2.0xx*sqr<p<x,n/2>x*sqr<p<x,n/2>x*sqr<p<x,n/2>sqr<p<x,n/2>答案:in-process:x=2n=13in-process:x=2n=6in-process:x=2n=3in-process:x=2n=1in-process:x=2n=081923.2簡答題3.2.1函數(shù)的實參和形參怎樣對應(yīng)?實參和形參數(shù)目必須一致嗎?什么情況下可以不同?答:實參和形參的個數(shù)和排列順序應(yīng)一一對應(yīng),并且對應(yīng)參數(shù)應(yīng)類型匹配〔賦值兼容,當(dāng)有缺省參數(shù)時可以不同。3.2.2函數(shù)和內(nèi)聯(lián)函數(shù)的執(zhí)行機(jī)制有何不同?定義內(nèi)聯(lián)函數(shù)有何意義?又有何要求?答:內(nèi)聯(lián)函數(shù)的調(diào)用機(jī)制與一般函數(shù)不同,編譯器在編譯過程中遇到inline時,為該函數(shù)建立一段代碼,而后在每次調(diào)用時直接將該段代碼嵌入到調(diào)用函數(shù)中,從而將函數(shù)調(diào)用方式變?yōu)轫樞驁?zhí)行方式,這一過程稱為內(nèi)聯(lián)函數(shù)的擴(kuò)展或內(nèi)聯(lián)。內(nèi)聯(lián)函數(shù)的實質(zhì)是犧牲空間來換取時間。因inline指示符對編譯器而言只是一個建議,編譯器也可以選擇忽略該建議,內(nèi)聯(lián)函數(shù)只適用于功能簡單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語句,如switch、復(fù)雜if嵌套、while語句等,以及無法內(nèi)聯(lián)展開的遞歸函數(shù),都不能定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。3.2.3全局變量和全局靜態(tài)變量的區(qū)別在哪里?為什么提倡盡量使用局部變量?答:有static修飾的全局變量只能在定義它的文件中可見,在其他文件中不可見,而非靜態(tài)的全局變量則可以被其他程序文件訪問,但使用前必須用extern說明。第三章函數(shù)習(xí)題5局部變量具有局部作用域使得程序在不同塊中可以使用同名變量。這些同名變量各自在自己的作用域中可見,在其它地方不可見。所以提倡盡量使用局部變量3.2.4函數(shù)重載的作用是什么?滿足什么條件的函數(shù)才可以成為重載函數(shù)?重載函數(shù)在調(diào)用時是怎樣進(jìn)行對應(yīng)的?答:函數(shù)重載可以定義幾個功能相似,而參數(shù)類型不同使用相同的函數(shù)名的函數(shù),以適應(yīng)不同情況下自動選用不同函數(shù)進(jìn)行操作。函數(shù)重載的好處在于,可以用相同的函數(shù)名來定義一組功能相同或類似的函數(shù),程序的可讀性增強(qiáng)。在定義重載函數(shù)時必須保證參數(shù)類型不同,僅僅返回值類型不同是不行的。當(dāng)某個函數(shù)中調(diào)用到重載函數(shù)時,編譯器會根據(jù)實參的類型去對應(yīng)地調(diào)用相應(yīng)的函數(shù)。匹配過程按如下步驟進(jìn)行:〔1如果有嚴(yán)格匹配的函數(shù),就調(diào)用該函數(shù);〔2參數(shù)內(nèi)部轉(zhuǎn)換后如果匹配,調(diào)用該函數(shù);〔3通過用戶定義的轉(zhuǎn)換尋求匹配。3.2.5多文件結(jié)構(gòu)的程序是如何進(jìn)行管理并運(yùn)行的?采用多文件結(jié)構(gòu)有什么好處?答:多文件結(jié)構(gòu)通過工程進(jìn)行管理,在工程中建立若干用戶定義的頭文件.h和源程序文件.cpp。頭文件中定義用戶自定義的數(shù)據(jù)類型,所有的程序?qū)崿F(xiàn)則放在不同的源程序文件中。編譯時每個源程序文件單獨(dú)編譯,如果源程序文件中有編譯預(yù)處理指令,則首先經(jīng)過編譯預(yù)處理生成臨時文件存放在內(nèi)存,之后對臨時文件進(jìn)行編譯生成目標(biāo)文件.obj,編譯后臨時文件撤銷。所有的目標(biāo)文件經(jīng)連接器連接最終生成一個完整的可執(zhí)行文件.exe。多文件結(jié)構(gòu)管理程序的好處是十分明顯的。首先,可以避免重復(fù)性的編譯,如果修改了個別函數(shù),那么只需將這些函數(shù)所在的文件重新編譯即可;其次,將程序進(jìn)行合理的功能劃分后,更容易設(shè)計、調(diào)試和維護(hù);另外,通常把相關(guān)函數(shù)放在一個文件中,這樣形成一系列按照功能分類的文件,便于為其他程序文件使用。3.2.6宏定義與常量定義從作用及效果上看是一樣的,二者是否完全相同?答:完全不同。不帶參宏定義與const說明符定義常量從效果上看是一樣的,但它們的機(jī)制不同。首先宏定義是在預(yù)處理階段完成,而const定義則是在編譯階段實現(xiàn)。其次宏定義只是一種簡單的字符串替代,不會為字符串分配內(nèi)存單元,替代過程也不作語法檢查,即使指令中的常量字符串不符合常量要求,預(yù)處理的替代過程也照樣按指令給出的格式進(jìn)行。而const定義則是象定義一個變量一樣定義一個常量標(biāo)識符,系統(tǒng)要按照類型要求為該標(biāo)識符分配內(nèi)存單元,同時在將常量放入單元時進(jìn)行類型檢查,如果類型不匹配,類型相容的會進(jìn)行系統(tǒng)的類型轉(zhuǎn)換,不相容的則要提示錯誤。二.編程與綜合練習(xí)題3.3設(shè)計函數(shù),將小寫英文字符變?yōu)閷?yīng)的大寫字符。解:小寫字母比大寫字母ASCII碼值大32,或?qū)懽鱟h=ch-‘a(chǎn)’+’A’;#include<iostream>usingnamespacestd;charcapitalize<charch>{if<ch>='a'&&ch<='z'>returnch-'a'+'A';elsereturnch;}第三章函數(shù)習(xí)題6intmain<>{inti=0;charcp[30];cout<<"請輸入包含小寫字母的句子:"<<endl;cin.getline<cp,30>;while<cp[i]!='\0'>cout<<capitalize<cp[i++]>;cout<<endl;return0;}3.4設(shè)計兩個函數(shù),分別求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)。解:可用窮舉法求最大公約數(shù)〔從大到小找到的第1個公約數(shù)和最小公倍數(shù)〔從小到大找到的第1個公倍數(shù)。#include<iostream>usingnamespacestd;MaxCommonDevisor<intn,intm>{inti;for<i=n;i>=1;i-->if<n%i==0&&m%i==0>break;returni;}MinCommonMultiple<intn,intm>{inti;for<i=n;i<=n*m;i++>if<i%n==0&&i%m==0>break;returni;}intmain<>{inti,j;cout<<"請輸入兩個整數(shù):"<<endl;cin>>i>>j;cout<<"最大公約數(shù):"<<MaxCommonDevisor<i,j><<'\t'<<"最小公倍數(shù):"<<MinCommonMultiple<i,j><<endl;return0;}3.5設(shè)計函數(shù)digit<num,k>,返回整數(shù)num從右邊開始的第k位數(shù)字的值。例如:digit<4647,3>=6digit<23523,7>=0解:把整數(shù)轉(zhuǎn)換為數(shù)串,放在一個整型數(shù)組中。#include<iostream>usingnamespacestd;digit<intnum,intk>{ints[10]={0,0,0,0,0,0,0,0,0,0};第三章函數(shù)習(xí)題7inti=0;do{//先把整數(shù)轉(zhuǎn)換為數(shù)字串s[i]=num%10;num/=10;i++;}while<num>0>;if<k<=i>returns[k-1];//題目中位數(shù)的下標(biāo)從1開始,而數(shù)組下標(biāo)從0開始elsereturn0;}intmain<>{cout<<"digit<4647,3>="<<digit<4647,3><<endl;cout<<"digit<23523,7>="<<digit<23523,7><<endl;return0;}3.6設(shè)計函數(shù)factors<num,k>,返回整數(shù)num中包含因子k的個數(shù),如果沒有該因子,則返回0。解:必須先判斷整數(shù)m能否被k整除。#include<iostream>usingnamespacestd;factors<intnum,intk>{//缺省返回值為整型intcount=0;while<num%k==0>{count++;num/=k;}returncount;}intmain<>{cout<<"factors<1875,5>="<<factors<1875,5><<endl;cout<<"factors<64,3>="<<factors<64,3><<endl;return0;}3.7歌德巴赫猜想指出:任何一個充分大的偶數(shù)都可以表示為兩個素數(shù)之和。例如:4=2+26=3+38=3+5……50=3+47將4.50之間的所有偶數(shù)用兩個素數(shù)之和表示。判斷一個整數(shù)是否為素數(shù)用函數(shù)完成。解:用prime<>函數(shù)判斷是否素數(shù),用窮舉法。歌德巴赫猜想驗證也用窮舉法,在所有組合中找兩個數(shù)均為素數(shù)者。#include<iostream>#include<cmath>usingnamespacestd;boolprime<intm>{if<m==1||m==0>returnfalse;第三章函數(shù)習(xí)題8if<m==2>returntrue;intk=<int>sqrt<m>;for<inti=2;i<=k;i++>//窮舉法if<m%i==0>break;if<i>k>returntrue;elsereturnfalse;}intmain<>{for<intn=4;n<=50;n+=2>{for<inti=2;i<=n/2;i++>if<prime<i>&&prime<n-i>>cout<<n<<'='<<i<<'+'<<n-i<<endl;//列出所有可能組合}return0;}3.8設(shè)計函數(shù)打印直方圖,直方圖寬度為3行,每列代表數(shù)據(jù)1%。如下面的圖形表示10%。||**********|**********|**********|解:為簡單將a%用a表示。#include<iostream>usingnamespacestd;voidPrintDiagram<intm>{inti;cout<<'|'<<endl;for<i=0;i<3;i++>{cout<<'|';for<intj=0;j<m;j++>cout<<'*';cout<<endl;}cout<<'|'<<endl;}intmain<>{PrintDiagram<10>;PrintDiagram<15>;PrintDiagram<7>;return0;}3.9定義遞歸函數(shù)實現(xiàn)下列Ackman函數(shù):.............0m0,n>>1,<,1<0n110m1>,<nmAcmmAcm>,Acm<m-nnmAcm第三章函數(shù)習(xí)題9其中m、n為正整數(shù)。設(shè)計程序求Acm<2,1>,Acm<3,2>。解:遞歸函數(shù)實現(xiàn)非常簡單,按公式寫即可。#include<iostream>usingnamespacestd;Acm<intm,intn>{if<m==0>returnn+1;if<n==0>returnAcm<m-1,1>;returnAcm<m-1,Acm<m,n-1>>;}intmain<>{cout<<"Acm<2,1>="<<Acm<2,1><<endl;cout<<"Acm<3,2>="<<Acm<3,2><<endl;return0;}3.10用遞歸函數(shù)實現(xiàn)勒讓德多項式:..............1n/>><>1<><>12<<1n0n1><21nxPnxxPnxxPnnn在主函數(shù)中求P4<1.5>。解:把勒讓德多項式的階和自變量都作為參數(shù)。#include<iostream>usingnamespacestd;doubleP<intn,doublex>{if<n==0>return1;if<n==1>returnx;return<<2*n-1>*x*P<n-1,x>-<n-1>*P<n-2,x>>/n;}intmain<>{cout<<"P<4,1.5>="<<P<4,1.5><<endl;return0;}3.11定義內(nèi)聯(lián)函數(shù)實現(xiàn)求三個實數(shù)中的最大值。解:內(nèi)聯(lián)函數(shù)只適用于功能簡單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語句,如switch、復(fù)雜if嵌套、while語句等,以及無法內(nèi)聯(lián)展開的遞歸函數(shù),都不能定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。#include<iostream>usingnamespacestd;inlinemax<inta,intb,intc>{if<a>b&&a>c>returna;if<b>a&&b>c>returnb;returnc;}第三章函數(shù)習(xí)題10intmain<>{cout<<max<3,7,4><<endl;return0;}3.12定義內(nèi)聯(lián)函數(shù),判斷一個字符是否為數(shù)字字符。解:數(shù)字字符ASCII碼值是連在一起的,可用ch>='0'&&ch<='9'來判斷。#include<iostream>usingnamespacestd;inlineboolIfDigitChar<charch>{if<ch>='0'&&ch<='9'>return1;elsereturn0;}intmain<>{charch;cout<<"請輸入一個字符〔輸入"!"停止"<<endl;cin>>ch;while<ch!='!'>{if<IfDigitChar<ch>>cout<<ch<<"isadigitchar"<<endl;elsecout<<ch<<"isnotadigitchar"<<endl;cout<<"請輸入一個字符〔輸入"!"停止"<<endl;cin>>ch;}return0;}3.13設(shè)計兩個重載函數(shù),分別求兩個整數(shù)相除的余數(shù)和兩個實數(shù)相除的余數(shù)。兩個實數(shù)求余定義為實數(shù)四舍五入取整后相除的余數(shù)。解:實數(shù)四舍五入取整,正數(shù)是+0.5取整,負(fù)數(shù)是-0.5取整。#include<iostream>#include<cmath>usingnamespacestd;mod<intn,intm>{returnn%m;}round<doublex>{//四舍五入函數(shù)if<x>=0>returnint<x+0.5>;elsereturnint<x-0.5>;}mod<doublex,doubley>{returnround<x>%round<y>;}intmain<>{cout<<"mod<8,3>="<<mod<8,3><<endl;第三章函數(shù)習(xí)題11cout<<"mod<8.2,3.6>="<<mod<8.2,3.6><<endl;cout<<"mod<-8.2,-2.6>="<<mod<-8.2,-2.6><<endl;return0;}注意:mod<doublex,doubley>形參類型不可以寫成float,因為在入口函數(shù)中mod<8.2,3.6>的實參8.2、3.6都認(rèn)為是double型常數(shù),重載時系統(tǒng)不知應(yīng)轉(zhuǎn)換為float還是int,出現(xiàn)歧義。3.14建立一個頭文件area.h,在其中定義兩個面積函數(shù)area<>,分別用來計算半徑為r的圓的面積和邊長為a和b的矩形面積。另外建立一個實現(xiàn)文件area.cpp,在其中定義主函數(shù)。通過包含area.h,輸入數(shù)據(jù)并輸出圓和矩形的面積。解:兩個面積函數(shù)area<>,一個是單參數(shù),一個是雙參數(shù)。//頭文件area.hdoublearea<doubler>{return3.14*r*r;}doublearea<doublea,doubleb>{returna*b;}//實現(xiàn)文件area.cpp#include<iostream>usingnamespacestd;#include"area.h"intmain<>{doublea,b,r;cout<<"inputradius:"<<endl;cin>>r;cout<<"inputsidelength:"<<endl;cin>>a>>b;cout<<"area<"<<r<<">="<<area<r><<endl;cout<<"area<"<<a<<','<<b<<">="<<area<a,b><<endl;return0;}注意:例題源代碼中,為了使文件命名方式一致,采用Exp3_14.h和Exp3_14.cpp來命名。3.15下面遞歸函數(shù)執(zhí)行結(jié)果是什么?1>voidp1<intw>{inti;if<w>0>{for<i=0;i<w;i++>cout<<’\t’<<w;cout<<endl;p1<w-1>;}}調(diào)用p1<4>。第三章函數(shù)習(xí)題12答:用調(diào)用樹來解答,如下圖,注意打印是在遞歸調(diào)用之前:按照打印語句:for<i=0;i<w;i++>cout<<’\t’<<w;cout<<endl;可得輸出為:①4444//第1次W=4②333//第2次W=3③22//第3次W=2④1//第4次W=12>voidp2<intw>{inti;if<w>0>{p2<w-1>;for<i=0;i<w;i++>cout<<’\t’<<w;cout<<endl;p2<w-1>;}}調(diào)用p2<4>。答:用調(diào)用樹來解答,如下圖,注意打印是在兩次遞歸調(diào)用之間:按照次序和打印語句,可得輸出為:①1②22③1④333⑤1⑥22⑦1⑧4444⑨1第三章函數(shù)習(xí)題13⑩22⑾1⑿333⒀1⒁22⒂13>voidp3<intw>{inti;if<w>0>{for<i=0;i<w;i++>cout<<’\t’<<w;cout<<endl;p3<w-1>;p3<w-2>;}}調(diào)用p3<4>。答:用調(diào)用樹來解答,如下圖,注意打印是在兩次遞歸調(diào)用之前:按照次序和打印語句,可得輸出為:①4444②333③22④1⑤1⑥22⑦14>voidp4<intw>{inti;if<w>0>{for<i=0;i<w;i++>cout<<’\t’<<w;第三章函數(shù)習(xí)題14cout<<endl;p4<w-1>;for<i=0;i<w;i++>cout<<’\t’<<w;cout<<endl;}}調(diào)用p4<4>。答:如下圖用調(diào)用樹解答,注意打印是在遞歸調(diào)用之前和之后各一次:按照次序和打印語句,可得輸出為:①4444②333③22④1⑤1⑥22⑦333⑧4444..第四章類與對象習(xí)題1第四章類與對象習(xí)題一.基本概念與基礎(chǔ)知識自測題4.1填空題5.1.1 引類定義的關(guān)鍵字是〔1類的成員函數(shù)通常指定為〔2類的數(shù)據(jù)成員通常指定為〔3指定為〔4的類成員可以在類對象所在域中的任何位置訪問它們通常用類的〔5成員表示類的屬性用類的〔6成員表示類答案:〔1class〔2公有的pbic〔3私有的privae〔4公有的pbic〔5數(shù)據(jù)〔6函數(shù)4.1.2 類訪問限定符包括〔〔2和〔3私有數(shù)〔4函數(shù)來訪問〔讀和寫。些函數(shù)統(tǒng)稱為5。答案:〔1pblc〔公的〔2privte〔私的〔3protctd〔護(hù)的〔4公有的成員函數(shù)〔5類的接口4.1.3 通在邏輯上同一類的每個對象都有〔1代碼區(qū)用以存儲成員函數(shù)而在物理上通常只有〔2代碼區(qū)只有在〔3定義并〔4的函數(shù)和加了關(guān)鍵字〔5的函數(shù)答案:〔1獨(dú)立的〔2共用的〔3在類說明中〔4不包括循環(huán)等復(fù)雜結(jié)構(gòu)〔5inine4.1.4 C++支持三種域〔12〔函數(shù)4中全局域被包括在〔5中usig指示以關(guān)鍵字usig開頭后面是關(guān)鍵字6最后是〔7這樣表示以后在該名字空間中所有成員都〔。如不使用using指示符在使用時要加::,稱為〔9運(yùn)算符。答案:〔1局部域〔lolcpe〔2名字空間域〔naespacescope〔3類域〔classcope〔4局部域〔5名字空間域〔6naespace〔7名字空間名..第四章類與對象習(xí)題2〔8可以直接被使用〔9域4.1.5 引通常用作函數(shù)的〔1和〔2。對數(shù)組只能引用〔3不能引用4〔1參數(shù)〔2返回值〔3數(shù)組元素〔4數(shù)組名本身4.1.6 構(gòu)函數(shù)的任務(wù)是〔1構(gòu)造函數(shù)無〔2類中可以有〔3個構(gòu)造函數(shù)它們4區(qū)分如果說明中沒有給出構(gòu)造函數(shù)則C++器會拷貝構(gòu)造函數(shù)的參數(shù)是〔6當(dāng)程序沒有給出復(fù)制構(gòu)造函數(shù)時系統(tǒng)會自動提供〔7支持這樣的復(fù)制構(gòu)造函數(shù)中每個類成員〔。答案:〔1初始化數(shù)據(jù)成員〔2函數(shù)返回類型說明〔3多〔4不同的參數(shù)表〔5自動給出一個默認(rèn)的構(gòu)造函數(shù)〔6同一類對象的引用〔7默認(rèn)的的復(fù)制構(gòu)造函,稱為默認(rèn)的按成員語義支持?!?被依次復(fù)制4.1.7 一類有個析構(gòu)函數(shù)?!?時,系統(tǒng)會自動調(diào)用析構(gòu)函數(shù)。〔1一〔2對象注銷時4.1.8 運(yùn)符重載時其函數(shù)名由〔1構(gòu)成成員函數(shù)重載雙目運(yùn)算符時左操作數(shù)是,右操作數(shù)是〔3答案:〔1關(guān)鍵字operaor和該運(yùn)符〔2對象〔3該函數(shù)的參數(shù)4..9面向過程的程序設(shè)計中程序模型描述為〔1,面向?qū)ο蟪绦蛟O(shè)計的程序模型可描述為〔答案:〔1"程序算法+數(shù)據(jù)結(jié)構(gòu)。其數(shù)與數(shù)據(jù)處理是分離的?!?程序〔對象+對象+……+對+消息對象〔算法+數(shù)據(jù)結(jié)構(gòu)面向?qū)ο笤O(shè)計將數(shù)據(jù)和對數(shù)據(jù)的操作方法放在一起,形成一個相對獨(dú)立的整體——對象〔Object,并通過簡單的接口與外部聯(lián)系。對象之間通過消息〔Message進(jìn)行通訊。4.2 簡答題4.2.1 簡解釋什么是面向?qū)ο蟪绦蛟O(shè)計答對象是一個封裝體在其中封裝了該對象所具有的屬性和操作對象作為獨(dú)立的基本單元實現(xiàn)了將數(shù)據(jù)和數(shù)據(jù)處理相結(jié)合的思想此外封裝特性還體現(xiàn)在可以限制對象中數(shù)據(jù)..第四章類與對象習(xí)題3和操作的訪問權(quán)限,從而將屬性"隱藏"在對象內(nèi)部,對外只呈現(xiàn)一定的外部特性和功能。封裝性增加了對象的獨(dú)立性,C++通過建立數(shù)據(jù)類型——類,來支持封裝和數(shù)據(jù)隱藏。一個定義完好的類一旦建立就可看成完全的封裝體作為一個整體單元使用用戶不需要知道這個類是如何工作的而只需要知道如何使用就行另一方面封裝增加了數(shù)據(jù)的可靠性保護(hù)類中的數(shù)據(jù)不被類以外的程序隨意使用這兩個優(yōu)點(diǎn)十分有利于程序的調(diào)試和維護(hù)。4.2.2 C++譯器怎樣對標(biāo)識符進(jìn)行解?答編譯器對標(biāo)識符的解析分兩步第一步查找在聲明中用到的標(biāo)識符特別是函數(shù)成員聲明中用到的參數(shù)類型,第二步是函數(shù)成員體內(nèi)的標(biāo)識4.2.3 為么說類與對象的概念是客觀世界的反映?答:客觀世界的事物都具有某些屬性和行為〔或操作,具有相同屬性和行為的事物可以歸屬于一類用分類的方法可以提高認(rèn)識事物的效率C++定義的類則是通過抽象的方法將某一類事物共有的靜態(tài)特〔屬性和動態(tài)特〔行為概括出來并加以描述而對象是類的具體實現(xiàn),所以說類與對象的概念是客觀4.2.4 什叫類域?為什么說類域是抽象的?答類域是類體所包括的范圍每個類定義都引入了一個獨(dú)立的類域在類域中說明的標(biāo)識符僅在該類的類域中有效由于類只是一個說明看上去有數(shù)據(jù)有函數(shù)有類型定義但是它并非實體,不分配內(nèi)存,當(dāng)然也不能運(yùn)行。所以說類4..5 引用作為函數(shù)參數(shù)時為什么能實現(xiàn)兩個實參之間的數(shù)據(jù)交換?為什么對應(yīng)實參不能為引用?為什么返回值為引用的函數(shù)可以作為左值?答引用變量是其關(guān)聯(lián)變量的別名二者在內(nèi)存中占據(jù)同一個存儲單元在一個以引用作為參數(shù)的函數(shù)中交換兩個參數(shù)的值實際上就是交換兩個實參的值如果函數(shù)的參數(shù)是引用,調(diào)用時需要取得實參的地址而實參如果已經(jīng)是一個地址再進(jìn)行引用將產(chǎn)生錯誤故對應(yīng)實參不能函數(shù)返回引用實際是指〔返回了相應(yīng)的關(guān)聯(lián)變量所以聲明返回值為引用的函數(shù)實際上是將關(guān)聯(lián)變量作為左值參與運(yùn)算。4.2.6 什是缺省的構(gòu)造函數(shù)?缺省的構(gòu)造函數(shù)最多可以有多少個?答:如果在類定義中不顯式地定義構(gòu)造函數(shù),C++編譯器自動產(chǎn)生一個缺省的構(gòu)造函數(shù),不過該函數(shù)不做具體的初始化工作。只要構(gòu)造函數(shù)是無參的或者只要各參數(shù)均有缺省值的,C++編譯器認(rèn)為是缺省的構(gòu)造函數(shù)。缺省的構(gòu)造函數(shù)只能有一個4.2.7 拷構(gòu)造函數(shù)用于哪三個方面?〔1用類的一個對象去初始化該類的另一個對象時使用?!?當(dāng)函數(shù)的形參是類的對象,調(diào)用函數(shù)時,進(jìn)行形參與實參結(jié)合時使用?!?當(dāng)函數(shù)的返回值是類對象,函數(shù)執(zhí)行結(jié)束返回調(diào)用者時使用。4.2.8 寫含有對象成員的類的構(gòu)造函數(shù)的格式,并做簡單說明。答:C++中含對象成員的類對象的構(gòu)造函數(shù)有固定的格式:類名::構(gòu)造數(shù)名<參數(shù)總表>:對象成員1<參數(shù)表1>對成員2<參名表2>…對象..第四章類與對象習(xí)題4員n<參數(shù)表n>{……}冒號后用逗號隔開的是要初始化的對象成員附在后面的參數(shù)名表1…參數(shù)名表n依次為調(diào)用相應(yīng)對象成員所屬的構(gòu)造函數(shù)時的實參表這些表中的參數(shù)通常來自冒號前的參數(shù)總表,但沒有類型名。4.2.9 所類對象未重載的賦值運(yùn)算"=是怎樣工作的?為什么它可以進(jìn)行連續(xù)賦值?答對所有的類對象未重載的賦值運(yùn)算"=稱缺省的按成員拷貝賦值操作符同類對象之間可以"=直接拷貝因為缺省的賦值操作返回一個對象的引用所以它可以進(jìn)行連續(xù)賦值4.2.10 為么在友元函數(shù)的函數(shù)體內(nèi)訪問對象成員時必須用對象名加運(yùn)算"再加對象成員名?答友元函數(shù)不是類的成員函數(shù)在函數(shù)體中訪問對象的成員必須用對象名加運(yùn)算"."加對象成員名。這一點(diǎn)和一般函數(shù)一樣4.1 重復(fù)數(shù)運(yùn)算符+時,采用下面友元函數(shù)聲明:friendCoplexoperator+<oplexc1Coplex&c>;為什么不能用于"實數(shù)+復(fù)數(shù)"?怎樣改進(jìn)才能適用?為答使用引用類型變量作為運(yùn)算符重載函數(shù)的參數(shù)身為左值的實數(shù)類型實參不能被轉(zhuǎn)換為復(fù)數(shù),編譯時無法通過。添加const說明,使實數(shù)到復(fù)數(shù)的轉(zhuǎn)換隱式地在一份拷貝上進(jìn)行,則可以實現(xiàn)"實數(shù)+復(fù)數(shù)"運(yùn)算。修改后的說明為:friendCoplexoperator+<onstCoplex&c1,constplex&2>;4.2.12 類靜態(tài)數(shù)據(jù)成員與函數(shù)中的靜態(tài)成員有何異同?答類的靜態(tài)成員為其所有對象共享不管有多少對象靜態(tài)成員只有一份存于公用內(nèi)存中,為該類所有對象公用函數(shù)中的靜態(tài)變量也位于公用內(nèi)存中不隨函數(shù)調(diào)用而重新分配所以總是保留上次進(jìn)入并執(zhí)行該函數(shù)4.2.13 C+中結(jié)構(gòu)、聯(lián)合與類三者間有何異答:在C+中結(jié)構(gòu)〔structure與幾乎是完全一樣的類型,差別僅僅在于缺省情況下結(jié)構(gòu)的成員為公有的。聯(lián)合〔unon是C++的導(dǎo)出據(jù)類型,在語法與功能上類似于結(jié)構(gòu),二者的區(qū)別是結(jié)構(gòu)變量的各成員同時被分配了各自獨(dú)立的內(nèi)存區(qū)而聯(lián)合變量的各個成員的存儲開始地址都相同,所以在任一時刻聯(lián)合變量只能存儲一個成員。4.2.14 對的第一特征是封裝,那么由對象組成的面向?qū)ο蟮某绦蛟鯓咏⒏鲗ο笾g的有效聯(lián)系?面向?qū)ο蟪绦虻慕M織與面向過程有什么不同?答因為對象的操作主要用來響應(yīng)外來消息并為其他對象提供服務(wù)所以面向?qū)ο蟮某绦蚶孟鬟f機(jī)制來建立各對象之間的有效聯(lián)系協(xié)調(diào)各對象的運(yùn)行一個對象可以向其他對象發(fā)送消息以請求服務(wù)也可以響應(yīng)其他對象傳來的消息完成自身固有的某些操作從而服務(wù)于其他對面向過程的程序是模塊化的,模塊的組織具有分層結(jié)構(gòu)特點(diǎn),層與層之間是調(diào)用關(guān)系。面向?qū)ο蟪绦蚴怯梢粋€個封裝的對象組成而對象是由緊密結(jié)合在一起的算法和數(shù)據(jù)結(jié)構(gòu)組成。對象之間是相互請求和相互協(xié)作的關(guān)系。..第四章類與對象習(xí)題54.2.15 簡敘inows應(yīng)用程序的運(yùn)答:inows系統(tǒng)支持多個應(yīng)用程序同時執(zhí)行,在界面形式上,它支持多個窗口同時活動。它的運(yùn)行機(jī)制是"消息傳遞和事件驅(qū)動〔essagebasdndevntdrie。inows統(tǒng)使用事件驅(qū)動的編程模式所謂事件的含義非常廣泛輸入設(shè)備的動作,如敲打鍵盤、按鼠標(biāo)等會產(chǎn)生一系列的事件注意不是一個事件。操作系統(tǒng)所作的一舉一動也被當(dāng)作某種類型的事件,應(yīng)用程序也會產(chǎn)生各種事件。事件用來標(biāo)識發(fā)生的某件事情。inows系統(tǒng)對于應(yīng)用程序環(huán)境中發(fā)生的每一個事件都會以對應(yīng)的某種消息的形式標(biāo)識并放入相應(yīng)的ios建立的消息隊列中然后由對應(yīng)的應(yīng)用程序或窗口函數(shù)去處理。窗口函數(shù)處理是分層的前面處理不了的送到后面最后處理不了剩下的全由缺省的窗口函數(shù)處理。4.2.16 類成員函數(shù)在什么情況下應(yīng)該定義為私有的?這樣做的目的是什么?答除接口函數(shù)和創(chuàng)建本類對象的構(gòu)造函數(shù)和撤消該對象的析構(gòu)函數(shù)外其余成員函數(shù)應(yīng)該定義為私有的這是開發(fā)類時故意對外隱蔽起來的操作而這些往往是最復(fù)雜最關(guān)鍵的部分。類中故意的隱藏也為以后的升級擴(kuò)展留下了余地只要接口不變內(nèi)部再變也不必修改原來的程序就象MF〔微軟基礎(chǔ)類升級后由MFC底類所編的程序完全不必修改自動升級二.編程與綜合練習(xí)題4.3 構(gòu)造個日期時間〔iedat數(shù)據(jù)成包括年月日和時分秒函數(shù)成員包括設(shè)置日期時間和輸出時間,其中年、月請用枚舉類型,并完成測試〔包括用成員函數(shù)和用普通函數(shù)解:本題要求僅是定義類的練習(xí),并非實用的提供日期時間的程序。實用的日期時間程序見附錄二的日期時間函數(shù)。#icude<osrea>#icude<oanp>usignaespacetd;enumR{200,20,202,03204,0};//enumMT{Ja,Feb,ar,prMa,Ju,Juug,Se,ctov,ec;classiedae{privt:YRyear;MTonth;intdte;inthh;int;intss;pblc:Tiedate<>{ear=Y20;onh=Jndt=1h=0;=0;ss=;}Tiedate<YRa,MTb,ntc>{year=a;onthb;dae=;hh1;m=30;ss=;..第四章類與對象習(xí)題6}vodgetdateYR&,MT&nt&>/使用引用一次取得個數(shù)值vodgetieint&it&,nt&>;vodputdteYR,MTit>;vodpttieintitint>;vodlist<>;};vodiedate::etae<YR&,MT&,intdy=year;=onth;d=at;}vodiedate::etieint&a,it&b,nt&c>{a=hh;b=c=ss;}vodiedate::udae<YRa,MTb,ntc>{year=a;onthb;dae=;}vodiedate::utieint,itb,itc>{hha;m=b;ss=c;}vodiedate::ist<>{/成員函數(shù)直接訪問私有的數(shù)據(jù)成員cot<<earonthdae:;switch<year>{case00:ou<<00brea;case01:ou<<01brea;case02:ou<<02brea;case03:ou<<03brea;case04:ou<<04brea;case05:ou<<05brea;}switch<onth>{caseJncu<</<<"Jan";break;caseFb:o<</<<"Feb";brea;caseMar:ou<</<<"Mar";brea;caseprcu<</<<pr;brea;caseMay:ou<</<<"May";brea;caseuncu<</<<Jun;brea;..第四章類與對象習(xí)題7caseulcut</<<Jul;brea;caseAg:o<</<<Aug;brea;caseSp:o<</<<"Sep";brea;caseOc:o<</<<"Oct";brea;caseNv:o<</<<Nov;brea;casee:o<</<<ec;brea;}cout<</<<date<<ndl;cot<<"ouinite:scnd:";cout<hh<<:<<m<<:<<ss<<end;}intain<itagc,cha*ag[]>{TiedateA<Y204Mar,3>B;A.list<>;B.lit<>;B.utate<Y05,Oct18>;B.utie<17,3000>;B.lit<>;return0;}4.4 設(shè)計并測試一個矩形類〔ecange,屬性為矩形的左下與右上角的坐標(biāo),矩形水平放置。操作為計算矩形周長與面積。測試包括用成員函數(shù)和普通函數(shù)。解:這里的矩形的4分別與x軸y軸平行,為最簡單的情況。注意參數(shù)有缺省值的函數(shù)的聲明和定義格式。#icude<osrea>#icude<cath>usignaespacetd;classecange{dubeeft,tp;dubergh,boto;pblc:Recangledblel0,duet0,dule=0,duleb0>;~Rectangle<>{}; /析構(gòu)函數(shù),在此函數(shù)體為空vodAssignobleldulet,ober,obleb>;dubeeteft<>{returnlef;}//以下四個函數(shù)皆為內(nèi)聯(lián)成員函數(shù)dubeetiht<>{returnrgh;}dubegetTop<>{returno;}dubeetoto<>{returnoto;}vodShow<>;dubeArea<>;dubePerieter<>;};..第四章類與對象習(xí)題8//構(gòu)造函數(shù),帶缺省參數(shù),缺省值為全,在聲明中指定Recangl::ctngeduel,oblet,duber,duleb>{left=l;op=;right=r;otom=b;}vodecange::Assignoblel,dulet,duler,dbleb>{/賦值left=l;op=;right=r;otom=b;}vodecange::Show<>/成員函數(shù)直接使用私有的數(shù)據(jù)成員cout<<"left-toppointis<"<left<<","<top<<">"<<\n;cot<<"rghtbotompoits<"<<rigt<","<<boto<<">"<<\n;}dubeecangl::Area<>{returnfabs<<right-left>*<botto-top>>;}dubeRectangle::Perieter<>{return2*<fb<right-eft>+fbs<btto-top>>;}intain<>{Recanglerec;rect.Show<>;rect.ssin<002030,0>;rect.Show<>;Rectanglerect1<0,0,200,200>;rect1.Show<>;Recanglerec2<rect1;rect2.Show<>;cout<<面積"<<rec.Area<><<\t<<周長"<<rect.Perieter<><<ndl;return0;}4.5 定義一個圓類〔Cirle,屬性為半徑〔radius、圓周長和面積,操作為輸入半徑并計算周長、面積,輸出半徑、周長和面積。要求定義構(gòu)造函數(shù)〔以半徑為參數(shù),缺省值為0,周長和面積在構(gòu)造函數(shù)中生成和拷貝構(gòu)造函數(shù)。解:通常所有數(shù)據(jù)成員都在構(gòu)造函數(shù)中賦初值??截悩?gòu)造函數(shù)以本類的引用為參數(shù)。#icud<ostea>#icud<cath>usignaespacetd;classice{duber,Area,Circuference;pblc:Circledulea=0>;..第四章類與對象習(xí)題9Circle<irce&>;vodSetRobleR>;dubeGetR<>{return;}dubeGetAeaCirle<>{returnArea;}dubeGeCicuference<>{returnCircumference;}};Circl::ircedubea>{r=a;Area=r*r*3.14159265;Circuference=2*r*3.14159265;}Circl::irce<Circle&l>{r=cl.r;Area=cl.Are;Circuference=c.Ciruferenc;}vodirce::etRobleR{r=R;Area=r*r*3.14159265;Circuference=2*r*3.14159265;}intain<>{Circlec1<2>,l2,l=c1;cout<<圓半徑:"<c3.GeR<><<\t<<"圓周長:"<c3.Getircuferene<><<\t<<"圓面積:"<c3.GeAreaCircle<><endl;cl2.SetR<4>;cout<<圓半徑:"<c2.GeR<><<\t<<"圓周長:"<c2.Getircuferene<><<\t<<"圓面積:"<c2.GeAreaCircle<><endl;return0;}4.6 設(shè)計個學(xué)校在冊人員〔Person數(shù)據(jù)成包括身份證〔IdPerson姓〔Nae,性〔Sex生〔Birhday和庭住〔HomeAddress成員函數(shù)包括人員信息的錄入和顯示。還包括構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)。設(shè)計一個合適的初始值。解:本題為指出構(gòu)造函數(shù)等的調(diào)用,加了一些提示語句。#icud<ostea>#icud<cstrng>usignaespacetd;enumTsex{id,an,woan};classPerson{charIdPerson[9]; /身份證號1位數(shù)字..第四章類與對象習(xí)題10charNae[20]; /姓名TsexSx; /性別intBirhday; /生日格式18年月日寫作1808pblc:Personchar*char*,Tsx,t,char*>;Person<Person&>;Person<>;~Person<>;vodPritPersonInfo<>;vodiputPeron<>;/其他接口函數(shù)};Person::Pernchar*d,hr*nae,Tsexsex,ntbird,charhoeadd>{cout<<構(gòu)造erson"<<nl;strcpy<IdPerson,id>;strcpy<Nae,nae>;Sex=sx;Birthday=birthday;strcp<oeddress,oeadd>;}Person::Person<>{cout<<缺省構(gòu)造Person"<<endl;IdPerso[0]=\0;ae[0]=\0;Sex=id;Birthday=0;HoeAddress[0]=\0;}Person::Pern<Person&P>{cout<<拷貝構(gòu)造Person"<<endl;strcp<IdPerson,Ps.IdPerson;strcpy<Nae,Ps.Nae>;Sex=Ps.Sex;Birthday=PsBirthday;strcp<HoeAddress,Ps.HoeAddress>;}Person::~Person<>{cout<<析構(gòu)erson"<<nl;}vodPerson::inputPerson<>{charh;c
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五金材料采購實踐分享
- 2022年四川省廣元市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2022年安徽省合肥市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年四川省廣安市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2021年貴州省銅仁市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2025年工具鋼項目提案報告模范
- 廣西北海市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版隨堂測試((上下)學(xué)期)試卷及答案
- 2025年出入口機(jī)項目立項申請報告模范
- 實習(xí)生的辭職報告
- 2024年服務(wù)器項目資金需求報告代可行性研究報告
- 文字學(xué)概要完整版本
- 手術(shù)室搶救工作制度
- ce自我聲明模板
- 鋼閘門監(jiān)理評估報告
- 高檔養(yǎng)老社區(qū)項目計劃書
- 京東物流信息系統(tǒng)
- 蛇年銷售年會發(fā)言稿范文
- 國管局住房制度改革相關(guān)政策解答
- 無縫鋼管服務(wù)方案
- 排澇泵站養(yǎng)護(hù)方案范本
- XX醫(yī)院臨床醫(yī)療質(zhì)量考核通用記錄表
評論
0/150
提交評論