1、国家二级 C+机试(操作题)模拟试卷 141及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程中包含程序文件 main epp,其中有 ElectricFan(“电风扇 ”)类和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 品牌:清风牌,电源:关,风速: 0 品牌:清风牌,电源:开,风速: 3 品牌:清风牌,电源:关,风速: 0 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include usi
2、ng namespace std; class ElectricFan “电扇 ”类 char*brand; int intensity; 风速: 0一关机, 1一弱, 2一中, 3一强 public: ElectricFan (const char*the brand): intensity(O) brand=new char strlen(thebrand)+1; strcpy(brand, the brand); 一 ElectricFan()deletebrand; ) ERROR*found* const char*theBrand()constreturn*brand; ) 返回电
3、扇品牌 int theIntensity()const returnintensity; ) 返回风速 bool isOn()constreturn intensity0; 返回电源开关状态 ERROR*found* void turnOff()intensity=1; ) 关电扇 void setIntensity(int inten) 开电扇并设置风速 ERROR*found* if(intensity=1 intensity #include #include using namespace std; class AutoMobile “汽车 ”类 char*brand; 汽车品牌 ch
4、ar*number; 车牌号 int speed; 档位: 1、 2、 3、 4、 5,空档: 0,倒档:一 1 public: AutoMobile(const char*the_brand, const char*the_number): speed(0) brand=new char strlen(the brand)+1 ; *found* _; *found* _; strcpy(number, thenumber); 一 AutoMobile()deletebrand; deletenumber; ) const char*theBrand()constre- turn brand
5、; ) 返回品牌名称 const char*theNumber()constreturn number; )返回车牌号 int currentSpeed()const returnspeed; ) 返回当前档位 void changeGearTo(int the_speed) 换到指定档位 if(speed=一 1 speed us ing namespace std; #include“prj3 h” int FriFun(FriFunClass X) *333* 由于函数 FriFun()是类 FriFunClass 的友元函数, 所以它可以直接访问 a和 b *666* int main
6、() FriFunClass n(10, 20); if(FriFun(n) cout=10一关机, 1一弱, 2一中, 3一强,可知本函数要关电扇,因此在这里 in-tensity=0;。 (3)主要考查考生对成员函数的掌握,根据题目中函数的注释:开电扇并设置风速,可知 if语句里要判断的应该是形参 inten而不是 intensity。 【解题宝典】 主要考查考生对指针和成员函数的掌握,成员函数主要考查考生的逻辑思维,尤其要注意类的定义。 二、简单应用题 2 【正确答案】 (1)strcpy(brand, thebrand) (2)number=new charstrlen(thenumb
7、er)+1 (3)theBrand() (4)constreturn“卡车 ”; 【试题解析】 本题考查的是 AutoMobile类及其派生类 Car类和 Truck类,其中涉及动态数组、构造函数、 strcpy()函数、析 构函数、纯虚函数和虚函数。本题程序较多,基类较复杂,但细心看会发现程序很容易读,考的知识点都很简单,和前后语句一对比就可以得到答案。 【解题思路】 (1)主要考查考生对 strcpy函数的掌握情况,在上一条语句程序给 brand指针分配了空间,在这里要复制字符串 thebrand,即 strcpy(brand, thebrand);。 (2)主要考查考生对动态分配的掌握情
8、况,参考 brand指针的复制过程完成该语句,先给指针 number分配空间,通过 new来完成: number=new charstrlen(thenumber)+1;。 (3)主要考查考生对成员函数的掌握,由程序可知这里要输出的是品牌,因此调用成员函数 theBrand()来输出品牌。 (4)主要考查考生对纯虚函数的掌握,根据纯虚函数的定义: virtual const char*category()const=0;,可知在这里要填写: constreturn“卡车 ”; 。 三、综合应用题 3 【正确答案】 int min=x ax b?x a: x b; 此处为取出 x a与 x b中
9、的最小值 for(int i=2; i=min; i+) 从 i到 min遍历数组 if(x a i=0 &x b i=0) 如 i能同时整除 x a来的 x.b,则仅回 i return i; return一 1; 【试题解析】 本题考查的是 FriFunClass类,其中涉及构造函数和友元函数。题目要求完成友元函数,在函数体内可以任意调用 FriFunClass类的私有成员。 【解题思路】主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员,题目要求函数求出两个数据成员的大于 1的最小公因子,从 2开始往上算,因此要同时可以被两个私有成员整除,这 里用取余符号完成,取余为 0即为整除。 【解题宝典】主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员。