C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx

上传人:b****2 文档编号:22809971 上传时间:2023-04-28 格式:DOCX 页数:121 大小:42.15KB
下载 相关 举报
C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx_第1页
第1页 / 共121页
C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx_第2页
第2页 / 共121页
C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx_第3页
第3页 / 共121页
C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx_第4页
第4页 / 共121页
C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx_第5页
第5页 / 共121页
点击查看更多>>
下载资源
资源描述

C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx

《C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx》由会员分享,可在线阅读,更多相关《C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx(121页珍藏版)》请在冰豆网上搜索。

C面向对象程序设计习题解答与上机指导第二版源程序Word版.docx

C面向对象程序设计习题解答与上机指导第二版源程序Word版

C++面向对象程序设计习题解答与上机指导(第2版)

习题参考答案源代码

使用源程序的几点注意事项

(1)由于源程序在复制、编辑、解压缩等过程中可能引起部分符号(主要是标点符号,如分号、冒号、逗号、引号)的字体、半全角等发生变化,在编译时可能被检出语法错误,只要使用“替换”功能,纠正后即能顺利运行。

(2)有的C++系统(如VisualC++6.0)没有完全实现C++标准,它所提供的不带后缀的.h的头文件不支持友元运算符重载函数,在VisualC++6.0中编译会出错,这时可采用带后缀的.h头文件。

将程序中的

#include

usingnamespacestd;

修改成

#include

即可顺利运行。

第2章C++基础

【2.2】下面是一个C程序,改写它,使它采用C++风格的I/O语句。

#include

intmain()

