C++基礎(chǔ)練習題1-9章 自測題 題庫帶答案_第1頁
C++基礎(chǔ)練習題1-9章 自測題 題庫帶答案_第2頁
C++基礎(chǔ)練習題1-9章 自測題 題庫帶答案_第3頁
C++基礎(chǔ)練習題1-9章 自測題 題庫帶答案_第4頁
C++基礎(chǔ)練習題1-9章 自測題 題庫帶答案_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.概念填空題

1.1用一編寫的程序稱為“源程序”。計算機(能/不能)直接識別源程序,必須將其翻

譯成二進制代碼才能在機器上運行。一旦編譯成功,目標程序就可以反復執(zhí)行。

1.2C++的程序由一個或多個組成,其中一定有一個稱為主函數(shù)的___函數(shù)。在組成

程序的函數(shù)中,它是程序執(zhí)行的,也是程序運行的。對函數(shù)的描述由“{}”中

的語句序列完成,每個語句以符號結(jié)束。C++程序大小寫。

1.3布爾型數(shù)值只有兩個:,。在C++的算術(shù)運算式中,分別當作,o

1.4字符由括起來,字符串由括起來。字符只能有個字符,字符串可以有

個字符??沾谋硎痉椒?。

1.5&&與||表達式按的順序進行計算,以&&連接的表達式,如果左邊的計算結(jié)果

為,右邊的計算就不需要進行了,整個邏輯表達式的結(jié)果為。以||連接的表

達式,如果左邊的計算結(jié)果為,就能得到整個邏輯表達式的結(jié)果為。

1.6>>運算符將一個數(shù)右移n位,相當于將該數(shù)2\<<運算數(shù)將一個數(shù)左移n位,

相當于將該數(shù)2%

1.7前置++、--的優(yōu)先級于后置++、-。

2.概念填空題

1」用高級語言編寫的程序稱為“源程序”。計算機不能(能/不能)直接識別源程序,必須將其

翻譯成二進制代碼才能在機器上運行。一旦編譯成功,目標程序就可以反復執(zhí)行。

1.2C++的程序由一個或多個函數(shù)組成,其中一定有一個稱為主函數(shù)的main函數(shù)。

在組成程序的函數(shù)中,它是程序執(zhí)行的入口,也是程序運行的結(jié)束點。對函數(shù)的描

述由“{}”中的語句序列完成,每個語句以」—符號結(jié)束。C++程序區(qū)別大小寫。

1.3布爾型數(shù)值只有兩個:true,false。在C++的算術(shù)運算式中,分別當作0。

1.4字符由二__括起來,字符串由工括起來。字符只能有_』_個字符,字符串可以有0-

多個個字符??沾谋硎痉椒镹ULL。

1.5&&與II表達式按優(yōu)先級的順序進行計算,以&&連接的表達式,如果左邊的計算結(jié)果

為false,右邊的計算就不需要進行了,整個邏輯表達式的結(jié)果為以||連接的表

達式,如果左邊的計算結(jié)果為true,就能得到整個邏輯表達式的結(jié)果為true。

1.6>>運算符將一個數(shù)右移n位,相當于將該數(shù)縮小2%<<運算數(shù)將一個數(shù)左移n位,

相當于將該數(shù)擴大2%

1.7前置++、-的優(yōu)先級高于于后置++、-。

編程題

1輸入平面上某點橫坐標x和縱坐標y,若該點在由圖2-10表示的方塊區(qū)域內(nèi),則輸出1;

否則輸出0。

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain(){

doublex,y;

cin?x?y;

if(abs(x)<=2&&abs(y)<=2)cout?1?endl;

elsecout?0?endl;

return0;

)

2定郵寄包裹的計費標準如下表,輸入包裹重量以及郵寄距離,計算出郵資。

重量(克)郵資(元/件)

155

309

4512

6014(每滿1000公里加收1元)

75及以上15(每滿1000公里加收1元)

*重量在檔次之間按高檔靠

#include<iostream>

usingnamespacestd;

intmain(){

ints,l,w;//s表示郵資,1表示距離,w表示重量

cin?l?w;

if(w<=15)s=5;

elseif(w<=30)s=9;

elseif(w<=45)s=12;

elseif(w<=60)s=14+1/1000;

elses=15+1/1000;

cout?s?endl;

return0;

)

3.某地發(fā)生了一件謀殺案,警察通過確定殺人兇手必為4個嫌疑犯中的一個。以下為4個

