1、国家二级 C+机试(操作题)模拟试卷 20及答案与解析 一、基本操作题 1 使用 VC+6, 0打开考生文件夹下的源程序文件 1 cpp,该程序运行时有错,请改正程序中的错误,使程序输出的结果为 10 6 30 2 2 注意:错误的语句在 *error*的下面,修改该语句即可。 试题程序: #include 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) i
2、f(i!=0) return number =i; else return number; *error* typedef int(FUNC)(int); *error* FUNC func; public: TC() func0=TC: Add; fune1=TC: Sub; func2=TC: Mul; func3=TC: Div; number=0; int CallFunction(int i, int j) *error* return(funei)(j); ; void main() TC myobj; cout void sort(int&m, int&n, int&1) int
3、 main() int x=9: int y=13; int z=-3: sort(x, y, z); cout #include #define MAXLEN 20 class TC private: *1* int age; public: TC(char * newName, char *newStreet, char * newCt, char*newZp, int newAge); void alterName(char*newName); void display(); bool IsEqual(char*ename); ; TC: TC(char*newName, char*ne
4、wStreet, char* newCt, char*newZp, int newAge) *2* age=newAge; void TC: alterName(char*newName) *3* bool TC: IsEqual(char*ename) *4* void TC: display() coutname“street“; coutcity“zipcode“ageend1; void main(void) TC employee4= TC(“张三 “, “海淀区复兴路 1号 “, “北京 “, “000001“, 18), TC(“李四 “, “海淀区复 兴路 2号 “, “北京
5、“, “000002“, 19), TC(“王五 “, “海淀区复兴路 3号 “, “北京 “, “000003“, 20), TC(”赵六 ”, “海淀区复兴路 4号 “, “北京 “, “000004“, 21) ; for(int i=0; i(4; i+) employeei display(); cout“ n修改 “李四 “的名字为 “李小四 “ n“ end1; for(int j=0; j4; j+) if (employeej IsEqual(“李四 “) employeej alterName(“李小四 “); employeej display(); break; 国家二
6、级 C+机试(操作题)模拟试卷 20答案与解析 一、基本操作题 1 【正确答案】 (1)“typedef int(TC: *FUNC)(int); ”。 (2)“FUNC func4; ”。 (3)“return(this-)*funci)(j); ”。 【试题解析】 在类中定义函数指针须指定类名及指针定义运算符 *,因此第 1处函数指针正确的定义为 “typedef int(TC: *FUNC)(int); ”。函数指针数组本身是数组类型,因此在定义时如果没有初始化,就必须指定数组大小,在本题中因为指针数组包含的指针变量需要指向 4种算数运算,因此定义指针数组大小为 4,即第 2处应改为 “
7、FUNC func4; ”。 func是指针数组,因此访问时需要有指针运算符 “*”,第 3处应改成 “return(this- *funci)(j); ”。 二、简单应用题 2 【正确答案】 int t; if(m(n) t=m; m=n; n=t; *交换 x, y的值 * if(m(1) t=m; m=1; 1=t; *交换 x, z的值 * if(n(1) t=n; n=1; 1=t; *交换 z, y的值 * 【试题解析】 由审题分析可知, 3次比较便可将 m、 n、 1排序。先将 m与 n进行比较,如果 mn,则将 m与 n的值进行交换,然后再用 m与 1进行比较,如果m1,则将
8、m与 1的值进行交换,这样能使 m最大。然后再将 n与 1进行比较,若 n1,则将 n与 1的值互换,互换后则 1最小,这样就得到 m最大, 1最小的排序结果。在 sort函数内用 3个 if语句比较即可,条件成立则进行交换。 三、综合应用题 3 【正确答案】 (1)应添加 “char name-MAXLEN, streetMAXLEN,cityMAXLEN, zipcodeMAXLEN; ”。 (2)应添加 “strcpy(name, newName)strcpy(street, newStreet); strcpy(city, newCt);strcpy(zipcode, newZp);
9、”。 (3)应添加 “strcpy(name, newName); ”。 (4)应添加 “return strcmP(name, ename)=0; ”。 【试题解析】 本题第 1处要求补充类 TC的私有数据成员 name、 street、 city、zipcode和 age的定义,分别用于表示姓名、街道、城市、邮编、年龄,除年龄是整型外,其余都是 char型的数据,由主函数内的对象数组可知, name、 street、city、 zipcode均为字符数组,故第 1处应添加 “char nameMAXLEN,streetMAXLEN, cityMAXLEN, zipcodeMAXLEN; ”
10、。构造函数完成成员变量 的初始化,这里需要给 name、 street、 city、 zipcode赋初值,可利用字符串拷贝函数将参数字符串复制到成员变量中,第 2处应添加 “strcpy(name,newName); strcpy(street, newStreet); strcpy(city, newCt); strcpy(zipcode,newZp); ”。 函数 aherName(char*newName)是改变成员变量 name的值,即将参数复制给name,可利用字符串拷贝函数 strcpy完成复 制任务,故第 3处应添加“strcpy(name, newName); ”。 IsEqual(char*ename)函数是比较 name成员变量和参数 newName 是否相同,可使用字符串比较函数 strcmp,第 4处应添加 “return strcmp(name, ename)=0; ”。