admin 管理员组

文章数量: 887053


2023年12月22日发(作者:镜像劫持修复工具)

面向对象程序设计课后题答案

第二章C++概述

【2.6】D

【2.7】D

【2.8】A

【2.9】A

【2.10】B

【2.11】A

【2.12】C

【2.13】B

【2.14】D

【2.15】C

【2.16】D

【2.17】C

【2.18】程序的运行结果:

101

【2.19】程序的运行结果:

10 10

【2.20】程序的运行结果:

10

20

【2.22】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。

#include

int main()

{

int *p,i;

p=new int[20];

1

p[0]=1;

p[1]=1;

for(i=2;i<20;i++)

{

}

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

{

}

return 0;

}

【2.23】编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。重载sroot()3次,让它返回整数、长整数与双精度数的二次方根。

#include

#include

double sroot(int m)

{

return sqrt(m);

}

double sroot(long m)

{

return sqrt(m);

}

double sroot(double m)

{

return sqrt(m);

}

int main()

{

2

cout<

p[i]=p[i-1]+p[i-2];

cout<<"sroot(145)="<

cout<<"sroot(123456)="<

cout<<"sroot(1.44)="<

return 0;

}

【2.24】编写一个C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?

#include

int main()

{

int k=0;

for(int i=0;i<=20;i++)

{

}

cout<<"将一元人民币兑换成1、2、5分的硬币,共有"<

return 0;

}

【2.25】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。要求使用变量的引用。

void change(int &a,int &b)

{

int t=a;

a=b;

3

for(int j=0;j<=50;j++)

{

}

if(100-5*i-2*j>=0)

{

}

k++;

b=t;

}

int main()

{

int m,n;

cout<<"请输入两个整数:";

cin>>m>>n;

if(m>n)

change(m,n);

cout<<"这两个数从小到大依次为: "<

return 0;

}

【2.26】编写一个C++风格的程序,用二分法求解f(x)==0的根。假设方程为:2*x*x*x-4*x*x+3*x-6=0

#include

#include

using namespace std;

double f(double x)

{

return 2*x*x*x-4*x*x+3*x-6;

}

int main()

{

double left,right,middle,ymid,yleft,yright;

cout<<"请按由小到大的顺序输入两个数:";

cin>>left>>right;

yleft=f(left);

yright=f(right);

if(yleft*yright>0)

4

{

}

do{

middle=(left+right)/2;

ymid=f(middle);

if(yleft*ymid<0)

{

}

if (yright*ymid<0)

{

}

left=middle;

yleft=ymid;

right=middle;

yright=ymid;

cout<<"您输入的两个数,用二分法无法求得方程的根"<

exit(0);

}while(fabs(ymid)>=1e-6);

cout<<"方程的根为:"<

return 0;

}

第三章 类和对象

【3.6】假设在程序中已经声明了类point,并建立了其对象p1和p4。请回答以下几个语句有什么区别?

(1) point p2,p3;

(2) point p2=p1;

(3) point p2(p1);

(4) p4=p1;

5

【解答】语句(1)使用带默认参数的构造函数,或不带参数的构造函数,定义了point类的两个对象p2,p3;

语句(2)在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中用“赋值法”调用了拷贝构造函数;

语句(3)在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中用“带入法”调用了拷贝构造函数;

【3.7】B

【3.8】C

【3.9】C

【3.10】B

【3.11】B

【3.12】A

【3.13】A

【3.14】 B

【3.15】A

【3.16】B

【3.17】B

【3.18】写出下面程序的运行结果。

10,20

30,48

50,68

70,80

90,16

11,120

【3.19】写出下面程序的运行结果。

Constructing

10

Destructing

100

Destructing

6

【3.20】写出下面程序的运行结果。

3 objects in existence

4 objects in existence after allocation

3 objects in existence after delection

【3.21】写出下面程序的运行结果。

Counting at 0

Counting at 1

Counting at 2

Counting at 3

Counting at 4

Counting at 5

Counting at 6

Counting at 7

Counting at 8

Counting at 9

【3.22】写出下面程序的运行结果。

Default constructor called.

Default constructor called.

Default constructor called.

Constructor: a=1, b=2

Constructor: a=3, b=4

Constructor: a=5, b=6

【3.23】写出下面程序的运行结果。

