程序設(shè)計(jì)陵況迎輝課后_第1頁
程序設(shè)計(jì)陵況迎輝課后_第2頁
程序設(shè)計(jì)陵況迎輝課后_第3頁
程序設(shè)計(jì)陵況迎輝課后_第4頁
程序設(shè)計(jì)陵況迎輝課后_第5頁
已閱讀5頁,還剩196頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C++基礎(chǔ)知識習(xí)題C++基礎(chǔ)知識習(xí)判斷下列標(biāo)識符的sinbook5arry_nameExample2.1$1class_cppa3x*ymy答:合法的:sinbook_namemainclass_cpp的:5arryExample2.1$1x*ymy假定有下列變量intfloatcharx+(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.58.2、3x=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,成為43ch4=ch3-ch2+ch1式值為:’\\’,字符外斜杠。運(yùn)算后ch1、ch2、ch3值不提示:字符型的變量實(shí)質(zhì)是范圍很小的整型量int(y/z)+(int)y/(int)z表達(dá)式值為:13。y和z自身的值不變提示:int(y/z)是完成實(shí)數(shù)除法后,商強(qiáng)制轉(zhuǎn)化為整型,(int)y/(int)z先轉(zhuǎn)換,完成的是整除。!(a>b)&&c&&(x*=y)&&b++表達(dá)式值為:0。運(yùn)算后x仍為2.5,b仍為提示:只要出現(xiàn)一個(gè)false右邊的不再做,因?yàn)閏為0,即false運(yùn)算不再做。ch3||(b+=a*c)||c++達(dá)式值為:1。運(yùn)算后b為5,c為0,均不變。z=(a<<2)/(b>>1)表達(dá)式值為:6。運(yùn)算后a與b的值不變?nèi)詾?和5。 判斷下列哪些是常量,哪些是變""constintn=10;intm=5;'a'charch='a'intarray[5]={1,2,3,4,5};chars[]="o";答:""文字常量constintn=10;intm=5;變量'a字常量C++基礎(chǔ)知識習(xí)題charch='a'intarray[5]={1,2,3,4,5chars[]="o";變將下列算式或敘述用C++表達(dá)式描述(x+y)/((x-位于原點(diǎn)為圓心,a,b為半徑的圓環(huán)中的點(diǎn)坐標(biāo)并且字符ch不為'\0'20答pi/2+sqrt(asin(x)*asin(x)+c*c)int下面程序段的功能是備選答案中 ,當(dāng)n=10,x=10打印結(jié)果(2)。;do{

y x

y

x)

y

)x)

n

2

2

2nn第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) 第一個(gè)循環(huán)使x為:

;y成為1x2 2

;第一個(gè)循環(huán)使y成為

x) 2考慮整除x2

連除4次以后為零,所以 請看如下程序段else elseif(num==3) elsecout<<”Delta”;當(dāng)num的值分別為1、2、3時(shí),上面程序段的輸出分別為(1)、(2)、(3)。解答:檢查條件語句與字符串輸出概念 執(zhí)行下面程序段后,m和k的值分別 int++){if(m>=10)}m-}解答:注意continue語初 第1次循環(huán) 第2次循 第3次循 第4次循 第5次循 第6次循 第7次循 結(jié)束,k++二.編程與編程求一元二次方程ax2+bx+c=0的根。包括以下判斷和結(jié)果:若輸a=0,給出提第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) 若Δ>0,輸出兩個(gè)不等實(shí)根;若Δ=0,輸出兩個(gè)相等實(shí)根;若Δ<0,輸出兩個(gè)復(fù)根解:本題以一個(gè)絕對值極小的數(shù)作為實(shí)數(shù)0#include<iostream.h>#include<math.h>#include<stdlib.h>voidmain(){doublea,b,c;doubledelta,x1,x2;constdoublezero=1e-9;定義一個(gè)很小的常intcout<<"輸入三個(gè)系數(shù)a(a!=0bc:"<<endl;if(fabs(a)<zero){cout<<"二次項(xiàng)系數(shù)為0,方程根是-c/b";exit(0);}<<endl;delta=b*b-4*a*c;cout<<"方程有兩個(gè)相同實(shí)根cout<<"x1=x2="<<-}else));x1=-b/(2*a);if(sign){cout<<"方程有兩個(gè)不同實(shí)根:";}else{//delta<0cout<<"方程無實(shí)根!有兩個(gè)不同復(fù)數(shù)根:";}}}設(shè)計(jì)程序?qū)⑤斎氲陌俜种瞥煽冝D(zhuǎn)換為五分制輸出,90分以上為5分為470~79分為3分,60~69分為2分,60分以下為分。解:10分一檔用10進(jìn)行整除獲得,轉(zhuǎn)換用開PAGE4第二章基本控制結(jié)構(gòu)PAGE4第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)#include<iostream.h>voidmain(){intmark,result;mark是百分制成績,result是5分制if(mark<0)cout<<"缺}(mark/10){case9:case10:case8:result=4;cout<<"輸出五分制績:"<<result<<endl;case7:result=3;cout<<"輸出五分制績:"<<result<<endl;case6:result=2;cout<<"輸出五分制績:"<<result<<endl;break;case5:case4:case3:case2:case1:case0:result=1;cout<<"輸出五分制成績:"<<result<<endl;cout<<"輸入錯(cuò)誤}}編程打印如下圖形**** * * * ******解:難點(diǎn)在三角形左邊的空格的控制,嵌套一個(gè)循環(huán)語句完成此任務(wù)#include<iostream.h>voidmain(){intfor(i=1;i<=4;i++)cout<<"";cout<<"*";} **}編程輸出下列圖形,中間一行英文字母由輸入得到ABCCCDD DDDDCCCCCBBB解:分上三角和下三角兩部分分別處理左邊的空格#includecharin;inti,j;if((in>=97)&&(in<=122))in-=32;//小寫改大intline=in-fori=0;i<=line;i++){//上cout<<''<<char(i+'A');}fori=line;i>0;i--){//下三角(少一行)cout<<"cout<<''<<char(i-1+'A');PAGE6第二章基本控制結(jié)構(gòu)PAGE6第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)}}輸入n,求遞推法運(yùn)算速度大大提高,同時(shí)兩者可合并為一個(gè)循環(huán)。本程序考慮了輸入的#include<iostream.h>#include<stdlib.h>voidmain(){intdoubleresult=0;result是結(jié)果{cout<<"輸入錯(cuò)誤}for(int{jch*=i;//jch是i的階乘,注意n!=n*(n-1)!這樣可少一層循}}幾個(gè)桃子。解:采用遞推法。從最后一天逆推到第一天,9次循環(huán)。#include<iostream.h>constintvoidinti,x=1;//最后一天只有一個(gè)cout<<"開始共有桃子"<<x<<"個(gè)。}從鍵盤輸入一組非0整數(shù),以輸入0標(biāo)志結(jié)束,求這組整數(shù)的平均值,并統(tǒng)計(jì)其中的個(gè)數(shù)。將這組整數(shù)放在整型數(shù)組中邊輸入一邊求和及統(tǒng)計(jì)正數(shù)和負(fù)數(shù)的個(gè)數(shù)數(shù)由和除以整數(shù)數(shù)量取得。#include<fstream.h>#include<iostream.h>voidmain(){intstem[256],sum=0,pnum=0,nnum=0,i=0;cout<<"while(stem[i]!=0){];//求和if(stem[i]>0)pnum++;//正數(shù)數(shù)量else}if(!i)cout<<"0個(gè)數(shù)elsecout<<"平均值="<<(double)sum/(pnum+nnum)<<endl;//平均值習(xí)慣不用整數(shù)cout<<"正數(shù)個(gè)數(shù)="<<pnum<<endl;cout<<"負(fù)數(shù)個(gè)數(shù)}}編程找出1~500之中滿足除以3余2,除以5余3,除以7余2的整數(shù)。#include<iostream.h>voidmain(){inti;}編程求1000之內(nèi)的所有完全數(shù)。所謂完全數(shù)指的是一個(gè)數(shù)恰好等于它的所有因子和。例如6=1+2+3,就是一個(gè)完全數(shù)。解:采用窮舉法。兩重循環(huán),外層是從1到999依次處理,內(nèi)層是求該數(shù)的所因子的和,并判斷是否等于該數(shù)#include<iostream.h>voidmain(){inti,a,sum_yz;sum_yz是a的因子+){sum_yz=0;if(a%i==0)sum_yz+=i;if(a==sum_yz)}第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) }將100元換成用10元、5元和1元的組合,共有多少種組合方法。解:采用窮舉法??紤]10元最多10張,520張,余下是1#include<iostream.h>voidmain(){for(inti=0,j,k,count=0;i<=10;i++)//i是10元張數(shù),j是5元張數(shù),k是元張 }}}利用反正切展開計(jì)算π的近似值,要求誤差10- 如下3arctg(x)≈x

