面向对象程序设计C++课后题答案 下载本文

8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

[2_10] 建立一个被称为sroot()的函数,返回其参数的二次方根。重载sroot()三次, 让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准 库函数sqrt()) #include #include

int sroot(int );long sroot(long);double sroot(double); double sqrt();//声明开方函数sqrt() void main()

{ int i,x;long l,y;double d,z; cin>>i; cin>>l; cin>>d; x=sroot(i); y=sroot(l); z=sroot(d); cout<

int sroot(int i)

{ return sqrt(i); } //i是整数 long sroot(long l)

{ return sqrt(l); } //l是长整型 double sroot(double d) { return sqrt(d); } //d是双精度 //敲进9 16 25 //输出3 4 5

9

习题[2_11] 编写C++风格的程序,解决百钱问题,将一元人民币兑换成1、2、5分的硬币,有多少种换法? #include void main() { int i,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<<”sum is “<

习题[2_12] 编写C++风格的程序,用二分法求解f(x)=0的根 #include #include inline float f(float x)

{ return 2*x*x*x-4*x*x+3*x-6; } void main()

{ float left,right,middle,ym,yl,yr;

cout<<”pleass two number:”<>left>>right; yl=f(left); yr=f(right);

10

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<<”\\nRoot is:”<

本例使用了内联函数f(x),因为在主函数中多次调用它,这样可以加快代码执行的速度。敲进两个数:-10 10 结果:Root is 2

[2_13]答:运行结果是:2 4 6 12 10 说明:本例使用的是返回引用的值,index(3)=12;语句的执行实际将a[3]赋值为12。

[2_14]答:运行结果为:101 说明:在语句::i=i+1;中赋值号左边::i的i单元是全 局变量,赋值号右边的i单元是局部变量i。所以执行该语句的结果是 将局部变量i的值+1(101)赋值给全局变量i

[2_15]答:结果是:10 10 说明:函数f(&a,b)中的第一个参数是引用,引用参数是一种按地址传递参数的方法,对其的调用是传地址调用;而第二个参数是变量参数,对它的调用是通常的传值调用。所以运行后,a的值被改为10,b的值不变,仍为10

11

[2_16]答:D

说明:int *p=new int(10);表示分配1个整型空间,初值为10 int *p=new int[10];表示分配10个整型空间 int *p=new int;表示分配1个整型空间

int *p=new int[10](0)想给一个数组分配内存空间时,对整个数组进行初始化,这是不允许的。

[2_17]答:D 说明:name被定义为指向常量的常指针,所以它所指的内容和本 身的内容都不能修改,而name[3]=?a?;修改了name所指的 常量,name=?lin?;和name=new char[5];修改了常指针,只有 D输出一个字符是正确的。

[2_18]答:A 说明:name被定义指向常量的指针,这是一个不能移动的固定指针,它所指的内容不能改变,但指针所指的数据可以改变,而name[3]=?q?;修改了name所指的内容,是正确的。name=”lin”; name=new char[5]; name=new char(?q?);以不同的方法修改了常指针,都是错误的。

[2_19]答:A 说明:name被定义指向常量的指针,不允许改变指针所指的常量,但指针本身的内容可以修改,而name[3]=?q?;修改了name所指的内容,是错误的。name==”lin” name=new char[5];和name=new char(?q?)以不同的方法修改了常指针,都是正确的。

[2_20]答:D 说明:C++中不能建立引用数组和指向引用的指针,也不能建立引用的引用。所以A、B、C是错误的,D是正确的。

12