1、国家二级 C+机试(操作题)模拟试卷 218及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,其中在编辑窗口内显示的主程序文件中定义有类 ABC和主函数 main。程序文本中位于每行 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 21 23 注意:只修改每个 “ ERROR*found*”下面的一行,不要改动程序中的其他任何内容。 1 #include 2 using namespace std; 3 4 class ABC 5 public: 6 ERROR *found* 7 A
2、BC()a=0; b: 0;c=0; 8 ABC(int as, int bb, int cc); 9 void Setab()+a, +b; 10 int Sum()return a+b+c; 11 private: 12 int a, b; 13 const int c; 14 ; 15 16 ABC: ABC(int aa, int bb, int cc): c(cc)a=as; b: bb; ) 17 18 int main() 19 20 ABC x(1, 2, 3), y(4, 5, 6); 21 ABC z, *w= z; 22 w-Setab(); 23 ERROR *foun
3、d* 24 int s1=x Sum()+y-Sum(); 25 cout 3 #include 4 using namespace std; 5 clasS Person 6 char name2 0; 7 int age; 8 char*address; 9 public: 10 Person()age=0; address=0; ) 11 void name_change(char*_name); 12 名字修改函数 13 void age_change(int_age); 14 年龄修改函数 15 void address change(char*add); 16 地址修改函数 17
4、void info display(); 18 人员信息显示 19 Person(); 20 析构函数 21 ; 22 void writeToFile(const char*path); 1 proj 3 cpp 2 #include 3 #include 4 #include“proj3 h“ 5 using namespace std; 6 7 void Person: name change(char*_name) 8 9 strcpy(name, _name); 10 11 void Person: age_change(int_age) 12 13 age=_age; 14 15
5、void Person: address_change(char*_ 16 add) 17 18 if(address!=NULL)deletead- 19 dress; 20 *333* 21 *666* 22 23 void Pemson: info_display() 24 coutSum(): 【试题解析】 (1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:const int c;可知, c为常变量,因此构造函数必须使用成员列表初始化来给 C赋初始值。 (2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句: ABC x(1,2, 3), y(4, 5, 6);可知,
6、 x和 y都是 ABC类,但不是指针,因此它们调用 ABC类的成员函数要使用标识符 “ ”,而不是 “-”。 (3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句: ABC z,*w=给类成员变量动态分配空间 2 strcpy(address, _add);把字符串 add复制给 address 【试题解析】 函数 address_change(char*_add)的功能是地址修改,也就是说通过该函数把类的地址修改为 add字符串。类的私有成员 address是字符指针,因此首先要给 address分配空间,通过 new语句来实现: address=new charstrlen(_add)+1;。接下来就是要复制字符串,使用系统函数 strcpy,其用法为 strcpy(参数 1,参数 2),将参数 2的内容复制到参数 1中。