{inta,b,d,min;

printf("Entertwonumbers:

");

scanf("%d%d",&a,&b);

min=a>b?

b:

a;

for(d=2;d

if(((a%d)==0)&&((b%d)==0))break;

if(d==min)

{printf("Nocommondenominators\n");

return0;

}

printf("Thelowestcommondenominatoris%d\n",d);

return0;

}

【解】

#include

usingnamespacestd;

intmain()

{inta,b,d,min;

cout<<"Entertwonumbers:

";

cin>>a;

cin>>b;

min=a>b?

b:

a;

for(d=2;d

if(((a%d)==0)&&((b%d)==0))break;

if(d==min)

{cout<<"Nocommondenominators\n";

return0;

}

cout<<"Thelowestcommondenominatoris"<

return0;

}

【2.24】写出下列程序的运行结果。

#include

usingnamespacestd;

inti=15;

intmain()

{inti;

i=100;

:

:

i=i+1;

cout<<:

:

i<

return0;

}

运行结果:

101

Pleaseanykeytocontinue。

【2.25】写出下列程序的运行结果。

#include

usingnamespacestd;

voidf(int&m,intn)

{inttemp;

temp=m;

m=n;

n=temp;

}

intmain()

{inta=5,b=10;

f(a,b);

cout<

return0;

}

结果:

1010

Pleaseanykeytocontinue。

【2.26】分析下面程序的输出结果。

#include

usingnamespacestd;

int&f(int&i)

{i+=10;

returni;

}

intmain()

{intk=0;

int&m=f(k);

cout<

m=20;

cout<

return0;

}

运行结果:

10

20

Pleaseanykeytocontinue。

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

【解】实现本题功能的程序如下:

#include

usingnamespacestd;

intmain()

{int*p=newint[20];//动态分配20个整型内存空间

*p=1;

*(p+1)=1;//对前面2个内存空间赋值1

cout<<*p<<"\t"<<*(p+1)<<"\t";

p=p+2;//p指向第3个内存空间

for(inti=3;i<=20;i++)

{*p=*(p-1)+*(p-2);

cout<<*p<<"\t";

if(i%5==0)cout<

p++;//p指向下一个内存空间;

}

return0;

}

【2.28】编写一个C++风格的程序,建立一个被称为sroot的函数,返回其参数的二次方根。

重载函数sroot三次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sqrt)。

【解】实现本题功能的程序如下:

#include

#include

usingnamespacestd;

doublesroot(inti)

{returnsqrt(i);

}

doublesroot(longl)

{returnsqrt(l);

}

doublesroot(doubled)

{returnsqrt(d);

}

intmain()

{inti=12;

longl=1234;

doubled=12.34;

cout<<"i的二次方根是:

"<

cout<<"l的二次方根是:

"<

cout<<"d的二次方根是:

"<

return0;

}

【2.29】编写一个C++风格的程序,解决百钱问题:

将一元人民币兑换成1、2、5分的硬币,有多少种换法?

【解】实现本题功能的程序如下:

#include

usingnamespacestd;

intmain()

{inti,j,sum=0;;

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

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

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

{sum++;

cout<<100-5*i-2*j<<"\t"<

}

cout<<"sumis"<

return0;

}

【2.30】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。

要求使用变量的引用。

【解】实现本题功能的程序如下:

#include

usingnamespacestd;

intmain()

{voidchange(int&,int&);

inta,b;

cin>>a>>b;

if(a>b)change(a,b);

cout<

return0;

}

voidchange(int&a1,int&b1)

{inttemp;

temp=a1;

a1=b1;

b1=temp;

}

【2.31】编写C++风格的程序,用二分法求解f(x)=0的根。

【解】实现本题功能的程序如下:

#include

#include

usingnamespacestd;

inlinefloatf(floatx)

{return2*x*x*x-4*x*x+3*x-6;

}

intmain()

{floatleft,right,middle,ym,yl,yr;

cout<<"pleasetwonumber:

"<

cin>>left>>right;

yl=f(left);

yr=f(right);

do

{middle=(right+left)/2;

ym=f(middle);

if(yr*ym>0)

{right=middle;

yr=ym;

}

else

{left=middle;

yl=ym;

}

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

cout<<"\nRootis:

"<

return0;

}

第3章类和对象

(一)

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

#include

usingnamespacestd;

classtest

{public:

test();

~test(){};

private:

inti;

};

test:

:

test()

{i=25;

for(intctr=0;ctr<10;ctr++)

{cout<<"Countingat"<

}

}

testanObject;

intmain()

{return0;

}

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

#include

usingnamespacestd;

classTest{

private:

intval;

public:

Test()

{cout<<"default."<

}

Test(intn)

{val=n;

cout<<"Con."<

}

Test(constTest&t)

{val=t.val;

cout<<"Copycon."<

}

};

intmain()

{Testt1(6);

Testt2=t1;

Testt3;

t3=t1;

return0;

}

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

#include

usingnamespacestd;

classStudent{

public:

voidprintStu();

private:

charname[10];

intage;

floataver;

};

intmain()

{Studentp1,p2,p3;

p1.age=30;

return0;

}

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

#include

usingnamespacestd;

classStudent{

intsno;

intage;

voidprintStu();

voidsetSno(intd);

};

voidprintStu()

{cout<<"\nSnois"<

cout<<"ageis"<

}

voidsetSno(ints)

{sno=s;

}

voidsetAge(inta)

{age=a;

}

intmain()

{Studentlin;

lin.setSno(20021);

lin.setAge(20);

lin.printStu();

}

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

#include

usingnamespacestd;

classPoint{

public:

intx,y;

private:

Point()

{x=1;y=2;

}

};

intmain()

{Pointcpoint;

cpoint.x=2;

return0;

}

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

classcounter{

public:

counter(intnumber);

voidincrement();//给原值加1

voiddecrement();//给原值减1

intgetvalue();//取得计数器值

intprint();//显示计数

private:

intvalue;

};

【解】

classcounter{

public:

counter(intnumber);

voidincrement();//给原值加1

voiddecrement();//给原值减1

intgetvalue();//取得计数器值

intprint();//显示计数

private:

intvalue;

};

counter:

:

counter(intnumber)

{value=number;

}

voidcounter:

:

increment()

{value++;

}

voidcounter:

:

decrement()

{value--;

}

intcounter:

:

getvalue()

{returnvalue;

}

intcounter:

:

print()

{cout<<"valueis"<

return0;

}

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

#include

usingnamespacestd;

classDate{

public:

voidprintDate();//显示日期

voidsetDay(intd);//设置日的值

voidsetMonth(intm);//设置月的值

voidsetYear(inty);//设置年的值

private:

intday,month,year;

};

intmain()

{DatetestDay;

testDay.setDay(5);

testDay.setMonth(10);

testDay.setYear(2003);

testDay.printDate();

return0;

}

【解】

voidDate:

:

printDate()

{cout<<"\nDateis"<

cout<

}

voidDate:

:

setDay(intd)

{day=d;

}

voidDate:

:

setMonth(intm)

{month=m;

}

voidDate:

:

setYear(inty)

{year=y;

}

【3.25】建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。

用类cylinder计算圆柱体的体积,并存储在一个double变量中。

在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。

【解】实现本题功能的程序如下:

#include

usingnamespacestd;

classcylinder{

public:

cylinder(doublea,doubleb);

voidvol();

private:

doubler,h;

doublevolume;

};

cylinder:

:

cylinder(doublea,doubleb)

{r=a;h=b;

volume=3.141592*r*r*h;

}

voidcylinder:

:

vol()

{cout<<"volumeis:

"<

}

intmain()

{cylinderx(2.2,8.09);

x.vol();

return0;

}

【3.26】构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。

构造函数含3个参数:

字符数组na[]及q、p。

当定义Stock的类对象时,将对象的第1个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、price。

未设置第2和第3个参数时,quan的值为1000,price的值为8.98。

成员函数print没有形参,需使用this指针,显示对象数据成员的内容。

假设类Stoc第1个对象的三个参数分别为:

"600001",3000和5.67,第2个对象的第1个数据成员的值是"600001",第2和3数据成员的值取默认值。

要求编写程序分别显示这两个对象数据成员的值。

【解】实现本题功能的程序如下:

#include

usingnamespacestd;

constintSIZE=80;

classStock{

public:

Stock()

{strcpy(stockcode,"");

}

Stock(charcode[],intq=1000,doublep=8.98)

{strcpy(stockcode,code);

quan=q;

price=p;

}

voidprint(void)

{cout<stockcode;

cout<<""<quan<<""<price<

}

private:

charstockcode[SIZE];

intquan;

doubleprice;

};

intmain()

{Stockst1("600001",3000,5.67);

st1.print();

Stockst2("600002");

st2.print();

return0;

}

第4章类和对象

(二)

【4.12】以下程序的运行结果是()。

#include

usingnamespacestd;

classB{

public:

B(){}

B(inti,intj)

{x=i;

y=j;

}

voidprintb()

{cout<

}

private:

intx,y;

};

classA{

public:

A()

{}

A(intI,intj);

voidprinta();

private:

Bc;

};

A:

:

A(inti,intj):

c(i,j)

{}

voidA:

:

printa()

{c.printb();

}

intmain()

{Aa(7,8);

a.printa();

return0;

}

A)8,9B)7,8

C)5,6D)9,10

