二级C++-15-2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二级C++-15-2
(总分:100.00,做题时间:90分钟)
一、程序改错题(总题数:1,分数:30.00)
1.使用VC++6.0打开下的源程序文件1.cpp,该程序运行时有错,请改正程序中的错误,使程序输出的结果为
10
6
30
2
2
注意:错误的语句在//******error******的下面,修改该语句即可。
试题程序:
#include<iostream.h>
class TC
{
private:
int number;
int Add(int i)
{
return number+=i;
}
int Sub(int i)
{
return number-=i;
}
int Mul(int i)
{
return number*=i;
}
int Div(int i)
{
if(i! =0)
{
return number/=i;
}
else
return number;
}
//******error******
typedef int(FUNC)(int);
//******error******
FUNC func[];
public:
TC()
{
func[0]=TC::Add;
func[1]=TC::Sub;
func[2]=TC::Mul;
func[3]=TC::Div;
number=0;
}
int CallFunction(int i,int j)
{
//******error******
return(func[i])(j);
}
};
void main()
{
TC myobj;
cout<<myobj.CallFunction(0,10)<<endl;
cout<<myobj.CallFunction(1,4)<<endl;
cout<<myobj.CallFunction(2,5)<<endl;
cout<<myobj.CallFunction(3,15)<<endl;
cout<<myobj.CallFunction(3,0)<<endl;
}
(分数:30.00)
__________________________________________________________________________________________
正确答案:()
解析:(1)应改为:“typedef int(TC:: * FUNC)(int);”。
(2)应改为:“FUNC func[4];”。
(3)应改为:“return(this->* func[i])(j);”。
答案考生文件夹[解析] 在类中定义函数指针须指定类名及指针定义运算符*,因此第1处函数指针正确的定义为“typedef int(TC:: * FUNC)(int);”。
函数指针数组本身是数组类型,因此在定义时如果没有初
始化,就必须指定数组大小,在本题中因为指针数组包含的指针变量需要指向4种算数运算,因此定义指
针数组大小为4,即第2处应改为“FUNC fune[4];”。
func是指针数组,因此访问时需要有指针运算符“*”,第3处应改成“return(this->*func[i])(j);”。
二、简单应用题(总题数:1,分数:30.00)
2.使用VC++6.0打开下的源程序文件2.cpp。
阅读下列函数说明和代码,补充空出的代码。
使sum(int n)能计算所有n的因子之和(不包括1和自身)。
注意:不能修改程序的其他部分,只能补充sum函数。
试题程序:
#include<iostream.h>
int sum(int n)
{
}
void main()
{
cout<<sum(10)<<endl;
cout<<sum(200)<<endl;
cout<<sum(400)<<endl;
return;
}
(分数:30.00)
__________________________________________________________________________________________ 正确答案:()
解析:int all=0;
for(int i=2;i<n;i++)
{
if(n%i==0)
{
all+=i;
}
}
return all;
答案考生文件夹 [解析] 为了实现计算所有n的因子之和且不包含1和自身,在函数中定义一个变量all 来保存求和结果,并为最终结果在函数结束时返回。
在循环中逐个寻找13的因子,为了在计算中排除掉1和n本身,因此循环变量i的变化范围为2~(n-1)。
如果n%i==0,说明i是n的因子,因此将i加到all 上。
三、综合应用题(总题数:1,分数:40.00)
3.使用VC++6.0打开下的源程序文件3.cpp,其中定义了用于表示学生学号的类StuID,但类StuID的定义并不完整。
请按要求完成下列操作,将类StuID的定义补充完整,使程序的运行结果为
学生的学号为:20100401
学生名为:张三
删除学生学号为:20100401
(1)定义StuID类的私有数据成员IDvalue,用于表示学生的学号,学号为long型的数据。
请在注释1之后添加适当的语句。
(2)完成默认构造函数StuID的定义,使StuID对象的默认值为:id=0,并把学生的学号赋给IDvalue,并输出“学生的学号为:”及学号。
请在注释2之后添加适当的语句。
(3)完成默认析构函数StuID的定义,使StuID析构时输出“删除学生学号为:”及学号。
请在注释3之后添加适当的语句。
(4)完成默认构造函数StuInfo的定义。
对应两个默认参数:定义char stName[],其默认值为“no name”,定义longstID,其默认值设为0,并使它们赋值给相应的类数据成员。
请在注释4之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
试题程序:
#include<iostream.h>
#include<string.h>
class StuID
{
//********1********
public:
//********2********
{
IDvalue=id;
cout<<"学生的学号为:"<<IDvalue<<endl;
}
//********3********
{
cout<<"删除学生学号为:"<<IDvalue<<endl;
}
};
class StuInfo
{
private:
StuID id;
char name[20];
public:
//********4********
{
cout<<"学生名为:"<<stName<<endl;
strcpy(name,stName);
}
};
void main()
{
StuInfo st("张三",20100401);
}
(分数:40.00)
__________________________________________________________________________________________
正确答案:()
解析:(1)应添加“long IDvalue;”。
(2)应添加“StuID(long id=0)”。
(3)应添加“~StuID()”。
(4)应添加“StuInfo(char stName[]="no name",long stID=0):id(stID)”。
答案考生文件夹[解析] 本题中在第1处完成StuID类的私有数据成员IDvalue的定义,应为long型的数据,因此第1处应添加“long IDvalue;”。
构造函数完成类成员变量的初始化,构造函数名和类名一致,该构造函数带有一个参数id,其默认值为id=0,因此第2处应添加“StuID(long id=0)”。
析构函数也和类名一致,并且在前面加“~”以和构造函数区分,析构函数没有参数,故第3处应添加“~StuID()”。
StuInfo包含的学生学号信息保存在类StuID的实例中,可通过调用类StuID的自定义构造函数初始化,第4处应添加“StuInfo(char stName[]="no name",long stID=0):id(stID)”。