C++基础练习题1-9章 自测题 题库带答案_第1页
C++基础练习题1-9章 自测题 题库带答案_第2页
C++基础练习题1-9章 自测题 题库带答案_第3页
C++基础练习题1-9章 自测题 题库带答案_第4页
C++基础练习题1-9章 自测题 题库带答案_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.概念填空题

1.1用一编写的程序称为“源程序”。计算机(能/不能)直接识别源程序,必须将其翻

译成二进制代码才能在机器上运行。一旦编译成功,目标程序就可以反复执行。

1.2C++的程序由一个或多个组成,其中一定有一个称为主函数的___函数。在组成

程序的函数中,它是程序执行的,也是程序运行的。对函数的描述由“{}”中

的语句序列完成,每个语句以符号结束。C++程序大小写。

1.3布尔型数值只有两个:,。在C++的算术运算式中,分别当作,o

1.4字符由括起来,字符串由括起来。字符只能有个字符,字符串可以有

个字符。空串的表示方法为。

1.5&&与||表达式按的顺序进行计算,以&&连接的表达式,如果左边的计算结果

为,右边的计算就不需要进行了,整个逻辑表达式的结果为。以||连接的表

达式,如果左边的计算结果为,就能得到整个逻辑表达式的结果为。

1.6>>运算符将一个数右移n位,相当于将该数2\<<运算数将一个数左移n位,

相当于将该数2%

1.7前置++、--的优先级于后置++、-。

2.概念填空题

1」用高级语言编写的程序称为“源程序”。计算机不能(能/不能)直接识别源程序,必须将其

翻译成二进制代码才能在机器上运行。一旦编译成功,目标程序就可以反复执行。

1.2C++的程序由一个或多个函数组成,其中一定有一个称为主函数的main函数。

在组成程序的函数中,它是程序执行的入口,也是程序运行的结束点。对函数的描

述由“{}”中的语句序列完成,每个语句以」—符号结束。C++程序区别大小写。

1.3布尔型数值只有两个:true,false。在C++的算术运算式中,分别当作0。

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

多个个字符。空串的表示方法为NULL。

1.5&&与II表达式按优先级的顺序进行计算,以&&连接的表达式,如果左边的计算结果

为false,右边的计算就不需要进行了,整个逻辑表达式的结果为以||连接的表

达式,如果左边的计算结果为true,就能得到整个逻辑表达式的结果为true。

1.6>>运算符将一个数右移n位,相当于将该数缩小2%<<运算数将一个数左移n位,

相当于将该数扩大2%

1.7前置++、-的优先级高于于后置++、-。

编程题

1输入平面上某点横坐标x和纵坐标y,若该点在由图2-10表示的方块区域内,则输出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.某地发生了一件谋杀案,警察通过确定杀人凶手必为4个嫌疑犯中的一个。以下为4个

嫌疑犯的会供词。A说:不是我;B说:是C;C说:是D;D说:C在胡说。已知3个人

说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定谁是凶手。

#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求一个大于指定数n的最小素数,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元张数,j是5元张数,k是1元张数

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以内的所有完数。完数指的是一个数恰好等于它的所有因子之和。例如

6=1+2+3,6就是一个完数。

#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;

〃求因子运算未改变循环控制变量a的值,否则要用另一个变量b来代替a来参加运算

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

)

return0;

}

7.求4个不同的整数,其平方和等于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从键盘输入一个整数,判断该数是否为回文数。所谓的回文数就是从左到右读与从右向左

读都是一样的数。例如7887、23432是回文数。

#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是回文数”<<endl;

else

cout«a«H不是回文数”<<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

次落地时,共经过多少米?第10次反弹多高?

#include<iostream>

usingnamespacestd;

intmain(){

doublesn=100,hn=sn/2;

intn;

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

sn+=2*hn;

hn/=2;

)

cout«nB10次落地时共经过“<<sn<<"米”《endl;

coutw”第10次反弹”《hn«"米"<<endl;

return0;

}

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

吃前一天剩下的一半多一个,到第10天吃之前发现只剩下一个桃子,问猴子共摘了几个桃

子。

#include<iostream>

usingnamespacestd;

intmain(){

intday,xl,x2;

day=9;

x2=l;

while(day>0){

xl=(x2+l)*2;

x2=x1;

day—;

)

cout<v"桃子总数n«xl«endl;

return0;

}

编程题

1输入平面上某点横坐标X和纵坐标y,若该点在由下图表示的方块区域内,则输出1;否

则输出0。

2

0

-2

2假定邮寄包裹的计费标准如下表,输入包裹重量以及邮寄距离,计算出邮资。

重量(克)邮资(元/件)

155

309

4512

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

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

注意:重量在档次之间的按高档算。

3.某地发生了一件谋杀案,警察通过确定杀人凶手必为4个嫌疑犯中的一个。以下为4个

嫌疑犯的会供词。A说:不是我;B说:是C;C说:是D;D说:C在胡说。已知3个人

说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定谁是凶手。

4.求一个大于指定数n的最小素数,n由键盘输入。

5.将100元换成20元、10元和5元的组合,共有多少种组合方法?

6.编程求1000以内的所有完数。完数指的是一个数恰好等于它的所有因子之和。例如,

6=1+2+3,6就是一个完数。

7.求4个不同的整数,其平方和等于200。

8.从键盘输入一个整数,判断该数是否为回文数。所谓的回文数就是从左到右读与从右向

左读都是一样的数。例如7887、23432是回文数。

9.编写一程序,按下列公式求万,精确到最后一项绝对值小于10九

乃,111S/\/+11

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

43571=12<-1

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

2X,

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

次落地时,共经过多少米?第十次反弹多高?

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