【4.13】以下程序的运行结果是()。

#include

usingnamespacestd;

classA{

public:

voidset(inti,intj)

{x=i;

y=j;

}

intget_y()

{returny;

}

private:

intx,y;

};

classbox{

public:

voidset(intl,intw,ints,intp)

{length=l;

width=w;

label.set(s,p);

}

intget_area()

{returnlength*width;

}

private:

intlength,width;

Alabel;

};

intmain()

{boxb;

b.set(4,6,1,20);

cout<

return0;

}

A)24B)4

C)20D)6

【4.14】以下程序的运行结果是()。

#include

usingnamespacestd;

classSample{

public:

Sample(inti,intj)

{x=i;

y=j;

}

voiddisp()

{cout<<"disp1"<

}

voiddisp()const

{cout<<"disp2"<

}

private:

intx,y;

};

intmain()

{constSamplea(1,2);

a.disp();

return0;

}

A)disp1B)disp2

C)disp1disp2D)程序编译出错

【4.15】以下程序的运行结果是()。

#include

usingnamespacestd;

classR{

public:

R(intr1,intr2)

{R1=r1;

R2=r2;

}

voidprint();

voidprint()const;

private:

intR1,R2;

};

voidR:

:

print()

{cout<

}

voidR:

:

print()const

{cout<

}

intmain()

{Ra(6,8);

constRb(56,88);

b.print();

return0;

}

A)6,8B)56,88

C)0,0D)8,6

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

#include

usingnamespacestd;

classStudent{

public:

Student()

{++x;

cout<<"\npleaseinputstudentNo.";

cin>>Sno;

}

staticintget_x()

{returnx;

}

intget_Sno()

{returnSno;

}

private:

staticintx;

intSno;

};

intStudent:

:

x=0;

intmain()

{cout<

:

get_x()<<"Studentexist\n";

Studentstu1;

Stude

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1