xx +x 令x=1,可計(jì)算出π/4的近似值解:采用遞推法。初看每一項(xiàng)的遞推通式不易寫出,但每一項(xiàng)全看作奇數(shù)項(xiàng),而偶數(shù)項(xiàng)全零,則很容易寫出:第1項(xiàng)為x,第3項(xiàng)為第1項(xiàng)乘以x的平方除以項(xiàng)序號3乘以-1,其余類推。同時(shí)和的誤差constdoublee=1e-6;voiddoublex,a,sum;inti=3;"<<endl;cin>>x;;do{}第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) 用迭代法求方程x2+10cosx=0的根,誤差限為10-5。迭 如下 x ?10( sin ?10sin解:迭代法也是用循環(huán)語句實(shí)現(xiàn),數(shù)學(xué)constdoublee=1e-5;voidfloatx0,x1;intn=0;"<<endl;cin>>x1;x1=(x0*x0-10*(x0*sin(x0)+cos(x0)))/(2*x0-}while((fabs(x1-x0)>e)&&(n<=1e5));cout<<"超出迭代1e5次elsecout<<"方程x*x+10*cos(x)=0的一個(gè)根為:"<<x1<<endl;} 。規(guī)定A不和J比賽,M不和D及E比賽。列出所有可能的比賽 這是一個(gè)組合問題窮舉法5個(gè)位置設(shè)甲隊(duì)5名隊(duì)員位置不變乙隊(duì)改員位置進(jìn)行配對1個(gè)位置可在5個(gè)隊(duì)員中任選一個(gè)的位置必須扣除已選過的隊(duì)員。并扣除不能配對的情況,即得所有可能的比。charintfor(j=0;j<5;j++){//0號if(j==0)continue;//A不與J比賽,即st1[0]不st2[0]比for(k=0;k<5;k++){//1號if(k==j)continue;if(l==j||l==k)continue;for(m=0;m<5;m++){//3號第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) if(m==3)continue;//M不與D比賽,即st1[3]不與st2[3]比賽if(n==3)continue;//M不與E比賽,即st1[4]不與比if(n==j||n==k||n==l||n==m)}}}}}}為1、2、3、4。人直接鍵入候選人代號,1~4之外的整數(shù)視為棄權(quán)票,-1為終止志。打印各位候選人的得票以及當(dāng)選者(得票數(shù)超過選票總數(shù)一半)解:用5個(gè)元素的整型數(shù)組,分別放棄權(quán)票和各候選人的得票,然后用開關(guān)語句voidmain(){enumcandidate{feipiao,zhang,wang,li,zhao}cand;intvote[5]={0},i,k=0,n;if(n>=1&&n<=4)vote[n]++;elsevote[0]++;}for(i=0;i<5;i++){c;switch(cand){casefeipiao:casezhang:cout<<setw(10)<<"zhang"<<'\t'<<vote[cand];if(vote[cand]>k/2)cout當(dāng)選elsecout<<endl;casewang:cout<<setw(10)<<"wang"<<'\t'<<vote[cand];if(vote[cand]>k/2)cout<<"當(dāng)選"<<endl;第二章基本控制結(jié)構(gòu)第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)elsecout<<endl;and];if(vote[cand]>k/2cout<<"當(dāng)選"<<endl;elsecout<<endl;casezhao:cout<<setw(10)<<"zhao"<<'\t'<<vote[cand];if(vote[cand]>k/2)cout<<"當(dāng)選"<<endl;elsecout<<endl;}}}改造【例3.11將運(yùn)行結(jié)果(Fibonacii數(shù)列的前20項(xiàng))解:采用3步法。首先建立或打開一個(gè)輸出文件,并與磁盤文件聯(lián)系ofstreamofile("myfile3_16.txt再按一定格式存入數(shù)據(jù):ofile<<setw(15)<<fib0<<setw(15)<<fib1;等然后關(guān)閉文件:ofile.close();如要讀出數(shù)據(jù),則用輸入文件ifstreamifile("myfile3_16.txt");再輸出最后關(guān)閉文件:file.close();constintm=20;voidmain(){intfib0=0,fib1=1,fib2,i,j,k,l;charch,a[256];ofstreamofile("myfile3_16.txt");fib1;for(intn=3;n<=m;n++){if(n%5==0) //控制每行5個(gè)數(shù)fib0=fib1;ofile.closecout<<"是否要將文件輸出?Y或N"<<endl;cin>>ch;ifstreamifile("myfile3_16.txt");ifile>>i>>j>>k>>l;//由文件讀if(ifile.eof()!=0)break;//屏幕顯}}}改造【例3.16將運(yùn)行結(jié)果(100以內(nèi)素?cái)?shù))存入文件。解:采用4步法。首先定義一個(gè)輸出文件:ofstreamofile;ofile.open("myfile3_17.txt");按一定格式把數(shù)據(jù)存入文件。最后關(guān)閉文件。效果與3步法相同。讀文件同樣可用3步法或4步法。h>constintn=100;voidinta[n],i,j;for(i=0;i<n;i //用數(shù)組保存整數(shù)100 //1不是素?cái)?shù),置if(a[i]==0)continue; for(j=i+1;j<n;j++)if(a[j]%a[i]==0)a[j]=0是a[i]倍數(shù)的元素}t");intcount=0; if(a[i]!=0){ofile<<se ofile<<endl;//每行10個(gè)數(shù)ofile.closecout<<"是否if(ch=='y'||ch=='Y'){ifile.owhile(ifile.get(b[i])){//不可用>>,它不能讀白字符第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) if(b[i]=='\n')break;}l;count=0;顯示 cout<<endl;//每行10個(gè)數(shù)if(ifile.eof()!=0)break;//這里與例3.20不同,最后一個(gè)數(shù)據(jù)后面可能沒有回車,直接為文件束}}}改造【例3.10文本由文本文件輸入解:文本文件讀入要用成員函數(shù):ifile.get(),而不可用插入運(yùn)算符<<,否則會丟失空白字符。voidmain(){charch; ep3_18.cpp"<<endl;do{ //遇換行符行+1if(ch!=''&&ch!='\t'&&ch!='\n'&&ch!=EOF讀到間隔if(!isword)nword++; 數(shù)+1nch++; }else //讀到間隔 //讀到文本結(jié)束符為ifile.close();cout<<"數(shù)"<<nword<<endl;cout<<"字}\第三章數(shù)習(xí)題第三章函數(shù)習(xí)

第二章基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí) 一.基本概念與基礎(chǔ)知識自填空被定義為形參的是在函數(shù)中起(1)用的變量,形參只能用(2)示。實(shí)參的作用是(3),實(shí)參可以用(4)、(5)、(6)表示。自變變量將實(shí)際參數(shù)的值傳遞給具有值的變常表達(dá)局部域包括(1)(2)(3)用局部變量的意義在(4)塊函數(shù)函數(shù)原型局部變量具有局部作用域使得程序在不同塊中可以使用同名變靜態(tài)局部變量在(1)區(qū),在(2)時(shí)候建立,生存期為(3),如定義時(shí)未顯式初始化,則其初值為(4)。全局?jǐn)?shù)據(jù)編全局生存全局部變量在(1)區(qū),在(2)時(shí)候建立,生存期為(3),如定義時(shí)未顯式初始化,則其初值為(4)。棧在函數(shù)或塊開始執(zhí)行函數(shù)或塊的執(zhí)行隨機(jī)編譯預(yù)處理的作用是(1)預(yù)處理指令的標(biāo)志是(2)多文件系統(tǒng)中,程序由(3)來管理,用戶自定義頭文件中通常定義一些(4)。譯并生成目標(biāo)代碼#工程文數(shù)習(xí)題用戶構(gòu)造的數(shù)據(jù)類型(如枚舉類型)數(shù)等具有一定通用性或常用的量設(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)答案:4411035abcf(a,b)f(a,c)main()f(a,b)f(a,c)410xy510xyreturnx%y+1;returnx%y+1;答案下列程序的輸出結(jié)果分別為(1)(2)usingnamespacestd;inta,b;voidf(int數(shù)習(xí)題staticinti=a注意靜態(tài)局部變量intm,n;m=i+j;i++;j++;n=i*j;a++;}intmain(){a=1;b=2;f(b);f(a);return0;}i=2j=3m=3n=6對應(yīng)藍(lán)色)i=3j=3m=4n=9對應(yīng)綠色)a=3b=2usingnamespacestd;floatsqr(floata){returna*a;}floatp(floatx,intn){if(n==0)return1;elseif(n%2!=0)returnx*sqr(p(x,n/2));elsereturnsqr(p(x,n/2));}intmain(){return0;}數(shù)習(xí)題圖解遞歸,共五層,返回值是回歸時(shí)產(chǎn)in-process:x=2n=13in-process:x=2n=6in-process:x=2n=3in-process:x=2n=1in-process:x=2n=0簡答不同?答:實(shí)參和形參的個(gè)數(shù)和排列順序應(yīng)一一對應(yīng),并且對應(yīng)參數(shù)應(yīng)類型匹配(兼容),當(dāng)有缺省參數(shù)時(shí)可以不同。求?答:內(nèi)聯(lián)函數(shù)的調(diào)用機(jī)制與一般函數(shù)不同,編譯器在編譯過程中遇到iline該函數(shù)建立一段代碼,而后在每次調(diào)用時(shí)直接將該段代碼嵌入到調(diào)用函數(shù)中,從而將函數(shù)調(diào)用方式變?yōu)轫樞驁?zhí)行方式,這一過程稱為內(nèi)聯(lián)函數(shù)的擴(kuò)展或內(nèi)聯(lián)。內(nèi)聯(lián)函數(shù)的實(shí)質(zhì)是犧牲空間來換取時(shí)間。因inlin指示符對編譯器而言只是一個(gè)建議,編譯器也可以選擇忽略該建議,內(nèi)聯(lián)函數(shù)只適用于功能簡單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語句,如wit、復(fù)雜i嵌套、while語句等,以及無法內(nèi)聯(lián)展開的遞歸函數(shù),都不能定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。全局變量和全局靜態(tài)變量的區(qū)別在哪里?為什么提倡盡量使用局部變量?答:有ttic 第三章函數(shù)習(xí)題5各自在自己的作用域中可見,在其它地方不可見。所以提倡盡量使用局部變量數(shù)在調(diào)用時(shí)是怎樣進(jìn)行對應(yīng)的?答:函數(shù)重載可以定義幾個(gè)功能相似,而參數(shù)類型不同使用相同的函數(shù)名的函用相同的函數(shù)名來定義一組功能相同或類似的函數(shù),程序的可讀性增強(qiáng)。在定義重載函數(shù)時(shí)必須保證參數(shù)類型不同,僅僅返回值類型不同是不行的函數(shù)。匹配過程按如下步驟進(jìn)行:如果有嚴(yán)格匹配的函數(shù),就調(diào)用該函數(shù)參數(shù)內(nèi)部轉(zhuǎn)換后如果匹配,調(diào)用該函數(shù)通過用戶定義的轉(zhuǎn)換尋求匹配答:多文件結(jié)構(gòu)通過工程進(jìn)行管理,在工程中建立若干用戶定義的頭文件.和源程序文件.p。頭文件中定義用戶自定義的數(shù)據(jù)類型,所有的程序?qū)崿F(xiàn)則放在不同的源程序文件中。編譯時(shí)每個(gè)源程序文件單獨(dú)編譯,如果源程序文件中有編譯預(yù)處理指令,則首先經(jīng)過編譯預(yù)處理生成臨時(shí)文件存放在內(nèi)存,之后對臨時(shí)文件進(jìn)行編譯生成目標(biāo)文件.ob,編譯后臨時(shí)文件撤銷。所有的目標(biāo)文件經(jīng)連接器連接最終生成一個(gè)完整的可執(zhí)行文件.x。進(jìn)行合理的功能劃分后,更容易設(shè)計(jì)、調(diào)試和;另外,通常把相關(guān)函數(shù)放在宏定義與常量定義從作用及效果上看是一樣的,二者是否完全相同答:完全不同。不帶參宏定義與on說明符定義常量從效果上看是一樣的,但它們的機(jī)制不同。首先宏定義是在預(yù)處理階段完成,而on現(xiàn)。其次宏定義只是一種簡單的字符串替代,不會為字符串分配內(nèi)存單元,替代過程也不作語法檢查,即使指令中的常量字符串不符合常量要求,預(yù)處理的替代過程也照樣按指令給出的格式進(jìn)行。而on定義則是象定義一個(gè)變量一樣定義一個(gè)常量標(biāo)識符,系統(tǒng)要按照類型要求為該標(biāo)識符分配內(nèi)存單元,同時(shí)在將常量放入單元時(shí)進(jìn)行類型檢查,如果類型不匹配,類型相容的會進(jìn)行系統(tǒng)的類型轉(zhuǎn)換,不相容的則要提示錯(cuò)誤。二.編程與綜合練習(xí)設(shè)計(jì)函數(shù),將小寫英文字符變?yōu)閷?yīng)的大寫字符usingnamespacestd;charcapitalize(charch){if(ch>='a'&&ch<='z')returnch-'a'+'A';elsereturnch;}數(shù)習(xí)題6intmain(){inti=0;charcp[30];while(cp[i]!='\0')cout<<capitalize(cp[i++]);return}設(shè)計(jì)兩個(gè)函數(shù),分別求兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)解:可用窮舉法求最大公約數(shù)(從大到小找到的第1個(gè)公約數(shù))和最小公倍數(shù)(小到大找到的第個(gè)公倍數(shù))。usingnamespacestd;monDevisor(intn,intintif(n%i==0&&m%i==0)break;returni;}monMultiple(intn,intintif(i%n==0&&i%m==0)break;returni;}intmain(){inti,j;cout<<"最大公約數(shù) return0;}設(shè)計(jì)函數(shù)digit(num,k),返回整數(shù)num從右邊開始的第k位數(shù)字的值。例如解:把整數(shù)轉(zhuǎn)換為數(shù)串,放在一個(gè)整型數(shù)組中usingnamespacestd;digit(intnum,intk){int數(shù)習(xí)題7inti=0;if(k<=ireturns[k-1題目中位數(shù)的下標(biāo)從1開始,而數(shù)組下標(biāo)從0開始elsereturn0;}intmain(){return0;}設(shè)計(jì)函數(shù)fato(nm,,返回整數(shù)nm中包含因子的個(gè)數(shù),如果沒有該因子,則返回。解:必須先判斷整數(shù)m能否被k整除usingnamespacestd;factors(intnum,intk){//缺省返回值為整型intcount=0;}return}intmain(){return0;}歌德巴赫猜想 :任何一個(gè)充分大的偶數(shù)都可以表示為兩個(gè)素?cái)?shù)之和。如:4=2+26=3+38=3+5……將4.5成。解:用pim所有組合中找兩個(gè)數(shù)均為素?cái)?shù)者。usingnamespacestd;boolprime(intm){if(m==1||m==0)returnfalse;第三章函數(shù)習(xí)題8if(m==2)returntrue;intfor(inti=2;i<=k;i++)//窮舉法if(m%i==0)break;if(i>k)returntrue;elsereturnfalse;}intfor(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;//列出所有可能組}return}設(shè)計(jì)函數(shù)打印直方圖,直方圖寬度為行,每列代表數(shù)據(jù)表示10%。||解:為簡單將a%用a表示usingnamespacestd;voidPrintDiagram(intm){inti;for(intj=0;j<m;j++)cout<<'*';}}intmain(){return0;}定義遞歸函數(shù)實(shí)現(xiàn)下列Ackman 0m0,n))1,(,1(0n110m1),(nmAcmmAcm),Acm(m-數(shù)習(xí)題其中、為正整數(shù)。設(shè)計(jì)程序求A(2,1,m(3,2。解:遞歸函數(shù)實(shí)現(xiàn)非常簡單,按寫即可。#inlud<iotam>usingnamespaceAcm(intm,intn){if(m==0)returnn+1;if(n==0)returnAcm(m-1,1);returnAcm(m-1,Acm(m,n-1));}intmain(){return0;}用遞歸函數(shù)實(shí)現(xiàn)勒讓德多項(xiàng)式 1n/))()1()()12((1n0n在主函數(shù)中求P4(1.5)解:把勒讓德多項(xiàng)式的階和自變量都作為參數(shù)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-}intmain(){return}定義內(nèi)聯(lián)函數(shù)實(shí)現(xiàn)求三個(gè)實(shí)數(shù)中的最大值含復(fù)雜結(jié)構(gòu)控制語句,如wit、復(fù)雜嵌套、whil語句等,以及無法內(nèi)聯(lián)展開#inlud<iotam>usingnamespaceinlinemax(inta,intb,intc){if(a>b&&a>c)returna;if(b>a&&b>c)returnb;returnc;}數(shù)習(xí)題10intmain(){return0;}定義內(nèi)聯(lián)函數(shù),判斷一個(gè)字符是否為數(shù)字字解:數(shù)字字符ASCII碼值是連在一起的,可用ch>='0'&&ch<='9'來判斷usingnamespacestd;inlineboolIfDigitChar(charch){if(ch>='0'&&ch<='9')return1;elsereturn}intmain(){charch;if(IfDigitChar(ch))cout<<ch<<"isadigitchar"<<endl;elsecout<<ch<<"isnotadigitchar"<<endl;}return}個(gè)實(shí)數(shù)求余定義為實(shí)數(shù)四舍五入取整后相除的余數(shù)。解:實(shí)數(shù)四舍五入取整,正數(shù)是+0.5取整,負(fù)數(shù)是-0.5取整usingnamespacestd;mod(intn,intm){returnn%m;}round(doublex四舍五入函數(shù)if(x>=0)returnint(x+0.5);elsereturnint(x-}mod(doublex,doubley){returnround(x)%round(y);}intmain(){第三章函數(shù)習(xí)題11return0;}注意:mod(doublex,doubley)形參類型不可以寫成float,因?yàn)樵诤瘮?shù)中建立一個(gè)頭文件aa.,在其中定義兩個(gè)面積函數(shù)aa為的圓的面積和邊長為和的矩形面積。另外建立一個(gè)實(shí)現(xiàn)文件aa.p,在其中定義主函數(shù)。通過包含aa.,輸入數(shù)據(jù)并輸出圓和矩形的面積。解:兩個(gè)面積函數(shù)area(),一個(gè)是單參數(shù),一個(gè)是雙參數(shù)//頭文件doublearea(doubler){return3.14*r*r;}doublearea(doublea,doubleb){returna*b;}usingnamespacestd;intmain(){doublea,b,r;cout<<"inputradius:"<<endl;cout<<"inputsidelength:"<<endl;return0;}注意:例題源代碼中,為了使文件命名方式一致,采用xp3_1.和xp3_14.pp來命名。下面遞歸函數(shù)執(zhí)行結(jié)果是什么voidp1(intw){inti;for(i=0;i<w;i++)cout<<’\t’<<w;p1(w-}}調(diào)用p1(4)數(shù)習(xí)題按照打印語句:for(i=0;i<w;i++)cout<<’\t’<<w;可得輸出為①4444第1次②333//第2次③22第3次1第4次voidp2(intw){inti;p2(w-for(i=0;i<w;i++)cout<<’\t’<<w;p2(w-}}調(diào)用p2(4)按照次序和打印語句,可得輸出為:①②2③④⑤⑥⑦ ⑨數(shù)習(xí)⑩⑾⑿⒀⒁⒂voidp3(intw){inti;for(i=0;i<w;i++)cout<<’\t’<<w;}}調(diào)用p3(4)按照次序和打印語句,可得輸出為:①444②33③2④⑤⑥2⑦voidp4(intw){inti;for(i=0;i<w;icout<<’\t’<<w;第三章函數(shù)習(xí)題14p4(w-for(i=0;i<w;i++)cout<<’\t’<<w;}}調(diào)用p4(4)按照次序和打印語句,可得輸出為:①444②33③2④⑤⑥2⑦33⑧444第四章類與對象習(xí) 第四章類與對象習(xí)一.基本概念與基礎(chǔ)知識自測填空5.1.1引入類定義的關(guān)鍵字 ,類的數(shù)據(jù)成員通常指定為 。指定為 的成員可以在類對象所在域中的任何位置它們。通常用類 (6)成員表示類的操作。公有的私有的公有的數(shù)函類的限定符包括(1) 、(2) 和(3) 函數(shù)來(讀和寫。這些函數(shù)統(tǒng)稱。答案:public(公有的private(私有的protected(保護(hù)的公有的成員函類的接通常在邏輯上,同一類的每個(gè)對象都有(1)代碼區(qū),用以成員函數(shù)。而在物理上通常只有 (2)代碼區(qū)。只有在(3)定義,并(4)的函數(shù)和加了關(guān)鍵字 (5)獨(dú)立在類說明不包括循環(huán)等復(fù)雜C++中支持三種域:(1)、(2)、(3)。函數(shù)域被包括(4)中,全局域被包括在(5)中。using指示符以關(guān)鍵字using開頭,后面是關(guān)鍵字(6)(7)這樣表示以后在該名字空間。如不使用using指示符則在使用時(shí)要加::,稱為運(yùn)算符。局部域(local名字空間域(namespace類域(class名字空間名字空間第四章類與對象習(xí) 域通常用作函數(shù)的(1)和(2)。對數(shù)組只能(3)不能(4)。答案:參返回?cái)?shù)組元4.1.6構(gòu)造函數(shù)的4.1.6構(gòu)造函數(shù)的任務(wù)是構(gòu)造函數(shù)。類中可以 個(gè)構(gòu)造函數(shù),它們()區(qū)分。如果類說明中沒有給出構(gòu)造函數(shù),則C++編譯器會 函數(shù)時(shí),系統(tǒng)會自動提供 。答初始化數(shù)據(jù)成函數(shù)返回類型說多不同的參數(shù)自動給出一個(gè)默認(rèn)的構(gòu)造函同一類對象的默認(rèn)的的構(gòu)造函,稱為默認(rèn)的按成員語義支持被依次 數(shù)。答案:一對象注銷 左操作數(shù)是 關(guān)鍵字operator和該運(yùn)對該函數(shù)的參面向過程的程序設(shè)計(jì)中程序模型描述為(1),面向?qū)ο蟪绦蛟O(shè)計(jì)的程序模型可描述為(2)。“程序=算法+數(shù)據(jù)結(jié)構(gòu)。其數(shù)據(jù)與數(shù)據(jù)處理是分離的計(jì)將數(shù)據(jù)和對數(shù)據(jù)的操作方法放在一起,形成一個(gè)相對獨(dú)立的整體——對(Object通簡答簡單解釋什么是面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝性對象是一個(gè)封裝體該對象所具有的屬性和操作對象作為獨(dú)立的基本單實(shí)現(xiàn)了將數(shù)據(jù)和數(shù)據(jù)處理相結(jié)合的思想還體在可以限制對象中數(shù)據(jù)第四章類與對象習(xí) 據(jù)隱藏。一個(gè)定義完好的類一旦建立為一個(gè)整體單元使用戶不需要知道這個(gè)類是如何工作的數(shù)據(jù)的可靠護(hù)類中的數(shù)據(jù)不被類以外的程序隨意使用這兩個(gè)優(yōu)點(diǎn)十分有利于程序的調(diào)試和。C++編譯器怎樣對標(biāo)識符進(jìn)行解析?編譯器對標(biāo)識符的解析分兩步,第一步查找在中用到的標(biāo)識符特別是函數(shù)成員聲明中用到的參數(shù)類型,為什么說類與對象的概念是客觀世界的反映?答:客觀世界的事物都具有某些屬性和行為(或操作,具有相同屬性和行為的事物可以歸屬于一類分類的方法可以提高認(rèn)識事物的效率義的類則是通過抽象的方法將某一類事物共有的靜態(tài)特(屬性和動態(tài)特(行為概括出來并加以描述,而對象是類的具體實(shí)現(xiàn),所以說類與對象的概念是客觀世界的反映。什么叫類域?為什么說類域是抽象的?類域是類體所包括的范圍個(gè)類定義都引入了一個(gè)獨(dú)立的類域類域中說明的標(biāo)識符僅在該類的類域中:作為函數(shù)參數(shù)時(shí)為什么能實(shí)現(xiàn)兩個(gè)實(shí)參之間的數(shù)據(jù)交換?為什么對應(yīng)實(shí)參不能為?為什么返回值為的函數(shù)可以作為左值?答 變量是其關(guān)聯(lián)變量的別名二者在內(nèi)存中占據(jù)同一個(gè)單元在一個(gè)以作為參數(shù)的函數(shù)中交換兩個(gè)參數(shù)的值實(shí)際上就是交換兩個(gè)實(shí)參的值如果函數(shù)的參數(shù)是,調(diào)用時(shí)需要取得實(shí)參的地址而實(shí)參如果已經(jīng)是一個(gè)地址再進(jìn)行將產(chǎn)生錯(cuò)誤故對應(yīng)實(shí)參不能為。:函數(shù)返回實(shí)際是指(返回了相應(yīng)的關(guān)聯(lián)變量所以返回值為際上是將關(guān)聯(lián)變量作為左值參與運(yùn)算什么是缺省的構(gòu)造函數(shù)?缺省的構(gòu)造函數(shù)最多可以有多少個(gè)?答:如果在缺省值的,C++編譯器都認(rèn)為是缺省的構(gòu)造函數(shù)。缺省的構(gòu)造函數(shù)只能有一個(gè)面?答:用類的一個(gè)對象去初始化該類的另一個(gè)對象時(shí)使用當(dāng)函數(shù)的形參是類的對象,調(diào)用函數(shù)時(shí),進(jìn)行形參與實(shí)參結(jié)合時(shí)使用當(dāng)函數(shù)的返回值是類對象,函數(shù)執(zhí)行結(jié)束返回調(diào)用者時(shí)使用寫出含有對象成員的類的構(gòu)造函數(shù)的格式,并做簡單說明。答:C++中對含對象成員的類對象的構(gòu)造函數(shù)有固定的格式:類名::構(gòu)造函數(shù)名(參數(shù)總表):對象成員1(參數(shù)名表1),對象成員2(參數(shù)名表2),……對象成第四章類與對象習(xí) n(參數(shù)名表n依次為調(diào)用相應(yīng)對象成員所屬的構(gòu)造函數(shù)時(shí)的實(shí)參表這些表中的參數(shù)通常來自冒號前的參數(shù)總表,但沒有類型名?!埃截愘x值類對象之間可以用“=”直接拷貝。因?yàn)槿笔〉馁x值操作返回一個(gè)對象的,所以它可以進(jìn)行連續(xù)賦值?!霸偌訉ο蟪蓡T名?答:友元函數(shù)不是類的成員函數(shù),在函數(shù)體中對象的成員,必須用對象名加運(yùn)算符“.”加對象成員名。這一點(diǎn)和一般函數(shù)一樣。重載復(fù)數(shù)運(yùn)算符+時(shí),采用下面友元函數(shù):friendComplexoperator+(Complex plex&c2);為什答使用類型變量作為運(yùn)算符重載函數(shù)的參數(shù)身為左值的實(shí)數(shù)類型實(shí)參不能在一份拷貝上進(jìn)行,則可以實(shí)現(xiàn)“實(shí)數(shù)+復(fù)數(shù)”運(yùn)算。修改后的說明為friendComplexoperator+(constComplex&c1,constComplex類的靜態(tài)數(shù)據(jù)成員與函數(shù)中的靜態(tài)成員有何異同?類的靜態(tài)成員為其所有對象共享對象靜態(tài)成員只有一份存于公用內(nèi)存中,為該類所C++中結(jié)構(gòu)、聯(lián)合與類三者間有何同答:在C++中結(jié)構(gòu)(structure)與類幾乎是完全一樣的類型,差別僅僅在于缺省情況下的成員為公有的。聯(lián)合(union)C++的導(dǎo)出數(shù)據(jù)類型,在語法與功能上類似于結(jié)構(gòu),二者的區(qū)別是結(jié)構(gòu)變量的各成員同時(shí)被分配了各自獨(dú)立的內(nèi)存區(qū)而聯(lián)合變量的各個(gè)成員的開始地址都相同,所以在任一時(shí)刻聯(lián)合變量只能一個(gè)成員。對象的第一特征是封裝,那么由對象組成的面向?qū)ο蟮某绦蛟鯓咏⒏鲗ο笾g聯(lián)系?面向?qū)ο蟪绦虻慕M織與面向過程有什么不同?為對象的操作主要用來響應(yīng)外來消息并為其他對象提供服務(wù)對象的程序利用消息傳遞機(jī)制來建立各對象之間的有效聯(lián)系協(xié)調(diào)各對象的運(yùn)行個(gè)對象可以向其他對象發(fā)送消息以請求服務(wù)響應(yīng)其他對象傳來的消息從而服務(wù)于其他對象。面向過程的程序是模塊化的,模塊的組織具有分層結(jié)構(gòu)特點(diǎn),層與層之間調(diào)用關(guān)系面向?qū)ο蟪绦蚴怯梢粋€(gè)個(gè)封裝的對象組成對象是由緊密結(jié)合在一起的算法數(shù)據(jù)結(jié)構(gòu)組成。對象之間是相互請求和相互協(xié)作的關(guān)系第四章類與對象習(xí) 簡敘Windows下應(yīng)用程序的運(yùn)行方式答:Windows系統(tǒng)支持多個(gè)應(yīng)用程序同時(shí)執(zhí)行,在界面形式上,它支持多個(gè)窗口同時(shí)活動。它的運(yùn)行機(jī)制是“消息傳遞和驅(qū)動(messagebasedandeventdivWindows系統(tǒng)使用驅(qū)動的編程模式。所謂的含義非常廣泛。輸入設(shè)備的動作,如敲打鍵盤、按鼠標(biāo)等會產(chǎn)生一系列的(注意不是一個(gè)。操作系統(tǒng)所作的一舉一動也被當(dāng)作某種類型的,應(yīng)用程序也會產(chǎn)生各種事件。用來標(biāo)識發(fā)生的某件事情。Windows系統(tǒng)對于應(yīng)用程序環(huán)境中發(fā)生的每一個(gè)都會以對應(yīng)的某種消息的形式標(biāo)識,并放入相應(yīng)的Windows建立的消息隊(duì)列中,然后由對應(yīng)的應(yīng)用程序或窗口函數(shù)去處理。窗口函數(shù)處理是分層的處理不了的送到后面后處理不了剩下的全由缺省的窗口函數(shù)處理。函數(shù)應(yīng)該定義為私有的這是開發(fā)類時(shí)故意對外隱蔽起來的操作這些往往是最復(fù)雜最關(guān)鍵的部分。類中故意的隱藏也為以后的升級擴(kuò)展留下了余地不變內(nèi)部再變來的程序,就象MFC(微軟基礎(chǔ)類)升級后,由MFC底層類所編的程序完全不必修改,自動升級。二.編程與綜合練習(xí)(Timedate,函數(shù)成員包括設(shè)置日期時(shí)間和輸出時(shí)間,其中年、月請用枚舉類型,并完成測試(包括用成員函數(shù)和用普通函數(shù))解:本題要求僅是定義類的練習(xí),并非實(shí)用的提供日期時(shí)間的程序。實(shí)用的日期時(shí)間見附錄二的日期時(shí)間函數(shù)。#include<iostream>#include<iomanip>usingnamespaceenumenumMT{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};classTimedate{YRyear;intdate;inthh;intm=0;ss=0;}Timedate(YRa,MTb,intc){第四章類與對象習(xí) }voidgetdate(YR&,MT&,int&);//使用一次取得3個(gè)數(shù)voidgettime(int&,int&,intputdate(YR,MT,int);puttime(int,int,int);voidlist();voidTimedate::getdate(YR&y,MT&m,int&d){}voidTimedate::gettime(int&a,int&b,int&c){}voidTimedate::putdate(YRa,MTb,intc){}voidTimedate::puttime(inta,intb,intc){}voidTimedate::list(){//成員函數(shù),直接私有的數(shù)據(jù)成cout<<"year/month/date };case;casek;casek;casek;case;第四章類與對象習(xí) k;case;case;casek;case}cout<<'/'<<date<<endl;cout<<"hour:minite:second:";}intmain(intargc,char*argv[]){Timedatereturn}(Rectangle,標(biāo),矩形水平放置。操作為計(jì)算矩形周長與面積。測試包括用成員函數(shù)和普解:這里的矩形的4邊分別與xy軸平行,為最簡單的情況。注意參數(shù)有缺省值的函數(shù)的和定義格式。#include<iostream><cmath>usingnamespacestd;classRectangle{doubleleft,top;doubleright,bottom;Rectangle(doublel=0,doublet=0,doubler=0,double~Rectangle(){}; voidAssign(doublel,doublet,doubler,doubledoublegetLeftreturnleft 以下四個(gè)函數(shù)皆為內(nèi)聯(lián)成員函doublegetRight(){returndoublegetTop(){returntop;}doublegetBottom(){returnbottom;}voidShow();double第四章類與對象習(xí) 構(gòu)造函數(shù),帶缺省參數(shù),缺省值為全0,在中指Rectangle::Rectangle(doublel,doublet,doubler,doubleb){left=l;top=t;right=r;bottom=}voidRectangle::Assign(doublel,doubletdoublerdoubleb){//賦值left=l;top=t;right=r;bottom=}voidRectangle::Show(){//成員函數(shù)直接使用私有的數(shù)據(jù)cout<<"left-toppoint("<<left<<","<<top<<")"<<'\n';cout<<"right-bottompointis("<<right<<","<<bottom<<")"<<'\n';}doublereturnfabs((right-left)*(bottom-}doublereturn2*(fabs(right-left)+fabs(bottom-}}