Con.

Copy con.

default.

【3.24】写出下面程序的运行结果。

A=5

B=14

A=9

7

B=14

【3.25】写出下面程序的运行结果。

5,7

22,25

【3.26】写出下面程序的运行结果。

Constructing

Constructing

A=5

B=15

Destructing

A=10

B=15

Destructing

Destructing

Destructing

【3.27】指出下列程序中的错误,并说明为什么。

class Student

{

char name[10];

int age;

float aver;

void printStu();

};

void main()

{

Student p1,p2,p3;

= 30; //Error: age为私有成员,不能在类外直接访问}

【3.28】指出下列程序中的错误,并说明为什么。

class Student

8

{

int age;

int sno;

public: /*在成员函数定义前加public,不然默认为private,则在主函数中不能调用私有的成员函数*/

void printStu();

void setSno(int d);

void setAge(int a); //添加成员函数的声明

};

void printStu()

//类外定义成员函数需加类名::,改为:void Student::printStu()

{

cout<<"nStudent No. is "<

cout<<"age is "<

}

void setSno(int s)

//类外定义成员函数需加类名::,改为:void Student:: setSno(int s)

{

sno=s;

}

void setAge(int a)

//类外定义成员函数需加类名::,改为:void Student:: setAge(int a)

{

age = a;

}

void main()

{

Student lin;

(20021);

(20);

tu();

9

}

【3.29】指出下列程序中的错误,并说明为什么。

class Point

{

public:

};

void main()

{

}

构造函数Point是私有的,语句“Point copint;”执行时出现错误。错误的原因是:类Point的构造函数是私有函数,创建对象cpoint时不能调用它。

【3.30】下面是一个计算器类的定义,请完成该类成员函数的实现。

#include

using namespace std;

class Counter

{

public:

Counter(int number);

void increment(); //给原值加1

10

Point cpoint;

cpoint.x = 2;

int x,y;

private:

Point()//构造函数不能说明为private的

{

}

x = 1;

y = 2;

void decrement(); //给原值减1

int getValue(); //取得计数器值

int print(); //显示计数

private:

int value;

};

counter::counter(int number)

{

value = number;

}

void counter::increment()

{

value++;

}

void counter::decrement()

{

value--;

}

int counter::getvalue()

{

return value;

}

int counter::print()

{

cout<<"nvalue is: "<

return 0;

}

void main()

{

counter op(10);

11

();

ent();

();

ent();

();

}

【3.31】根据注释语句的提示,实现类Date的成员函数。#include

using namespace std;

class Date

{

public:

void printDate();//显示日期

void setDay(int d);//设置日的值

void setMonth(int m);//设置月的值

void setYear(int y);//设置年的值

private:

int day,month,year;

};

void Date::printDate()

{

cout<

}

void Date::setDay(int d)

{

day = d;

}

void Date::setMonth(int m)

{

month = m;

12

}

void Date::setYear(int y)

{

year = y ;

}

int main()

{

Date testDay;

(5);

th(10);

r(2003);

ate();

return 0;

}

【3.32】建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。

#include

using namespace std;

const double PI=3.1415926;

class Cylinder

{

double radius,height,volume;

public:

Cylinder(double r,double h)

{

}

13

radius=r;

height=h;

volume=PI*radius*radius*height;

void vol()

{

}

};

int main()

{

Cylinder c(2,5);

();

return 0;

}

【3.33】构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5,将price初始化为qu的10倍。显示每个对象的qu*price值。

【3.34】修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price值。

#include

using namespace std;

class Book

{

private:

int qu,price;

public:

Book(int i);

void print();

void printqandp();

};

Book::Book(int i)

{

qu = i;

14

cout<<"the volume is"<

price = qu * 10;

}

void Book::print()

{

cout<<"the Book's qu is: "<

cout<<"the Book's price is: "<

}

void Book::printqandp()

{

cout<<"the Book's qu*price is: "<

}

void main()

{

Book a[5] = {1,2,3,4,5};

int i;

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

{

a[i].print();

}

Book *b = &a[4]; //逆序显示数组元素

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

{

b->printqandp();

b--;

}

Book *c = a; //顺序显示数组元素

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

{

c->printqandp();

c++;

15

}

}

//或者

class Book

{

private:

int qu,price;

public:

Book(int q,int p);

void print();

void printqandp();

};

Book::Book(int q,int p)

{

qu = q;

price = p;

}

void Book::print()

{

cout<<"the Book's qu is: "<

cout<<"the Book's price is: "<

}

void Book::printqandp()

{

cout<<"the Book's qu*price is: "<

}

void main()

{

Book a[5] = {Book(1,10),Book(2,20),Book(3,30),Book(4,40),Book(5,50)};

int i;

16

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

{

}

Book *b = &a[4]; //逆序显示数组元素

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

{

}

Book *c = a; //顺序显示数组元素

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

{

}

}

【3.35】构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。构造函数含3个参数:字符数组na[]及q、p。当定义Stock的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。成员函数print()没有形参,需使用this指针,显示对象数据成员的内容。假设类Stock第1个对象的三个参数为:“600001”、3000和5.67,第2个对象的第1个数据成员的值是“600001”,第2和第3个数据成员的值取默认值。要求编写程序分别显示这两个对象数据成员的值。

#include

#include

using namespace std;

class Stock

{

public:

Stock(char na[], int q = 1000,double p =8.98);

17

c->printqandp();

c++;

b->printqandp();

b--;

a[i].print();

print();

private:

};

Stock::Stock(char na[], int q,double p)

{

strcpy(stockcode, na);

quan = q;

price = p;

}

Stock::print()

{

char stockcode[16];

int quan;

float price;

cout<<"stocknode: "<stockcode<<" "<<"quan: "<quan;

cout<<" "<<"price: "<price<

}

void main()

{

Stock a("600001",3000,5.67);

Stock b("600001");

();

();

}

【3.36】编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。

#include

#include

using namespace std;

class Student

18

{

string name;

string sno;

double score;

static int num;

static double sum;

public:

Student(string n,string no,double s);

void print();

static double getAverage();

static double gettotal();

static int getnum();

};

int Student::num=0;

double Student::sum=0;

Student::Student(string n,string no,double s)

{

name=n;

sno=no;

score=s;

num++;

sum+=s;

}

void Student::print()

{

cout<<"学生的学号为: "<

int Student::getnum()

"<

19

{

return num;

}

double Student::getAverage()

{

if (num==0)

else

}

double Student::gettotal()

{

return sum;

}

int main()

{

cout<<"当前学生人数为:"<

Student s1("12012","张明",80);

();

cout<<"当前学生人数为:"<<()<<"学生的总成绩为:"<

Student s2("09615","李涛",50);

();

cout<<"当前学生人数为:"<<()<<"学生的总成绩为:"<

Student s3("12016","王晓",90);

20

return sum/num;

return 0;

();

cout<<"当前学生人数为:"<<()<<"学生的总成绩为:"<

return 0;

}

【4.8】A

【4.9】C

【4.10】C

【4.11】B

【4.12】程序运行结果:

Constructor B2

Constructor B1

Constructor A

3

2

1

【4.13】程序运行结果:

主食=bread

副食=steak

【4.14】程序运行结果:

0,0,0

第四章 派生类与继承

21

0,1,0

3,6,9

【4.15】程序运行结果:

Constructor B2.2

Constructor B1.1

Constructor B3.3

Constructor A.4

1

2

4,3

【4.16】程序运行结果:

4

【4.17】程序运行结果:

(1,2)

5,6

(6,9)

【4.18】程序运行结果:

class base1

class base2

class level2

class base2

class level1

class toplevel

【4.19】下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。

#include

using namespace std;

#include

class table

{

22

public:

table(int p,int q)

{

i=p; j=q;

}

void ascii(void);

protected:

int i,j;

};

void table::ascii(void)

{

int k=1;

int m;

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

{

cout<

if(k%12==0)

cout<<"n";

k++;

}

cout<

}

class der_table:public table

{

public:

der_table(int p,int q,char *m):table(p,q)

{

c=m;

}

23

void print(void);

protected:

char *c;

};

void der_table::print(void)

{

cout<

table::ascii();

}

void main()

{

der_table ob('a','z',"ASCII value--char");

();

();

}

【4.20】

#include

using namespace std;

class area_cl

{

protected:

double height;

double width;

public:

area_cl(double r,double s)

{

height=r;

width=s;

}

24

virtual double area()=0;

};

class rectangle:public area_cl

{

public:

rectangle(int h,int w):area_cl(h,w)

{}

double area()

{

return height*width;

}

};

class isosceles:public area_cl

{

public:

isosceles(int h,int w):area_cl(h,w)

{}

double area()

{

return 0.5*height*width;

}

};

int main()

{

rectangle r(10,5);

isosceles i(4,6);

area_cl *p;

25

p=&r;

cout<<"矩形的面积为:"<area()<

p=&i;

cout<<"三角形的面积为:"<area()<

return 0;

}

【4.21】已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。

#include

#include

using namespace std;

class Time

{

public:

Time(int h,int m,int s)

{

}

void display()

{

}

protected:

int hours,minutes,seconds;

26

cout<<"出生时间:"<

hours=h;

minutes=m;

seconds=s;

};

class Date

{

public:

Date(int m,int d,int y)

{

month=m;

day=d;

year=y;

}

virtual void display()

{

cout<<"出生年月"<

}

protected:

int month,day,year;

};

class Birthtime:public Time,public Date

{

private:

string Childname;

public:

Birthtime(string name,int y,int mon,int d,int h,int m,int s):Date(mon,d,y),Time(h,m,s)

{

Childname=name;

}

void display()

{

cout<<"小孩的姓名为:"<

27

}

};

Date::display();

Time::display();

int main()

{

Birthtime mary("Mary",2013,1,1,13,25,40);

y();

Birthtime jack("Jackson",2000,11,11,23,55,10);

y();

return 0;

}

【4.22】编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、系别和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名、输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。

#include

#include

using namespace std;

class Person

{

string sno,name;

public:

void Input()

{

cout<<"请输入编号:";

cin>>sno;

cout<<"请输入姓名:";

28

cin>>name;

}

void print()

{

cout<<"编号:"<

cout<<"姓名:"<

}

};

class Student:public Person

{

string department;

double score;

public:

void Input()

{

Person::Input();

cout<<"请输入学生的班号:";

cin>>department;

cout<<"请输入学生的成绩:";

cin>>score;

}

void print()

{

Person::print();

cout<<"班号:"<

cout<<"成绩:"<

}

};

class Teacher:public Person

{

29

string department;

string prof;

public:

void Input()

{

Person::Input();

cout<<"请输入教师的部门:";

cin>>department;

cout<<"请输入教师的职称:";

cin>>prof;

}

void print()

{

Person::print();

cout<<"教师的部门:"<

cout<<"教师的职称:"<

}

};

int main()

{

Student s;

Teacher t;

cout<<"请输入学生的基本信息:n";

();

cout<<"请输入教师的基本信息:n";

();

cout<<"显示学生的基本信息:n";

();

cout<<"显示教师的基本信息:n";

();

30

return 0;

}

第五章 多态性

【5.7】D

【5.8】A

【5.9】A

【5.10】D

【5.11】C

【5.12】C

【5.13】该定义方法不正确,虚函数在派生类中重新定义时,要求函数原型(包括函数类型、函数名、参数个数与参数类型的顺序)都必须与基类中的原型完全相同。本程序段中,虚函数在派生类中重新定义时,参数个数与基类中的原型不同。

【5.14】写出程序运行结果。

7

6

【5.15】写出程序运行结果。

This is C++ book.

第1个字符:T

第16个字符:k

第26个字符:数组下标越界!

【5.16】写出程序运行结果。

m=1.5千米

【5.17】编写一个程序,用成员函数重载运算符“+”和“-”将两个二维数组相加或相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。

#include

using namespace std;

class Array

31

{

int M,N;

double *p;

public:

Array(int m,int n,int *p);

Array(int m,int n);

void print();

void Input();

Array operator+(Array b);

Array operator-(Array b);

};

Array::Array(int m,int n,int *a)

{

M=m;

N=n;

p=new double[m*n];

for(int i=0;i

{

p[i]=a[i];

}

}

Array::Array(int m,int n)

{

M=m;

N=n;

p=new double[m*n];

for(int i=0;i

{

p[i]=0;

32

}

}

void Array::print()

{

for(int i=1;i<=M;i++)

{

for(int j=1;j<=N;j++)

{

cout<

}

cout<

}

}

void Array::Input()

{

for(int i=0;i

{

cin>>p[i];

}

}

Array Array::operator+(Array b)

{

if(M !=b.M || N != b.N)

{

cout<<"两个数组的维数不同,不能进行加运算"<

exit(0);

}

else

{

33

Array s(M,N);

for(int i=0;i

{

s.p[i]=p[i]+b.p[i];

}

return s;

}

}

Array Array::operator-(Array b)

{

if(M !=b.M || N != b.N)

{

cout<<"两个数组的维数不同,不能进行加运算"<

exit(0);

}

else

{

Array s(M,N);

for(int i=0;i

{

s.p[i]=p[i]-b.p[i];

}

return s;

}

}

int main()

{

int a[6]={1,2,3,4,5,6};

Array ar1(2,3,a);

34

Array ar2(2,3);

cout<<"请输入2*3的二维数组ar2的元素:n";

();

cout<<"数组ar1为:"<

();

cout<<"数组ar2为:"<

();

Array ar3(2,3),ar4(2,3);

ar3=ar1+ar2;

ar4=ar1-ar2;

cout<<"ar1+ar2="<

();

cout<<"ar1-ar2="<

();

return 0;

}

【5.18】修改习题5.17,用友元函数重载运算符"+"和"-"将两个二维数组相加或相减。#include

class Array

{

int M,N;

double *p;

public:

Array(int m,int n,int *p);

35

Array(int m,int n);

void print();

void Input();

friend Array operator+(Array a, Array b);

friend Array operator-(Array a,Array b);

};

Array::Array(int m,int n,int *a)

{

M=m;

N=n;

p=new double[m*n];

for(int i=0;i

{

p[i]=a[i];

}

}

Array::Array(int m,int n)

{

M=m;

N=n;

p=new double[m*n];

for(int i=0;i

{

p[i]=0;

}

}

void Array::print()

{

36

for(int i=1;i<=M;i++)

{

for(int j=1;j<=N;j++)

{

cout<

}

cout<

}

}

void Array::Input()

{

for(int i=0;i

{

cin>>p[i];

}

}

Array operator+(Array a,Array b)

{

if(a.M !=b.M || a.N != b.N)

{

cout<<"两个数组的维数不同,不能进行加运算"<

return Array(1,1);

}

else

{

Array s(a.M,a.N);

for(int i=0;i

{

s.p[i]=a.p[i]+b.p[i];

}

37

return s;

}

}

Array operator-(Array a,Array b)

{

if(a.M !=b.M || a.N != b.N)

{

cout<<"两个数组的维数不同,不能进行加运算"<

return Array(1,1);

}

else

{

Array s(a.M,a.N);

for(int i=0;i

{

s.p[i]=a.p[i]-b.p[i];

}

return s;

}

}

int main()

{

int a[6]={1,2,3,4,5,6};

Array ar1(2,3,a);

Array ar2(2,3);

cout<<"请输入2*3的二维数组ar2的元素:n";

();

cout<<"数组ar1为:"<

38

}

();

cout<<"数组ar2为:"<

();

Array ar3(2,3),ar4(2,3);

ar3=ar1+ar2;

ar4=ar1-ar2;

cout<<"ar1+ar2="<

();

cout<<"ar1-ar2="<

();

return 0;

【5.19】编写一个程序,要求:

(1)声明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;

(2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作;

(3)定义成员函数print,调用该函数时,以格式“real+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i;

(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。

#include

class Complex

{

39

double real,imag;

public:

Complex(double r=0,double i=0);

void print();

friend Complex operator+(Complex a,Complex b);

};

Complex::Complex(double r,double i)

{

real=r;

imag=i;

}

void Complex::print()

{

cout<<"("<

}

Complex operator+(Complex a,Complex b)

{

Complex c;

=+;

=+;

return c;

}

int main()

{

Complex c1(2.5,3.7),c2(4.2,6.5);

cout<<"c1=";

();

cout<<"c2=";

();

Complex c3=c1+c2;

40

}

cout<<"c1+c2=";

();

return 0;

【5.20】写一个程序,定义抽象类Container,由它派生出3个派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。

#include

#include

using namespace std;

const double PI=3.1415926;

class Container

{

protected:

double radius;

public:

Container(double r)

{

radius=r;

}

double getr()

{

return radius;

}

virtual double surface_area()=0;//纯虚函数surface_area

virtual double volume()=0;//纯虚函数volume

};

class Sphere: public Container//(球体)

{

41

public:

Sphere(double r):Container(r)

{

}

double surface_area()

{

return 4*PI*radius*radius;

}

double volume()

{

return PI*pow(radius,3)*4/3;

}

};

class Cylinder: public Container//(圆柱体)

{

double height;

public:

Cylinder(double r,double h):Container(r)

{

height=h;

}

double geth()

{

return height;

}

double surface_area()

{

return 2*PI*radius*(height+radius);

42

}

double volume()

{

return PI*radius*radius*height;

}

};

class Cube: public Container//(正方体)

{

public:

Cube(double r):Container(r)

{

}

double surface_area()

{

return 6*radius*radius;

}

double volume()

{

return pow(radius,3);

}

};

int main()

{

Container *ptr;

Sphere s(2);

Cylinder cy(1,5);

Cube cb(5);

43

ptr=&s;

cout<<"球体的半径为:"<getr()<

cout<<"球体的表面积为:"<surface_area()<

cout<<"球体的体积为:"<volume()<

cout<<"******************"<

ptr=&cy;

cout<<"圆柱体的半径为:"<getr()<

cout<<"圆柱体的高为:"<<()<

cout<<"圆柱体的表面积为:"<surface_area()<

cout<<"圆柱体的体积为:"<volume()<

cout<<"******************"<

ptr=&cb;

cout<<"正方体的边长为:"<getr()<

cout<<"正方体的表面积为:"<surface_area()<

cout<<"正方体的体积为:"<volume()<

return 0;

}

第六章 模板与异常处理

6.5】D

6.6】A

6.7】B

6.8】程序运行结果:

44

【【【【

10 0.23

X This is a test.

【6.9】程序运行结果:

4!=24

n=-2不能计算n!。

程序执行结束。

【6.10】指出下列程序中的错误,并说明原因。

#include

using namespace std;

template

class Compare

{

public:

Compare(T a, T b)

{

x=a;

y=b;

}

T min();

private:

T x,y;

};

template

T Compare::min() //应改为:T Compare::min(){

return (x

}

int main()

{

45

Compare com1(3,7); //应改为:Compare com1(3,7);

cout<<"其中的最小值是:"<<()<

return 0;

}

【6.11】已知下列主函数:

int main()

{

cout<

cout<

cout<

return 0;

}

声明求3个数中最小者的函数模板,并写出调用此函数模板的完整程序。#include

using namespace std;

template

T min(T a, T b,T c)

{

T t;

t=(a

if(t>c)

t=c;

return t;

}

int main()

{

cout<<"min(10,5,3)="<

cout<<"min(10.2,5.6,3.8)="<

cout<<"min('a','b','c')="<

46

return 0;

}

【6.12】编写一个函数模板,求数组中的最大元素,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度类型。

#include

using namespace std;

template

T Max(T a[],int size=0)

{

T max=a[0];

for(int i=1;i

{

if(max

{

max=a[i];

}

}

return max;

}

int main()

{

int a[]={23,45,1,37,2323,256,6};

double b[]={1.2,4.56,34,6.785,23.13};

int alength=sizeof(a)/sizeof(int);

int blength=sizeof(b)/sizeof(double);

cout<<"数组a的元素为:";

47

}

int i;

for(i=0;i

{

}

cout<<"n数组a的最大元素为:"<

cout<

cout<<"数组b的元素为:";

for(i=0;i

{

}

cout<<"n数组b的最大元素为:"<

cout<

return 0;

【6.13】 编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度型。

#include

using namespace std;

template

void Sort(T a[],int size=0)

{

T t;

for(int i=1;i<=size-1;i++)

{

for(int j=0;j

48

{

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

}

int main()

{

int a[]={23,45,1,37,2323,256,6};

double b[]={1.2,4.56,34,6.785,23.13};

int alength=sizeof(a)/sizeof(int); //存储数组a的长度

int blength=sizeof(b)/sizeof(double); //存储数组b的长度

int i; //i为循环变量

cout<<"排序前数组a的元素为:";

for(i=0;i

{

cout<

}

Sort(a,alength);

cout<<"n排序后数组a的元素为:";

for(i=0;i

{

49


本文标签: 函数 程序 成员 数组