return0;
}
答:
10
20
【2.21】举例说明可以使用const替代#define以消除#define的不安全性。
答:
例如#include
#defineA2+4
#defineBA*3
voidmain()
{
cout<
}
上面程序的运行结果是14而不是18但很容易被认为是18。
用const替代#define就能得到正确结果从而消除了#define的不安全性。
#include
constA=2+4;
constB=A*3;
voidmain()
{
cout<
}
运行结果为18。
【2.22】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项,并存储到动态分配的空间中。
#include
usingnamespacestd;
intmain()
{
inti;
int*p;
p=newint[20];
p[0]=0;
p[1]=1;
cout<<*p<<""<<*(p+1)<<"";
for(i=2;i<20;i++)
{
p[i]=p[i-2]+p[i-1];
cout<<*(p+i)<<"";
}
deletep;
return0;
}
【2.23】编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。
重载sroot()3次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sqrt())。
#include
#include
intsroot(intx)
{
return
(int)sqrt(x);
}
floatsroot(floatx)
{
return
(float)sqrt(x);
}
doublesroot(doublex)
{
return(double)sqrt(x);
}
voidmain()//test
{
inti=4;
intresultI=sroot(i);
floatj=4.0;
floatresultJ=sroot(j);
doublek=4.0000;
doubleresultK=sroot(k);
}
【2.24】编写一个C++风格的程序,解决百钱问题:
将一元人民币兑换成1、2、5分的硬币,有多少种换法?
#include
usingnamespacestd;
intmain()
{
inti,j,k;
intsum=0;
for(i=0;i<=100;i++)
for(j=0;j<=50;j++)
for(k=0;k<=20;k++)
{
if(i*1+2*j+5*k==100)sum++;
}
cout<<"总数为"<}
【2.25】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。
要求使用变量的引用。
#include
usingnamespacestd;
voidswap(int&x,int&y)
{
inttemp=x;
x=y;
y=temp;
}
intmain()
{
inta,b;
cin>>a>>b;
if(a>b)
swap(a,b);
cout<return0;
}
第三章:
【3.7】在下面有关对构造函数的描述中,正确的是(B)。
A.构造函数可以带有返回值
B.构造函数的名字与类名完全相同
C.构造函数必须带有参数
D.构造函数必须定义,不能默认
【3.8】在声明类时,下面的说法正确的是(C)。
A.可以在类的声明中给数据成员赋初值
B.数据成员的数据类型可以是register
C.private、public、protected可以按任意顺序出现
D.没有用private、public、protected定义的数据成员是公有成员
【3.9】在下面有关析构函数特征的描述中,正确的是(C)。
A.一个类中可以定义多个析构函数
B.析构函数名与类名完全相同
C.析构函数不能指定返回类型
D.析构函数可以有一个或多个参数
【3.10】构造函数是在(B)时被执行的。
A.程序编译B.创建对象
C.创建类D.程序装人内存
【3.11】在下面有关静态成员函数的描述中,正确的是(B)。
A.在静态成员函数中可以使用this指针
B.在建立对象前,就可以为静态数据成员赋值
C.静态成员函数在类外定义时,要用static前缀
D.静态成员函数只能在类外定义
【3.12】在下面有关友元函数的描述中,正确的说法是〔A)。
A.友元函数是独立于当前类的外部函数
B.一个友元函数不能同时定义为两个类的友元函数
C.友元函数必须在类的外部定义
D.在外部定义友元函数时,必须加关键字friend
【3.13】友元的作用之一是(A)。
A.提高程序的运行效率B.加强类的封装性
C.实现数据的隐藏性D.增加成员函数的种类
【3.14】以下程序运行