国家二级C++机试(操作题)模拟试卷492
基本操作题
1.请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR**********found**********”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
NUM=0
Value=1
注意:只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。
//proj1.cpp
#incclude
using namespace std;
class MyClass{
int i;
friend VOid Increment
(MyClass& f);
public:
const int NUN;
//ERROR********found********
MyClass(int i=0){NUN=0;
i=i;
}
int GetValue()const{return
i; }
};
//ERROR********found********
void Increment(){f.i++;}
int main()
{
NyClass obj;
//ERROR ****found****
NyClass::Increment(obj);
cout<<\\
(1)MyClass(int i=0):NUM(0){
(2)void Increment(MyClass&f){f._i++;}
(3)Increment(obj);
解析:(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,并且要使用关键字const修饰。该题的前一条语句const int NUM;,说明NUM是常量数据成员。
(2)主要考查考生对友元函数的掌握,友元函数的定义与声明要一致,先看该友元函数的声明部分:friend void Increment(MyClass&f);,返回类型为void,函数参数为MyClass&f;再比较出错的语句:void Increment(){f._i++;},错误在于该函数没有参数,应把MyClass&f填在括号内。
(3)主要考查友元函数的调用,友元函数并不属于类,因此调用友元函数时不需要添加类名及作用域,只需要像调用普通函数一样即可。
简单应用题
2.请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中含有一个源程序文件proj2.cpp。其中定义了类Set和用于测试该类的主函数main。类Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为100。为该类实现一个构造函数Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放人一个字符。此外,还要为该类实现另一个成员函数InSet(char C),用于测试一个字符c是否在一个集合中,若在,则返回true;否则返回false。
构造函数Set和成员函数InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。
提示:在实现构造函数时,可以调用InSet函数来判断一个字符是否已经在集合中。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
//proj2.cpp
#include
using namespace std;
const int MAXNUM=100;
class Set{
private:
int num; //元素个数
char setdata[MAXNUM]; //字符数组,用于存储集合元素
public:
Set(char *s); //构造函数,用字符串S构造一个集合对象
Bool InSet(char C);
//判断一个字符c是否在集合中,若在,返回true,否则返回false
void Print()const; //输出集合中所有元素
};
Set::Set(char*s)
{
num=0;
while(*s){
//************found************
if(________)//TODO:添加代码,测试元素在集合中不存在
//************found************
________;//TODO:添加一条语句,加入元素至集合中
s++;
}
}
bool Set::InSet(char c)
{
for(int i=0;i<num;i++)
//**********found**********
if(_________) //TODO:添加代码,测试元素C是否与集合中某元素相同
//**********found**********
________; //TODO:添加一条语句,进行相应处理
return false;
}
void Set::Print()const
{
cout<<\\
(1)!InSet(*s)
(2)setdata[num++]=*s
(3)c==setdata[i]
(4)return true
解析:(1)主要考查考生对成员函数的掌握,题目要求:添加代码,测试元素在集合中不存在,由类的定义可知函数bool InSet(char c)可以测试字符c是否在集合中,因此这里直接调用函数bool InSet(char c)即可。
(2)题目要求:添加一条语句,加入元素至集合中,集合用数组setdata表示,直接把元素添加到数组中即可。
(3)主要考查考生对if语句的掌握,题目要求:测试元素c是否与集合中某元素相同。前一条语句是个for循环,利用下标i遍历整个集合,通过if语句中的判断条件判断c是否在集合中,用“==”判断。
(4)主要考查考生对成员函数的掌握,先看函数的注释:判断一个字符c是否在集合中,若在,返回true,否则返回false。if语句成立时,说明字符c存在于集合中,因此应该返回true c。
综合应用题
3.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将一
本文档预览:3600字符,共5456字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载