吃前一天剩下的一半多一个,到第10天吃之前发现只剩下一个桃子,问猴子共摘了几个桃

子。

编程题

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设计一函数,判断一整数是否为素数,并完成在800-900之间,验证歌德巴赫猜想:任何

一个充分大的偶数都可以表示为两个素数之和。

#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编写递归函数求两个数的最大公约数,并在主函数中加以调用验证。

#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用递归函数实现勒让德多项式。并在主函数中求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.编写函数inidigit(intm,inln),求整数m从右往左数第n位数字,并将该数字作为函数值

返回。例如:

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

#include<iostream>

usingnamespacestd;

intdigit(intm,intn);

intmain(){

intm,n;

cout«”请输入整数和数字位数"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超过整数实际位数

returnk;

)

6使用重载函数编程序分别把两个数和三个数从大到小排列。

#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.设计一函数,判断一整数是否为素数,并完成在800-900之间,验证歌德巴赫猜想:任

何一个充分大的偶数都可以表示为两个素数之和。

3.编写递归函数求两个数的最大公约数,并在主函数中加以调用验证。

4.用递归函数实现勒让德多项式。并在主函数中求P5(1.4)。

1n=0

=xn=1

、((叫一

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

5.编写函数intdigit(intm,intn),求整数m从右往左数第n位数字,并将该数字作为函数值

返回。例如:

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

6.使用重载函数编程序分别把两个数和三个数从大到小排列。

编程题

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

n\n

数⑼为第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用随机函数产生10个互不相同的两位整数,存放至一维数组中,并输出其中的素数。

#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个整数,用选择排序法从小到大对其进行排序,输出排序后结果。

提示:选择排序算法如下

选择排序法共需进行n-1轮排序。第i轮(OWiWn-2)排序从a[i]、a[i+l]、a[n­l]

中找出最小的数和a[i]互换。下图是5个数的选择排序过程。

初始状态[65324]

第一轮排序结果2[5364]

第二轮排序结果23[564]

第三轮排序结果234[65]

第四轮排序结果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设初值是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"输入个数"<<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在一个二维数组中形成如以下形式的r阶矩阵:

q1111、

21111

32111

43211

A4321,

(1)以方阵形式输出数组。

(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.利用二维数组实现两个矩阵相加和相乘操作。

#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++关键字存放到一个二维数组中,并找出这些关键字的最小者。

解法一

#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.输入一个表示星期几的数(0-6),然后输出相应的星期的英文单词。要求使用指针数组实现。

在main函数中调用以上函数进行测试。

#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.设计一个递归函数,找出整型数组中最大元素及最小元素。在主函数中定义和初始化该整

型数组,调用递归函数,并显示结果。

#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.将字符串的内容逆序,要求用函数实现。

#include<iostream>

usingnamespacestd;

解法一循环

voidreverse(char*s,intlen){

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

while(s<t){〃前面指针〈后面指针,继续交换。

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

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

)

)

解法二递归

voidreverse(char*s,char*t){〃s、t为待交换的两个字符的指针

if(s<t){〃前面指针〈后面指针,继续交换

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

reverse(++s,—t);〃递归调用交换下一个字符

}

)

解法三递归

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

if(*a){

reverse(a+l);//找到字符结束标记

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请编写一个函数,用来删除字符串中的所有空格。

#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.编写函数intfind(char*ps,char*pp),统计pp在ps中出现的次数。

#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卫-----------其中n为学生人

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

n

数,s,为第i个学生成绩。求某班学生的平均成绩和均方差。

2.用随机函数产生10个互不相同的两位整数,存放至一维数组中,并输出其中的素数。

3.输入10个整数,用选择排序法从小到大对其进行排序,输出排序后结果。

提示:选择排序算法如下

选择排序法共需进行n-1轮排序。第i轮(OWiWn-2)排序从a[i]、a[i+l]、……a[n-l]

中找出最小的数和a[i]互换。下图是5个数的选择排序过程。

初始状态[65324]

第一轮排序结果2[5364]

第二轮排序结果23[564]

第三轮排序结果234[65]

第四轮排序结果2345⑹

4.在5行5列的二维数组中形成如以下形式的n阶矩阵:

’11111、

21111

32111

43211

、54321,

(1)以方阵形式输出数组;

(2)去掉周边元素,生成新的n-2阶矩阵;

(3)求矩阵主对角线下元素之和。

5.利用二维数组实现两个矩阵相加和相乘操作。

6.将一组C++关键字存放到一个二维数组中,并找出这些关键字的最小者。

7.输入一个表示星期几的数(0-6),然后输出相应的星期的英文单词。要求使用指针数组实现。

在main函数中调用以上函数进行测试。

8.设计一个递归函数,找出整型数组中最大元素及最小元素。在主函数中定义和初始化该整

型数组,调用递归函数,并显示结果。

9.将字符串的内容逆序,要求用函数实现。

10.请编写一个函数,用来删除字符串中的所有空格。

11.编写函数intfind(char*ps,char*pp),统计pp在ps中出现的次数。

编程题

1.定义一个长方体类Cube,具有3个数据成员:length(长)、width(宽卜height(高)。

要求为该类定义默认的构造函数和非默认的构造函数、复制构造函数、定义计算表面积和体

积的函数。并在主函数中建立该类的对象并调用该类的成员函数。

#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.设计如下类和组合类:

1)建立一个Point类,表示平面中的一个点;建立组合类Line,表示平面中的一条线端,

内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象。

2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制。

3)设计Triangle类的成员函数,完成三条边是否能构成三角形的检验和三角形面积计

算,面积显示。

4)在主函数中,分别定义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,具有年月日等数据成员,显示日期、加减天数等函数成员(注

意需要考虑闰年)。在此基础上,定义显示日期、加天数的友元函数。

#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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论