嫌疑犯的會供詞。A說:不是我;B說:是C;C說:是D;D說:C在胡說。已知3個人

說了真話,1個人說的是假話?,F(xiàn)在請根據(jù)這些信息,寫一個程序來確定誰是兇手。

#include<iostream>

#include<iomanip>

usingnamespacestd;

intmain()

(

charkiller;

for(killer='A';killer<='D';killer++)

if(((killer!=W)+(killer==C')+(killer=='D')+(killer!=D'))==3)

//三真一假,進行邏輯判斷

cout?nKillerisn?killer;

return0;

4求一個大于指定數(shù)n的最小素數(shù),n由鍵盤輸入。

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain(){

intn,i,k;

cin?n;

while(l){

k=(int)sqrt(++n);

i=l;

while(++i<=k){

if(n%i==0)

break;

}

if(i>k){

cout?n?endl;

break;

)

)

return0;

)

5將100元換成20元、10元和5元的組合,共有多少種組合方法?

#include<iostream>

usingnamespacestd;

intmain(){

inti,j,k,count=0;

for(i=0;i<=10;i++)//i是10元張數(shù),j是5元張數(shù),k是1元張數(shù)

for(j=0;j<=20;j++){

k=100-10*i-5*j;

if(k>=0){

cout<<i?,\t,?j?,\t,?k<<endl;

count++;

)

)

cout?count?endl;

return0;

)

6編程求1000以內(nèi)的所有完數(shù)。完數(shù)指的是一個數(shù)恰好等于它的所有因子之和。例如

6=1+2+3,6就是一個完數(shù)。

#include<iostream>

usingnamespacestd;

intmain(){

inti,a,sum_yz;〃sum_yz是a的因子和

for(a=1;a<l000;a++){

sum_yz=O;

for(i=l;i<a;i++)if(a%i==O)sum_yz+=i;

〃求因子運算未改變循環(huán)控制變量a的值,否則要用另一個變量b來代替a來參加運算

if(a==sum__yz)cout?a?endl;

)

return0;

}

7.求4個不同的整數(shù),其平方和等于200。

#include<iostream>

#include<iomanip>

usingnamespacestd;

intmain(){

inta,b,c,d;

for(a=l;a<=14;a++)

for(b=a+l;b<=14;b++)

for(c=b+l;c<=14;c++)

fbr(d=c+1;d<=14;d++)

if(a*a+b*b+c*c+d*d==200)

cout?a?'\t'?b?'\t,?c?,\t,?d?endl;

return0;

)

8從鍵盤輸入一個整數(shù),判斷該數(shù)是否為回文數(shù)。所謂的回文數(shù)就是從左到右讀與從右向左

讀都是一樣的數(shù)。例如7887、23432是回文數(shù)。

#include<iostream>

usingnamespacestd;

intmain(){

inta,b,c;

cin?a;

b=0;

for(c=a;c;){

b=b*10+c%10;

c/=10;

)

if(a==b)

cout?a?H是回文數(shù)”<<endl;

else

cout?a?H不是回文數(shù)”<<endl;

return0;

9編寫一程序,按下列公式求萬,精確到最后一項絕對值小于103

4357

#include<iostream>

usingnamespacestd;

intmain(){

doubles=0,i=l;

intp=l;

do{

s=s+p*l/i;

i+=2;

p*=-l;

}while(l/i>=le-6);

cout?4*s?endl;

return0;

10用迭代法編程求》=&的近似值。求平方根的迭代公式為:x?+I=1(%?+—)

2

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain(){

doublea,x0,xl;

coutvv”輸入初始值”;

cin?a;

x0=a/2;

xl=(x0+a/x0)/2;

do{

x0=x1;

xl=(x0+a/x0)/2;

}while(fabs(xO-x1)<1e-6);

cout<v"根為"?xl?endl;

return0;

11一球從100米高度落下,每次落地后反跳回原來高度的一半,再落下。編程求它在第10

次落地時,共經(jīng)過多少米?第10次反彈多高?

#include<iostream>

usingnamespacestd;

intmain(){

doublesn=100,hn=sn/2;

intn;

for(n=2;n<=10;n++){

sn+=2*hn;

hn/=2;

)

cout?nB10次落地時共經(jīng)過“<<sn<<"米”《endl;

coutw”第10次反彈”《hn?"米"<<endl;

return0;

}

12猴子吃桃問題:猴子摘下若干個桃子,第1天吃了所有桃子中的一半多一個,以后每天

吃前一天剩下的一半多一個,到第10天吃之前發(fā)現(xiàn)只剩下一個桃子,問猴子共摘了幾個桃

子。

#include<iostream>

usingnamespacestd;

intmain(){

intday,xl,x2;

day=9;

x2=l;

while(day>0){

xl=(x2+l)*2;

x2=x1;

day—;

)

cout<v"桃子總數(shù)n?xl?endl;

return0;

}

編程題

1輸入平面上某點橫坐標X和縱坐標y,若該點在由下圖表示的方塊區(qū)域內(nèi),則輸出1;否

則輸出0。

2

0

-2

2假定郵寄包裹的計費標準如下表,輸入包裹重量以及郵寄距離,計算出郵資。

重量(克)郵資(元/件)

155

309

4512

6014(每滿1000公里加收1元)

60以上15(每滿1000公里加收1元)

注意:重量在檔次之間的按高檔算。

3.某地發(fā)生了一件謀殺案,警察通過確定殺人兇手必為4個嫌疑犯中的一個。以下為4個

嫌疑犯的會供詞。A說:不是我;B說:是C;C說:是D;D說:C在胡說。已知3個人

說了真話,1個人說的是假話。現(xiàn)在請根據(jù)這些信息,寫一個程序來確定誰是兇手。

4.求一個大于指定數(shù)n的最小素數(shù),n由鍵盤輸入。

5.將100元換成20元、10元和5元的組合,共有多少種組合方法?

6.編程求1000以內(nèi)的所有完數(shù)。完數(shù)指的是一個數(shù)恰好等于它的所有因子之和。例如,

6=1+2+3,6就是一個完數(shù)。

7.求4個不同的整數(shù),其平方和等于200。

8.從鍵盤輸入一個整數(shù),判斷該數(shù)是否為回文數(shù)。所謂的回文數(shù)就是從左到右讀與從右向

左讀都是一樣的數(shù)。例如7887、23432是回文數(shù)。

9.編寫一程序,按下列公式求萬,精確到最后一項絕對值小于10九

乃,111S/\/+11

-=1-------1------------F...=/(—1I--------

43571=12<-1

10.用迭代法編程求x=&的近似值。求平方根的迭代公式為:%?+1=1(%?+—)

2X,

11.一球從100米高度落下,每次落地后反跳回原來高度的一半,再落下。編程求它在第十

次落地時,共經(jīng)過多少米?第十次反彈多高?

12.猴子吃桃問題:猴子摘下若干個桃子,第1天吃了所有桃子中的一半多一個,以后每天

吃前一天剩下的一半多一個,到第10天吃之前發(fā)現(xiàn)只剩下一個桃子,問猴子共摘了幾個桃

子。

編程題

1+2+...+機+13+2-+...+/

I5+25+…+P5

1輸入m、n和p的值,求s=的值。注意判斷運算中的溢

出。

#include<iostream>

usingnamespacestd;

doublesum(intn,inte){

doubles=0;

inti,j,q;

for(i=l;i<=n;i++){

q=l;

for(j=l;j<=e;j++)

q*=i;

s+=q;

returns;

intmain(){

doubles;

intm,n,p;

cin?m?n?p;

s=(sum(m,1)+sum(n,3))/sum(p,5);

cout?s?endl;

return0;

}

2設(shè)計一函數(shù),判斷一整數(shù)是否為素數(shù),并完成在800-900之間,驗證歌德巴赫猜想:任何

一個充分大的偶數(shù)都可以表示為兩個素數(shù)之和。

#include<iostream>

#include<cmath>

usingnamespacestd;

boolIsPrime(long);

intmain(){

longi,j,k;

for(i=800;i<=900;i+=2)

(

k=i/2;

for(j=2;j<=k;j++)

if(IsPrime(j)&&IsPrime(i-j))

(

cout?i?,'=,,?j?n+',?i-j?endl;

break;

)

)

return0;

)

boolIsPrime(longn){

longi,k;

k=(int)sqrt(n);i=l;

while(++i<=k)

if(n%i==0)

returnfalse;

returntrue;

)

3編寫遞歸函數(shù)求兩個數(shù)的最大公約數(shù),并在主函數(shù)中加以調(diào)用驗證。

#include<iostream>

usingnamespacestd;

intf(int,int);

intmain(){

inta,b;

cin?a?b;

cout?f(a,b);

return0;

)

intf(inta,intb){

if(a%b)retumf(b,a%b);

returnb;

)

4用遞歸函數(shù)實現(xiàn)勒讓德多項式。并在主函數(shù)中求P5(1.4)o

1n=0

2G)=xH=1

.((2n-l)xPn_i(x)-(n-l)Pn_2(x))/nn>1,

#include<iostream>

usingnamespacestd;

doubleP(intn,doublex){

if(n==0)return1;

if(n==l)returnx;

return((2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x))/n;

)

intmain(){

cout?nP(4,1.5)=U?P(4,1.5)?endl;

return0;

)

5.編寫函數(shù)inidigit(intm,inln),求整數(shù)m從右往左數(shù)第n位數(shù)字,并將該數(shù)字作為函數(shù)值

返回。例如:

digit。234,2)=3digit(1234,6)=0

#include<iostream>

usingnamespacestd;

intdigit(intm,intn);

intmain(){

intm,n;

cout?”請輸入整數(shù)和數(shù)字位數(shù)"VVendl;

cin?m?n;

cout?digit(m,n)?endl;

return0;

intdigit(intm,intn)

intk;

while(m&&n)

(

k=m%10;

n-;

m=m/10;

)

if(n)return0;//n超過整數(shù)實際位數(shù)

returnk;

)

6使用重載函數(shù)編程序分別把兩個數(shù)和三個數(shù)從大到小排列。

#include<iostream>

usingnamespacestd;

voidf(int,int,int);

voidf(int,int);

intmain(){

inta,b,c;

cin?a?b?c;

f(a,b);

f(a,b,c);

return0;

)

voidf(inta,intb,intc){

intt;

if(a<b){

t=a;a=b;b=t;

)

if(a<c){

t=a;a=c;c=t;

)

if(b<c){

t=b;b=c;c=t;

)

cout?a?',,u?b?,,,,,?c?endl;

)

voidf(inta,intb){

if(a>b)cout?a?",n?b?endl;

elsecout?b?n,n?a?endl;

)

編程題

..、,,,,1+2+...+機+13+2?+...+

1.軸入m>n和p的值,求ss=------------;--------------------------------的值。

I5+25+...+p5

2.設(shè)計一函數(shù),判斷一整數(shù)是否為素數(shù),并完成在800-900之間,驗證歌德巴赫猜想:任

何一個充分大的偶數(shù)都可以表示為兩個素數(shù)之和。

3.編寫遞歸函數(shù)求兩個數(shù)的最大公約數(shù),并在主函數(shù)中加以調(diào)用驗證。

4.用遞歸函數(shù)實現(xiàn)勒讓德多項式。并在主函數(shù)中求P5(1.4)。

1n=0

=xn=1

、((叫一

2n-1)i(x)-(n-l)P?_2(x))/nn>1

5.編寫函數(shù)intdigit(intm,intn),求整數(shù)m從右往左數(shù)第n位數(shù)字,并將該數(shù)字作為函數(shù)值

返回。例如:

digit(1234,2)=3digit(1234,6)=0

6.使用重載函數(shù)編程序分別把兩個數(shù)和三個數(shù)從大到小排列。

編程題

1已知求成績的平均值和均方差公式:ave=上」,dev=[上1----------------其中n為學生人

n\n

數(shù)⑼為第i個學生成績。求某班學生的平均成績和均方差。

#include<iostream>

#include<stdlib>

#include<time>

#include<cmath.h>

usingnamespacestd;

doubleave(int

doubledev(int*,double,int);

voidcreate(int*,int);

constintN=10;

intmain(){

inta[N],i;

doubles,d;

srand(time(0));

create(a,N);

for(i=0;i<N;i++)

cout?a[i]?H,

s=ave(a,N);

cout?nave=u?s;

d=dev(a,s,N);

cout?ndev="vvd?endl;

return0;

)

doubleave(int*a,intN){

doubles=0;

inti;

for(i=0;i<N;i++)

s+=a[i];

returns/N;

)

doubledev(int*a,doubles,intN){

inti;

doubled=0;

for(i=0;i<N;i++)

d+=(a[i]-s)*(a[i]-s);

returnsqrt(d/N);

}

voidcreate(int*c,intN){

inti;

for(i=0;i<N;i++)

c[iJ=rand()%100;

)

2用隨機函數(shù)產(chǎn)生10個互不相同的兩位整數(shù),存放至一維數(shù)組中,并輸出其中的素數(shù)。

#include<iostream>

#include<cstdlib>

#include<ctime>

#include<cmalh>

usingnamespacestd;

voidcreate(int

voidprime(int*,int);

constintN=10;

intmain(){

inta[N],i;

srand(time(0));

create(a,N);

for(i=0;i<N;i++)

cout?a[i]?n”;

cout?endl;

prime(a,N);

return0;

)

voidprime(int*p,intN){

inti,j,k;

for(i=0;i<N;i++){

if(p[i]<2)continue;

k=sqrt(p[i]);

for(j=2;j<=k;j++)

if(p[i]%j==O)break;

if(j>k)cout?p[i]?nn;

)

cout?endl;

)

voidcreate(int*c,intN){

inti,d;

intf[100]={0};

for(i=0;i<N;i++){

do{

d=rand()%100;

}while(f[d]);

c[i]=d;

f[d]=l;

3.輸入10個整數(shù),用選擇排序法從小到大對其進行排序,輸出排序后結(jié)果。

提示:選擇排序算法如下

選擇排序法共需進行n-1輪排序。第i輪(OWiWn-2)排序從a[i]、a[i+l]、a[n-l]

中找出最小的數(shù)和a[i]互換。下圖是5個數(shù)的選擇排序過程。

初始狀態(tài)[65324]

第一輪排序結(jié)果2[5364]

第二輪排序結(jié)果23[564]

第三輪排序結(jié)果234[65]

第四輪排序結(jié)果2345⑹

#include<iostream>

usingnamespacestd;

constintN=5;

voidselectSort(inta[],intn){

inti,j,t,min;

for(i=0;i<n-l;i++){〃排n-1輪

min=i;//每一輪最小元素下標min設(shè)初值是i

for(j=i+l;j<n;j++)

〃找出a[i]到a[n-l]的最小元素,下標為min

if(a[min]>a[j])

min=j;

if(min!=i){//如果a[i]不是最小,a[口和a[min]互換

t=a[min];

a[min]=a[i];

a[i]=t;

intmain(){

inta[N],i;

coutvv"輸入個數(shù)"<<endl;

for(i=0;i<N;i++)

cin?a[i];

selectSort(a,N);

for(i=0;i<N;i++)

cout?a[i]?,\t,;

return0;

)

4在一個二維數(shù)組中形成如以下形式的r階矩陣:

q1111、

21111

32111

43211

A4321,

(1)以方陣形式輸出數(shù)組。

(2)去掉靠邊元素,生成新的n-2階矩陣;

(3)求矩陣主對角線下元素之和;

#include<iostream>

usingnamespacestd;

intmain(){

inta[5][5],b[3][3];

inti,j,s=O;

〃解法一

for(i=0;i<5;i++){

for(j=0;j<=i;j++)

a[i]Ul=i+l-j;

for(j=i+l;j<5;j++)

a[i]U]=l;

)

/*

解法二

for(i=0;i<5;i++){

for(j=0;j<5;j++)

a[i][j]=i>j?i-j+1:1;

}

*/

for(i=0;i<5;i++){

for(j=0;j<5;j++)

cout?a[i][j]?"

cout?endl;

)//(1)

for(i=l;i<4;i++)

for(j=l;j<4;j++)

b[i-l][j-l]=a[i]|j];

for(i=0;i<3;i++){

for(j=0;j<3;j++)

coul?b[i][j]?"

cout?endl;

}//(2)

for(i=l;i<5;i++)

for(j=0;j<i;j++)

s+=a[i][j];

cout?s?endl;

return0;

)

5.利用二維數(shù)組實現(xiàn)兩個矩陣相加和相乘操作。

#include<iostream>

#include<iomanip>

usingnamespacestd;

constintM=4,P=3,N=2;

voidmultiply(int[][P],int[][N],int[][N],int,int,int);

voidadd(int[][N],int[][N],int[][N],int,int);

voidoutput(int[][P],int,int);

voidoutput(int[][N],int,int);

intmain(){

mtA[M][P]={{l,0,3},{2,-l,3},{-3,l,6},{l,3,2));

intB[P][N]={{3,2},{0,4},{-3,5});

intK[P][N]={{8,6},{l,2},{6,3});

intD[P][N|={0};

intC[M][N]={0};

add(B,K,D,P,N);

multiply(A,B,C,M,P,N);

cout?,'A=,,?endl;

output(A,M,P);

cout?nB=,'?endl;

output(B,P,N);

cout?,'K=,'?endl;

output(K,P,N);

cout?nB+K="?endl;

output(D,P,N);

cout?,'A:isB=,,?endl;

output(C,M,N);

return0;

)

voidadd(inta[][N],intb[][N],intc[][N],intm,intn)

(

inti,j;

for(i=0;i<m;i++)

for(j=O;j<n;j++)

c[i]U]=a[i]|j]+b[i]U];

}

voidmultiply(inta[][P],intb[][N],intc[][N],intm,intp,intn){

inti,j,k;

for(i=0;i<m;i++){

for(j=O;j<n;j++)

for(k=0;k<p;k++)

c[i]U]=c[i]U]+a[i][k]*b[k]U];}

)

voidoutput(inta[][P],intm,intn){

inti,j;

for(i=0;i<m;i++){

for(j=0;j<n;j++)

cout?endl;}

)

voidoutput(inta[][N],intm,intn){

inti,j;

for(i=0;i<m;i+4-){

for(j=0;j<n;j++)

cout?a[i][j]?,'\tn;

cout?endl;}

)

6將一組C++關(guān)鍵字存放到一個二維數(shù)組中,并找出這些關(guān)鍵字的最小者。

解法一

#include<iostream>

#include<cstring>

usingnamespacestd;

inimain(){

char*s[10]={nchar';',do'V,boor,;,return,',,'long,,,ndouble,',,,auto'',"extern1',"int'V'public''};

inti;

char**p=s;

for(i=l;i<10;i++)

if(strcmp(*p,*(s+i))>=O)p=s+i;

cout?*p?endl;

return0;

)

解法二

#include<iostream>

#include<cstring>

usingnamespacestd;

intmain(){

chars[][10]={,,charu;'do,V,boorV'return,,;,long',,''double,,,uauto',;'externn,''int,';'publicu};

inti;

char(*p)[10]=s;

for(i=l;i<10;i++)

if(strcmp(*p,*(s4-i))>=0)p=s+i;

cout?*p?endl;

return0;

)

7.輸入一個表示星期幾的數(shù)(0-6),然后輸出相應(yīng)的星期的英文單詞。要求使用指針數(shù)組實現(xiàn)。

在main函數(shù)中調(diào)用以上函數(shù)進行測試。

#include<iostream>

usingnamespacestd;

longsum(int,int);

intmain(){

char

*weekday[7]={“Monday”JTuesday”,“WednesdayTThursday”,"Friday”,"Saturday”JSunday"};

intday;

cout?n0-6n;

cin?day;

cout?weekday[day-l]?endl;

return0;

)

8.設(shè)計一個遞歸函數(shù),找出整型數(shù)組中最大元素及最小元素。在主函數(shù)中定義和初始化該整

型數(shù)組,調(diào)用遞歸函數(shù),并顯示結(jié)果。

#include<iostream>

usingnamespacestd;

constintN=10;

intMax(intint,int);

intMin(intint,int);

intmain(){

inta[N]={4,12,9,10,0,-4,3,20,8,-10);

intmax,min;

max=Max(a,0,9);

min=Min(a,0,9);

cout?nMax='^?max?'^,Min="?min?endl;

return0;

)

intMax(int*a,intn,intm){

intt;

if(n==m)returna[n];

else{

t=Max(a,n+l,m);

returna[n]>t?a[n]:t;

}

)

intMin(int*a,intn,intm){

intt;

if(n==m)returna[n];

else{

t=Min(a,n+l,m);

returna[n]<t?a[n]:t;

)

)

9.將字符串的內(nèi)容逆序,要求用函數(shù)實現(xiàn)。

#include<iostream>

usingnamespacestd;

解法一循環(huán)

voidreverse(char*s,intlen){

charc,*t=s+len-l;〃末指針

while(s<t){〃前面指針〈后面指針,繼續(xù)交換。

c=*s;*t=c;//交換

++s;--t;〃修改前后指針

)

)

解法二遞歸

voidreverse(char*s,char*t){〃s、t為待交換的兩個字符的指針

if(s<t){〃前面指針〈后面指針,繼續(xù)交換

charc=*s;*t=c;//交換

reverse(++s,—t);〃遞歸調(diào)用交換下一個字符

}

)

解法三遞歸

voidreverse(char*a){//a為要前移字符串的首地址

if(*a){

reverse(a+l);//找到字符結(jié)束標記

for(charb=*a,*p=a+l;*p;p++)〃字符串前移一個位置

*(p-l)=*p;

*(p-l)=b;〃前面一個字符后移至最后

intmain(){

charaf100],b[100],c[100];

char*p=a;

cout?"thestringis:"?endl;

while(cin.get(*p++)&&*(p-l)!='\n');

*(p-l)='\0';

strcpy(b,a);

strcpy(c,a);

reverse(a,slrlen(a));cout?a?endl;

reverse(b,b+strlen(b)-1);cout?b?endl;

reverse(c);cout?c?endl;

return0;

10請編寫一個函數(shù),用來刪除字符串中的所有空格。

#include<iostream>

usingnamespacestd;

voidremove_blank(char*s,chart){〃t中位要刪除的字符,該程序具有一定的通用性

intprev,next;

prev=next=0;

while(*(s+next)){

if(*(s+next)!=t)

*(s+prev++)=*(s+next);

next++;

)

*(s+prev)=O;

)

intmain(){

chara[100];

char*p=a;

cout〈<〃thestringis:〃《endl;

while(cin.get(*p++)&&*(p-l)!=,\n);

*(p-l)=,\O';

remove_blank(a,*');

cout<<a?endl;

return0;

)

11.編寫函數(shù)intfind(char*ps,char*pp),統(tǒng)計pp在ps中出現(xiàn)的次數(shù)。

#include<iostream>

usingnamespacestd;

intfind(char*ps,char*pp);

intmain(){

chara[20],b[10];

intm;

cout?ninputastring:M?endl;

cin.getline(a,20);

cout?"inputasubstring:u?endl;

cin.getline(b,20);

m=find(a,b);

if(m>0)cout?"Numberofsubstring=u?m?endl;

elsecout?"Nosubstring"?endl;

return0;

)

intfind(char*s,char*t)

(

char*ps=s;

char*pt=t;

intm=0;

while(*ps)

(

while(*ps==*pt&&*ps&&*pt)

{

ps++;

pt++;

if(*pt==O)m++;

ps=ps-(pt-t)+1;

pt=t;

}

returnm;

)

編程題

n

^(s,-ave)2

i=l,dev=q衛(wèi)-----------其中n為學生人

1.已知求成績的平均值和均方差公式:

n

數(shù),s,為第i個學生成績。求某班學生的平均成績和均方差。

2.用隨機函數(shù)產(chǎn)生10個互不相同的兩位整數(shù),存放至一維數(shù)組中,并輸出其中的素數(shù)。

3.輸入10個整數(shù),用選擇排序法從小到大對其進行排序,輸出排序后結(jié)果。

提示:選擇排序算法如下

選擇排序法共需進行n-1輪排序。第i輪(OWiWn-2)排序從a[i]、a[i+l]、……a[n-l]

中找出最小的數(shù)和a[i]互換。下圖是5個數(shù)的選擇排序過程。

初始狀態(tài)[65324]

第一輪排序結(jié)果2[5364]

第二輪排序結(jié)果23[564]

第三輪排序結(jié)果234[65]

第四輪排序結(jié)果2345⑹

4.在5行5列的二維數(shù)組中形成如以下形式的n階矩陣:

’11111、

21111

32111

43211

、54321,

(1)以方陣形式輸出數(shù)組;

(2)去掉周邊元素,生成新的n-2階矩陣;

(3)求矩陣主對角線下元素之和。

5.利用二維數(shù)組實現(xiàn)兩個矩陣相加和相乘操作。

6.將一組C++關(guān)鍵字存放到一個二維數(shù)組中,并找出這些關(guān)鍵字的最小者。

7.輸入一個表示星期幾的數(shù)(0-6),然后輸出相應(yīng)的星期的英文單詞。要求使用指針數(shù)組實現(xiàn)。

在main函數(shù)中調(diào)用以上函數(shù)進行測試。

8.設(shè)計一個遞歸函數(shù),找出整型數(shù)組中最大元素及最小元素。在主函數(shù)中定義和初始化該整

型數(shù)組,調(diào)用遞歸函數(shù),并顯示結(jié)果。

9.將字符串的內(nèi)容逆序,要求用函數(shù)實現(xiàn)。

10.請編寫一個函數(shù),用來刪除字符串中的所有空格。

11.編寫函數(shù)intfind(char*ps,char*pp),統(tǒng)計pp在ps中出現(xiàn)的次數(shù)。

編程題

1.定義一個長方體類Cube,具有3個數(shù)據(jù)成員:length(長)、width(寬卜height(高)。

要求為該類定義默認的構(gòu)造函數(shù)和非默認的構(gòu)造函數(shù)、復制構(gòu)造函數(shù)、定義計算表面積和體

積的函數(shù)。并在主函數(shù)中建立該類的對象并調(diào)用該類的成員函數(shù)。

#include<iostream>

#include<cmath>

usingnamespacestd;

classCube{

public:

Cube(){length=width=height=O;}

Cube(double1,doublew,doubleh){length=l;width=w;height=h;}

Cube(Cube&rc){length=rc.length;width=rc.width;height=rc.height;}

voidArea(){area=2*(length*width+length*height+width*height);}

voidVblumeO{volume=length*width*height;}

doubleGetArea(){returnarea;)

doubleGetVblume(){returnvolume;}

private:

doublelength,width,height;

doublearea,volume;

);

intmain(){

Cubecl,c2(3,6,8);

cl.Area();c2.Area();

cl.Vblume();c2.VblumeO;

cout?"cl面積為:"<<cl.GetArea()?”,cl體積為:"<<cl.GetVolume()?endl;

cout?"c2面積為:“v〈c2.GetArea()v<”,c2體積為:,'?c2.GetVolume()?endl;

return0;

1

2.設(shè)計如下類和組合類:

1)建立一個Point類,表示平面中的一個點;建立組合類Line,表示平面中的一條線端,

內(nèi)含兩個Point類的對象;建立Triangle類,表示一個三角形,內(nèi)含三個Line類的對象。

2)設(shè)計三個類的相應(yīng)的構(gòu)造函數(shù)、復制構(gòu)造函數(shù),完成初始化和對象復制。

3)設(shè)計Triangle類的成員函數(shù),完成三條邊是否能構(gòu)成三角形的檢驗和三角形面積計

算,面積顯示。

4)在主函數(shù)中,分別定義3個Point類對象,3個Line類對象,1個Triangle類對象,

計算Triangle類對象的面積。

#include<iostream>

#include<cmath>

usingnamespacestd;

classPoint{

public:

Point(intxx=O,intyy=O){X=xx;Y=yy;}

Point(Point&p);

intGetX(){returnX;)

intGetY(){returnY;}

private:

intX,Y;

};

Point::Point(Point&p){

X=p.X;Y=p.Y;

}

classLine{

public:

Line(Pointxpl,Pointxp2);

Line(Line&);

doubleGetLen(){returnlen;)

private:

Pointpl,p2;

doublelen;

);

Line::Line(Pointxpl,Pointxp2):pI(xp1),p2(xp2){

doubledeltx=double(pl.GetX()-p2.GetX());

doubledelty=double(p1.GetY()-p2.GetY());

len=sqrt(deltx*deltx+deity*deity);

)

Line::Line(Line&Seg):pl(Seg.pl),p2(Seg.p2),len(Seg.len){}

classTriangle{

Line11,12,13;

doubletriarea;

public:

Triangle(Linexll,Linexl2,Linex!3);

Triangle(Triangle&tri);

voidArea();

doubleGetArea(){returntriarea;}

);

Triangle::Triangle(Linexll,Linexl2,Linexl3):l1(xl1),12(x12),13(x13){

triarea=0;

)

Triangle::Triangle(Triangle&tri):l1(tri.11),12(tri.12),13(tri.13),triarea(tri.triarea){}

voidTriangle::Area(){

doubles;

doublelenl=ll.GelLen();

doublelen2=12.GetLen();

doublelen3=13.GetLen();

if((len1+Ien2>len3)&&(len2+len3>lenl)&&(len1+Ien3>len2)){

s=(len1+len2+len3)/2;

triarea=sqrt(s*(s-len1)*(s-len2)*(s-len3));

intmain(){

Pointp1(0,4),p2(3,0),p3;

Linelil(pl,p2);

LineIi2(p2,p3);

LineIi3(pl,p3);

Triangletrl(lil,li2,li3);

trl.Area();

coutw”三角形面積為:"?tr1.GetArea()?endl;

return0;

)

3定義一個日期類Date,具有年月日等數(shù)據(jù)成員,顯示日期、加減天數(shù)等函數(shù)成員(注

意需要考慮閏年)。在此基礎(chǔ)上,定義顯示日期、加天數(shù)的友元函數(shù)。

#include<iostream>

usingnamespacestd;

classDate{

intyear,month,day;

staticconstintdays[];

boolLeapYear();

boolEndofMonth();

public:

Date(int=1900,int=l,int=1);

voidIncrement(int);

voidDecrement(int);

voidSetDate(int,int,int);

voidPrint();

);

constintDate::days[]={0,31,28,31,30,31,30,31,31,30,31,30,31);

Date::Date(inty,intm,intd){

SetDate(y,m,d);

)

voidDate::SetDate(inty,intm,intd){

year

溫馨提示

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

最新文檔

評論

0/150

提交評論