main(){Rectanglerect;Rectanglerect1(0,0,200,200);cout<<"面積"<<rect.Area()<<'\t'<<"周長return(Circle,(radius入半徑并計(jì)算周長、面積,輸出半徑、周長和面積。要求定義構(gòu)造函數(shù)(以半徑為參數(shù),缺省值為0,周長和面積在構(gòu)造函數(shù)中生成)和拷貝構(gòu)造函數(shù)。解:通常所有數(shù)據(jù)成員都在構(gòu)造函數(shù)中賦初值??截悩?gòu)造函數(shù)以本類的參數(shù)usingnamespacestd;classCircle{doubler,Area,Circumference;Circle(double第四章類與對象習(xí) Circle(CirclevoidSetR(doubleR);doubleGetR(){returnr;}doubleGetAreaCircle(){returndoubleGetCircumference(){returna){r=a; }Circle::Circle(Circle&cl){r=cl.r;Area=cl.Area;}R){r=R; }intCirclecout<<"圓半徑:"<<cl3.GetR()<<'\t'<<"圓周長cl2.SetR(4cout<<"圓半徑:"<<cl2.GetR()<<'\t'<<"圓周return0;}設(shè)計(jì)一個(gè)學(xué)校在冊人員 數(shù)據(jù)成員包 (Name,(生日(Birthday)和 (HmeAddress數(shù)包括人員信息的錄入和顯示。還包括構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)。設(shè)計(jì)一個(gè)合適的初始值。解:本題為構(gòu)造函數(shù)等的調(diào)用,加了一些提示語句。usingnamespacestd;enumT class{charId //號,18位數(shù)第四章類與對象習(xí) charName[20]; int 年 日寫charHomeAddress[50];//家庭地(char}

,int,char void void //其他接口函 (char*id,char*name,T ,intbirthday,char*homeadd){

Pscout<<"拷貝構(gòu)造 n); cout<<"析 }void::input(){charch;cout<<"請輸入號,18位數(shù)字:"<<endl;cin.getline(Id,19);cout<<"請輸入:"<<endl;cin.getline(Name,20cout<<"請輸入性第四章類與對象習(xí) =man;else=woman;cout<<"請輸入生日,格式寫作19860818:"<<endl;cin.get();//吸收回車符,否則地址輸不進(jìn)去cout<<"請輸入地址:"<<endl;} Info(){inti;號 <<'\n'<<":"<<Name<<'\n'<<"if(==man)cout<<"男elseif(==woman)cout<<"女elsecout<<""<<'\n';cout<<"出生年月日:";cout<<i/10000<<"年}intPs1("320102811226161","朱海鵬 ,"市浦路1號 fo();return0;}對上面4道題中的類對象的數(shù)據(jù),由 數(shù)、成員函數(shù)和普通函數(shù)使用上的不同。解 元函數(shù)在類中時(shí)權(quán)限僅以5.4題為例。#include<iostream><cmath>usingnamespacestd;classRectangle{doubleleft,top;doubleright,bottom;Rectangle(doublel=0,doublet=0,doubler=0,double~ //析構(gòu)函數(shù),在此函數(shù)體為第四章類與對象習(xí) voidAssign(doublel,doublet,doubler,doubledoublegetLeftreturnleft 以下四個(gè)函數(shù)皆為內(nèi)聯(lián)成員函doublegetRight(){returndoublegetTop(){returntop;}doublegetBottom(){returnbottom;}voidShow();friendvoidshowprint(Rectangle);doubleArea();double 構(gòu)造函數(shù),帶缺省參數(shù),缺省值為全0,在中指Rectangle::Rectangle(doublel,doublet,doubler,doubleb){left=l;top=t;right=r;bottom=}voidRectangle::Assign(doublel,doubletdoublerdoubleb){//賦值left=l;top=t;right=r;bottom=}doublereturnfabs((right-left)*(top-}doublereturn2*(fabs(right-left)+fabs(top-}cout<<"left-toppointiscout<<"right-bottompointis}voidshowprint(Rectangle 函數(shù),要加類名,但直接調(diào)用私有數(shù)據(jù)成cout<<"left-toppointiscout<<"right-bottompointis}voidprint(Rectanglert){//普通函數(shù),要用接口函數(shù)間接調(diào)用私有數(shù)據(jù)成員cout<<"left-toppointis("<<rt.getLeft()<<","<<rt.getTop()<<")"<<'\n';cout<<"right-bottompointis}main(){Rectanglerect;第四章類與對象習(xí) Rectanglerect1(0,200,200,0);cout<<"面積"<<rect.Area()<<'\t'<<"周長return} 試。解:注意后++,返回的是原值,但實(shí)部和虛部已各自增一,所以要先保里是使用成員函數(shù)m>usingnamespacestd;classcomplex{doublereal; doubleimag;//虛部complex(doubler=0.0,doublei=0.0);//構(gòu)造函數(shù)voidprint(); 復(fù)數(shù)complexoperator +(complexc);//重載復(fù)數(shù)"+"complex -(complexc); "complexoperator *(complexc);//重載復(fù)數(shù)"*"complex /(complexc); "/"complexoperator+=(complexc); 載復(fù)數(shù)"+="complexoperator-=(complexc);//重載復(fù)數(shù)"-="complexoperator*=(complexc); "*="complexoperator/=(complexc);//重載complexoperator++(); "++"complexoperator++(int);//重載復(fù)數(shù)后綴plex(doubler,doublereal=r;imag=}complexcomplex::operator+(complexc){ 數(shù)"+"complextemp;returntemp;//返回局部變量,函數(shù)不可為,這時(shí)返回了局部變量地}第四章類與對象習(xí) complexcomplex::operator-(complexc){ complextemp;c.imag;returntemp;}complexcomplex::operator*(complexc){ 數(shù)"*"complextemp;c.real;returntemp;}complexcomplex::operator/(complexc){ 復(fù)數(shù)"/"complextemp;doubled;mag)/d;temp.imag=(c.real*imag-real*c.imag)/d;returntemp;}complexcomplex::operatorcomplexc){//重載復(fù)數(shù)"+="complextemp;;mag;real=temp.real;returntemp;}complexcomplex::operatorcomplexc){//重載復(fù)數(shù)"-="complextemp;returntemp;}complexcomplex::operator*=(complexc){//重載復(fù)數(shù)"*="complextemp;c.real;real=temp.real;return}第四章類與對象習(xí) complexcomplex::operatorcomplexc){//重載復(fù)數(shù)"/="complextemp;doubled;;ag;return}complexcomplex::operator //重載復(fù)數(shù)綴complexag;returntemp;}complexcomplex::operator //重載復(fù)數(shù)綴complex}voidcomplex::print(){ cout<<real;}intcomplexA(30,40),B(15,30),C,D; 復(fù)數(shù)對象cout<<"A為:";A.print();cout<<"C=A++后,C為:";C.print();cout<<"A為:";A.print();C.print();cout<<"A為:";C.print();A*=B;A.print();C=A/B;C.print();A/=B;cout<<"A/=B后,A為第四章類與對象習(xí) cout<<"B為:";B.print();D=A+B+C;cout<<"D=A+B+C后,D為:";D.print();A+=B+=C;A.print();cout<<"B為:";D=A-B-D.print();A-=B+=C;cout<<"A-=B+=C后,A為:A.print();B.print();A=B;A.print();D=A*B*C;D.print();D=D/B/C;D.print();A*=B*=C;A.print();A/=B/=C/=C;A.print();return0;}解double //實(shí)doubleimag虛部complex(doubler=0.0,doublei=0.0);//構(gòu)造函數(shù)voidprint(); friendcomplexoperator+(constcomplex&,constcomplex&)重載復(fù)數(shù)"+"friendcomplexoperator-(constcomplex&,constcomplex&);//重載復(fù)數(shù)"-"friendcomplexoperator*(constcomplex&,constcomplex&重載復(fù)數(shù)"*friendcomplexoperator/(constcomplex&,constcomplex&重載復(fù)數(shù)friendcomplex&operator+=(complex&,constcomplex //重復(fù)數(shù)"+="friendcomplex&operator-=(complex&,constcomplex friendcomplex&operator*=(complex&,constcomplex //重復(fù)數(shù)"*="friendcomplex&operator/=(complex&,constcomplex friendcomplexoperator++(complex //重載復(fù)數(shù)前綴friendcomplexoperator++(complex //重載復(fù)數(shù)后綴plex(doubler,double第四章類與對象習(xí) }complexoperatorconstcomplex&c1,constcomplex 載復(fù)數(shù)complexreturntemp;//返回局部變量,函數(shù)不可為,這時(shí)返回了局部變量地}complexoperatorconstcomplex&c1,constcomplex&c2重載復(fù)數(shù)"-"complextemp;c2.imag;returntemp;}complexoperator*(constcomplex&c1,constcomplex&c2){//重載復(fù)數(shù)"*"complextemp;c2.real;returntemp;}complexoperatorconstcomplex&c1,constcomplex&c2){//重載復(fù)數(shù)"/"complextemp;doubled;mag)/d;temp.imag=(c2.real*c1.imag-c1.real*c2.imag)/d;returntemp;}complex&operator+=(complex&c1,constcomplex&c2){ 復(fù)數(shù)"+="c1.real=c1.real+c2.real;returnc1;//返回由參數(shù)傳遞過來的變量,函數(shù)可為}complex&operator-=(complex&c1,constcomplex&c2){ 復(fù)數(shù)"-="c1.real=c1.real-c2.real;returnc1;}complex&operator*=(complex&c1,constcomplex&c2){ 復(fù)數(shù)"*="complextemp;c2.real;c1=temp;第四章類與對象習(xí) return}complex&operator/=(complex&c1,constcomplex&c2){ 復(fù)數(shù)"/="complextemp;doubled;mag)/d;temp.imag=(c2.real*c1.imag-c1.real*c2.imag)/d;c1=temp;return}complexoperatorcomplex& //重載復(fù)數(shù)前綴returnc;}complexoperatorcomplex&c,int){//重載復(fù)數(shù)后綴"++"complextemp(c.real,c.imag);}voidcomplex::print(){ }intcomplexA(30,40),B(15,30),C,D; 復(fù)數(shù)對象cout<<"A為:";A.print();cout<<"C=A++后,C為:";C.print();cout<<"A為:";A.print();C.print();cout<<"A為:";cout<<"C=A*B后,C為C.print();A*=B;A.print();C=A/B;C.print();A/=B;第四章類與對象習(xí) cout<<"A/=B后,A為A.print();cout<<"B為:";B.print();D=A+B+C;cout<<"D=A+B+C后,D為:";D.print();A+=B+=C;A.print();cout<<"B為:";D=A-B-D.print();A-=B+=C;cout<<"A-=B+=C后,A為:A.print();B.print();A=B;A.print();D=A*B*C;D.print();D=D/B/C;D.print();A*=B*=C;A.print();A/=B/=C/=C;A.print();return0;}分析下面程序的執(zhí)行果int{charword[8];shorintksi[4];cout<<s-}解:參見下 解:參見下 第四章類與對象習(xí) nusingnamespacestd;unioncharword[10];shortintintmain(){//數(shù)字轉(zhuǎn)換為字符串s= 0x6f63;s- 0x7475;s- }通過定義類型轉(zhuǎn)換函數(shù)實(shí)現(xiàn)的。它只能是類的成員函數(shù),不能是函類名::operator轉(zhuǎn)換后的數(shù)據(jù)類型()如:operatorfloat()是轉(zhuǎn)換為浮點(diǎn)數(shù)的成員函數(shù)。使用時(shí)的格式為 或(float) 角、分,均為整型。類型轉(zhuǎn)換函數(shù)將類強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù),以圓為9現(xiàn)。usingnamespaceclass //intIYuan;第四章類與對象習(xí) IntRMB(inty=0,intj=0,intf=0);//構(gòu)造函數(shù)voidprint(); operatorfloat();//浮點(diǎn)數(shù)類型轉(zhuǎn)換函數(shù)IntRMB::IntRMB(inty,intj,intf){//構(gòu)造函數(shù)}IntRMB::operatorfloat(){floattemp;temp=float(IYuan+(Jiao/10.0)+(Fen/100.0));returntemp;}voidcoutIYuan元Jiao角Fen分}intfloatcout***轉(zhuǎn)換前<<endl; cout<<"***轉(zhuǎn)換后***"<<endl;cout<<a<<"圓 cout<<"***轉(zhuǎn)換后***"<<endl;cout<<a<<"圓 return0;}第五章數(shù)組與指針習(xí) 第五章與指針習(xí)題數(shù)組定義時(shí)有三個(gè)要素?cái)?shù)組元素的(1)組元素的(2)按元素在數(shù)組中的位置進(jìn)行,是通過(3)進(jìn)行的,稱為(4)或。為了使數(shù)組中數(shù)組的大小修改更為方便,總是將(6)用于數(shù)組長度。答案()類數(shù)下標(biāo)運(yùn)算下索常變C/C++中的數(shù)組用的是一個(gè)(1)的定義即數(shù)組的基本定義構(gòu)成的數(shù)組,三維數(shù)組的元素是(3) ()以數(shù)組作為元二維數(shù)計(jì)算機(jī)內(nèi)存是一維編址的,數(shù)組在內(nèi)存中的(1),C/C++在內(nèi)存中的排(2)(3)(4)。設(shè)數(shù)組a有m行n列,每個(gè)元素占內(nèi)存u個(gè)字節(jié),則a[i][j]的首地址為(5)+。答案()必須要轉(zhuǎn)化為一維方式按行方右越(5)a數(shù)組的首地對于數(shù)組,(1)的大小是確定的所“查數(shù)組邊界只是查(2)的邊界,而(3)的邊界是在控制之中的,所以數(shù)組名作省。()較低最高維(第一維較低各最高指針變量保存了另一變量的(1)值,不可以任意給指針變量賦一個(gè)地址值,只能賦給它(2)和(3)的地址。使用變量名來變量,是按來直接存取變稱為(5)式;而借助指針變量取得另一變量的地址,該變量稱為(6)方式。答案()地第五章數(shù)組與指針習(xí) 已經(jīng)分配了內(nèi)存的變量的按變量的地直間固定指向一個(gè)對象的(1)(2)定義時(shí)const放在(3)。(4)定義時(shí)const放在(6)。答案()指針常指針本身是常const放在類型說明之后,變量名之常量指不能通過該指針修改對const放在類型說明之?dāng)?shù)組名在表達(dá)式中被自動轉(zhuǎn)換為指向(1)針常量,數(shù)組名是地址,但數(shù)組名中放的地址是(2)以數(shù)組名(3)這樣數(shù)組名可以由來代替,C++這樣做使用時(shí)十分方便,但丟失了數(shù)組的另一要,數(shù)組名是指向數(shù)組(6)針,而不是指向數(shù)組(7)的。編譯器按數(shù)組定義的大小分配內(nèi)存,但運(yùn)行時(shí)對(8)不加檢測,這會帶答案()數(shù)組第一個(gè)元不可改變稱指針常指數(shù)組元素的數(shù)元整對數(shù)組的邊界不加檢有一個(gè)三維數(shù)組給出指向三維數(shù)組第i行第j列第k頁元素的指針的三種表達(dá)方式(1) 。再給出這些元素的三種表達(dá)方式 , ()z3d[][j]+k(4)z3d[i][j][k]或簡答物理上,C++是怎樣數(shù)組元素的?請對方法作簡單介紹。答理上,C++語言的下標(biāo)運(yùn)算符[]是以指針作為操作數(shù)的,a[i]被編譯系統(tǒng)解釋*(a+i)表示為a所指(固定不可變)元素向后第i個(gè)元素。無論我們是以下標(biāo)第五章數(shù)組與指針習(xí) 數(shù)組元素時(shí),系統(tǒng)都是轉(zhuǎn)換為指針方法實(shí)現(xiàn)。這樣做對數(shù)組尤其方便什么是回溯算法回溯法是對枚舉法的一種回溯法的基本思想通過對問題的分析找出解決問題的線索一個(gè)局部上找出滿足問題條件的局部的解然后逐步由向整個(gè)問題的解的方向試探,若試探成功就得到問題的解,試探失敗逐步向后退,改部解再向前試探?;厮莘鼙苊饷杜e用數(shù)組名作為函數(shù)的參數(shù)時(shí)為C+只傳遞數(shù)組首地址,而對數(shù)組邊界不加檢查。,需要編寫一個(gè)對數(shù)組通用的算法(即各維的大小未定,怎樣才能把實(shí)參數(shù)組的信息全部傳遞到函數(shù)中去?答:最佳方法是用函數(shù)模板數(shù)組用模板類型參數(shù)傳遞,各維的大小作為參數(shù)以用一維數(shù)組加各,解釋運(yùn)算符“*”和“&”的作用,運(yùn)算符“.”和“->”的作用。答:在“*取地址運(yùn)算符,作用于內(nèi)存中一個(gè)可尋址的數(shù)據(jù)(如:變量,對象和數(shù)組元素等等,操作的結(jié)果是獲得該數(shù)據(jù)的地址。運(yùn)算符“.”和“->”是成員運(yùn)算符(MemberAccessOprator)。在對象或“數(shù)名或函數(shù)名就可以但是這些成員必須是公有的成只有公有成員才能在對象的外面對它進(jìn)行當(dāng)用指向?qū)ο蠛徒Y(jié)構(gòu)變量的指針其公有成員時(shí)則只要在指針變量名后加“->”(箭頭操作符,再加公有成員名就可以了什么是this指針?簡述它的作用。答當(dāng)我們在對象的外部該對象的公有成員時(shí)必須指明是哪一個(gè)對象但是當(dāng)我們用對象的成員函數(shù)來本對象的成員時(shí)在成員函數(shù)中只要給出成員名就可以實(shí)現(xiàn)對該對象成員的。但同一個(gè)類創(chuàng)建的多個(gè)對象共用同一份成員函數(shù)的拷貝。既然是同一份拷貝,那么成員函數(shù)又怎么知道是取哪一個(gè)對象的成員數(shù)據(jù)呢?其實(shí)每一個(gè)對象有一個(gè)隱藏的this它始終指向該對象并將該指針作為一個(gè)參數(shù)自動傳遞給該成員函數(shù)這就是說操作符總是要使用的,只不過在對象內(nèi)是隱式的,即在對象內(nèi)省略了this指針。指針變量與整型量的加減運(yùn)算代表什么意義指針變量與整型量的加減表示移動指以指向當(dāng)前目標(biāo)前面或后面的若干個(gè)位置的目指針與整型量i的加減等于指針值(地址)與i*sizeof(目標(biāo)類型)積的得出新的地址。設(shè)a為數(shù)組名,那么a++是否合法?為什么?答:。因?yàn)閍是指針常量。指針作為函數(shù)的參數(shù)時(shí)它傳遞的是什么?實(shí)參要用什么?而使用時(shí)實(shí)第五章數(shù)組與指針習(xí) 么?何時(shí)只能用指針而不能用答:是地址,是指針?biāo)赶虻淖兞炕驅(qū)ο蟮膬?nèi)存首地址,在物理上講我們傳的指針的值,與傳其它變量是沒有差異函數(shù)獲得的是另一個(gè)變量的地在邏輯上講我們是把另一個(gè)的地址傳過看作傳地址實(shí)參要用變量或?qū)ο蟮牡刂范褂脮r(shí)實(shí)參要用變量或?qū)ο蟊旧?。?shí)參為數(shù)組時(shí),只能用指針而不能用,因?yàn)閿?shù)組的不存在。指針作為函數(shù)的返回值時(shí),應(yīng)該注意什么?答:指針指向的

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論