C++程序设计习题大荟萃 联系客服

发布时间 : 星期一 文章C++程序设计习题大荟萃更新完毕开始阅读781e536327d3240c8447ef77

6. int fun6(int n)

{

if (n==0)return 1;

else return 2*fun6(n-1); }

7. template

int fun7(DT&x,DT&y) {

if(x>y) return 1;

else if(x==y) return 0; else return -1; }

8. template

bool fun8(T a[],int n,T key) {

for(int i=0;i

if(a[i]==key) return true; return false; }

9. #include

#include

void fun10(int *&a,int n) {

srand (time(0)); int i;

a=new int[n]; for(i=0;i

10. void fun10(int **&a,int m,int n)

{

int I,j;

a=new int *[m]; for(i=0;i

cout<<”输入”<>a[i][j]; }

三、编写下列程序

1. 编写一个函数,求出一维整形数组a[n]中所

有元素的平方之和。

int fun1(int a[],int n); 2. 编写一个函数,分别求出一维整型数组a[n]

中所有奇数元素的个数和所有偶数元素的个数。

void fun2(int a[],int n,int&c1,int&c2); 3. 编写一个函数,从一个二维整型数中查找具

有最大值的元素,由引用参数row和col带回该元素的行号和列号。 void fun3(int a[][N],int

m,int&row,int&col);//N为常量

4. 编写一个函数,求出由指针a所指向的字符

串中包含的每种十进制数字出现的次数,把统计结果保存在由指针b所指向的整型数组中。 void fun4(char *a,int *b);

5. 编写一个递归函数过程,求出两个自然数m

和n的最大公约数。 int fun5(int m,int n);

6. 编写一个递归函数过程,求出两个自然数m

和n的最小公倍数。

int fun6(int m,int n,int b=2); 7. 编写一个程序,求出二元一次方程组

{a11x+a12y=a13;a21x+a22y=a23}

的解,其中方程组的系数用一个实数二维数组保存。要求编写出一个主函数和两个普通函数,一个普通函数用于从键盘上向数组输入数据,另一个普通函数用于救出以该数组为系数矩阵的对应方程组的解,并由引用参数x和y返回所求的两个根,还有当方程组有惟一解时返回真,否则返回假。程序中的主函数用来定义一个二维实型数组,依次调用这两个普通函数,并且输出所求得的解。

提示:方程的两个根x0和y0分别为: x0=(a13a22-a12a23)/(a11a22-a12a21) y0=(a11a23-a13a21)/(a11a22-a12a21) 当a11a22-a12a21!=0时有惟一解。

第七章 结构与联合

一、计算出下列每个结构类型的大小

1. struct AA {

int *a; };

2. struct BB {

int a;

21

int b; };

3. struct CC{

char *data; BB s; CC *link; };

4. struct DD{

short list1[5]; AA list2[5]; int len; };

5. struct EE {

char h; union { int b; double c; char d[6]; };

CC *a[2]; };

6. struct FF {

struct {

int ac,*bc; }st,*pt; float *fb; };

二、请指出下面每个函数的功能

1. float Average(Person a[],int n)

{

int x=0;

for(int i=0;i

2. void Cout(Person a[],int n,int &c1,int

&c2) {

c1=c2=0;

for(int i=0;i

22

3. Student FindMix(Student *a,int n)

{

if(n<=0)

{

cout<<”a中没有记录,停止运行!”<

exit(1); }

int k=0;

for(int i=1;i

if(a[i].grade

4. IntNode *FindMax(IntNode *f)

{

if(f) return NULL; IntNode *p=f; f=f->next; while(f) {

if(f->data>p->data) p=f; f=f->next; }

return p; }

5. int operator==(Student x,char *key)

{

if(strcmp(x.num,key)==0) return 1; else

return 0; }

6. Franction operator

*(Franction&x,Franction&y) {

Franction z;

z.nume=x.nume*y.num; z.deno=x.deno*y.deno; FranSimp(z); return z; }

7. Franction operator*(int c,Franction&x)

{

Franction y;

y.nume=c*x.nume; y.deno=x.deno; return y; }

8. int Count(MixNode *f,int &n)

{

n=0; int m=0; while (f)

{

m++;

if(f->mark==1) n++; f=f->next; }

return m; }

三、编写下列程序或函数

1. 编一函数,从类型为Person的,具有n个

人员记录的数组a 中查找并打印出年龄不小于整形变量x值的所有记录,要求所有输出记录的同一数据项具有相同的显示宽度。 2. 分别编写一个普通函数和减法操作符重载

函数,实现具有Franction类型的两个分数相减的操作运算结果保存在第一个操作数中并带回,同时函数返回第一个操作数的引用。 3. 编写一个函数,实现从任意类型的具有n个

元素的数组中删除下标为i(p<=i

注意:具体删除操作是把下标为i+1到n-1的元素值依次向前移动一个位置,并使元素个数变为n-1。

4. 编写一个函数,对于具有Workers类型和n

个数组a,若从下标为k的位置起向后查找属于教师类别的、职级为x值的元素,当查找成功时返回该元素的下标,否则返回-1。

第八章 类与对象 一、单选题

1. 当类中一个字符指针成员指向具有n个字节

存储空间时,它所能存储字符串的最大长度为______。

A. n B. n+1 C. n-1 D. n-2

23

2. 假定AB为一个类,则该类的拷贝构造函数

的声明语句为______。

A. AB&(AB x) B. AB(AB x) C. AB(AB&); D. AB(AB*x)

3. 对类对象成员的初始化是通过执行构造函

数中的______完成的。

A.初始化表 B.函数体 C.参数表 D.基类表

4. 假定AB为一个类,则执行”AB a,b(3),*p;”

语句时,自动调用该类构造函数的次数为______。

A.2 B.3 C.4 D.5 5. 假定AB为一个类,则执行”AB

a(4),b[3],*p[2];”语句时,自动调用该类构造函数的次数为______。

A.3 B.4 C.6 D.9

6. 假定AB为一个类,px为指向该类动态对象

数组的指针,该数组长度为n,则执行”delete []px;”语句时,自动调用该类析构函数的次数为假定AB为一个类,则执行”AB

a,b(3),*p;”语句时,自动调用该类构造函数的次数为______。

A.0 B.1 C.n D.n+1

7. 对于类中定义的成员,其隐含访问权限为

______。 A.

public B.protected C.private D.static

8. 对于结构中定义的成员,其隐含访问权限为

______。

A.public B.protected C.private D.static

9. 为了使类中的成员不能被类外的函数通过

成员操作符访问,则不应把该成员的访问权限定义为______。

A.public B.protected C.private D.static

10. 一个类的友元函数或友元类能够通过成员操

作符访问该类的______。

A.私有成员 B.保护成员 C.公用成员 D.所有成员

11. 假定要对类AB定义加号操作符重载成员函

数,实现AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: ______。 A. AB operator+(AB&a,AB&b); B. AB operator+(AB&a);

C. operator+(AB a); D. AB&operator +();

二、填空题

1. 在定义类对象的语句执行时,系统在建立每个对

public:

A(int aa=0,int bb=0):a(aa),b(bb)

{

cout<<”Constructor!”<

______。

3. 对一个类中的数据成员的初始化可以通过构造

函数中的______实现,也可以通过构造函数中的______实现。

4. 设px是指向一个类动态对象的指针变量,则执

3.行”delete px;”语句时,将自动调用该类的______。 5. 当一个类对象离开它的作用域时,系统将自动调

用该类的______。

6. 假定一个类对象数组为A[N],当离开它的作用域

时,系统自动调用该类析构函数的次数为______。 7. 假定AB为一个类,则执行”AB a[10]”语句时,

系统自动调用该类构造函数的次数为______。 8. 假定用户没有给一个名为AB的类定义构造函数,

则系统为其隐含定义的构造函数为______。

9. 假定用户没有给一个名为AB的类定义析构函数,

则系统为其隐含定义的析构函数为______。 10. 若需要把一个函数”void F();”定义为一个类

AB的友元函数,则应在类AB的定义中加入一条语句: ______。

11. 若需要把一个类AB定义为一个类CD的友元类,

则应在类CD的定义中加入一条语句:______。 4.三、写出下列每个程序运行后的输出结果 1. #include

classA { int a,b; public:

A(){ a=b=0; } A(int aa,int bb)

{

a=aa;b=bb;

cout<

void main() 5.{

A x, y(2,3), z(4,5); }

2. #include

class A { int a,b;

24

} };

void main() {

A x, y(2,3), z(y); }

#include

class A{ int *a; public:

A(int aa=0)

{

a=new int(aa);

cout<<”Constructor!”<<*a<

void main() {

A x[2];

A *p=new A[5]; delete p; }

#include

class A{ int a; public:

A(int aa=0):a(aa){ } ~ A(){ cout<<”Destructor!”<

void main() {

A x(5);

A *p=new A(10); delete p; }

#include

class A{ int *a; public:

A(int x)