1、国家二级 C+机试(操作题)模拟试卷 429及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为: Constructor,i=0, Destructor 注意:错误的语句在 *error*的下面,修改该语句即可。 #include class CObj int i; public: CObj(); void display(); CObj(); ; *error* CObj: CObj() cout #define N 10 void sort(int AN, int n) int m
2、ain() int AN=1, 2, 10, 5, 7, 19, 34, 78, 3, 8; Sort(A, 10); for(int i=0; i Class Cmelon private: float weight; *1* Static int totaiNo; public: Cmelon(float w) *2* totalweight +=w; totalNo+; Cmelon() *3* totalweight =-=weight; void display() cout; : (),因此第 1个标识下应改为 CObj:CObj(),默认构造函数没有参数。 (2)第 2个标识下
3、“CObj: display()”,从其后的语句看,这是在类外实现 CObj函数,因此也有作用域运算符使用错误问题, display()函数返回值为 void,因此第 2个标识下应改为 void CObj: display()。 (3)第 3个标识下 “CObj: CObj()”,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名字和类名相同,并在前面加 “ ”字符,用来与构造函数加以区别,因此第 3个标识下应改为 CObj: CObj()。 二、简单应用题 2 【正确答案】 int i, j; for (i=0; iAj+1) 如果前面的数比后面的大则进行交换 int t=Aj;
4、做交换 Aj =Aj+1; Aj+1 =t; 【试题解析】 (1)数组 AN中有 n个数,进行 n-1趟比较,在每一趟比较中两两比较的次数逐渐减少,比如若有 6个数 9,8,5,4,2,0。第一次将 8和 9对调,第二次将第 2和第 3个数 (9和 5)对调, ,如此共进行 5次,得到 8-5-4-2-0-9的顺序,可以看到:最大的数 9已 “沉底 ”,成为最下面一个数,而小的数 “上升 ”。最小的数 0已向上 “浮起 ”一个位置。经第 一趟 (共 5次 )后,已得到最大的数。然后进行第二趟比较,对余下的前面 5个数按上法进行比较,经过 4次比较,得到次大的数 8。如此进行下去。可以推知, 6
5、个数要比较 5趟。在第一趟中要进行两两比较 5次,在第二趟中比 4次, 第 5趟比 1次。因此设置两层循环,外层循环变量 i从 0变化大到 n-1,内层循环变量 j从 0到 n-j,在内层循环体内,比较相邻两数,如果前面比后面的大则交换。 (2)在内层循环体内,如果前面的元素比后面的元素大,则用一个临时变量记录前面的第 i个元素,然后将第 j+1个元素赋值给第 j个元素,临时变量值赋给第 j+1个元素,如此完成两个元素的交换。 三、综合应用题 3 【正确答案】 (1)添加语句: static float totalweight; (2)添加语句: weight=w; (3)添加语句: tota
6、lNo-; (4)添加语句: int Cmelon: totalNo=0; 【试题解析】 (1)静态数据成员声明时需使用关键字 static,因此第 1个标识下应添加 “static floattotalweight; ”。 (2)构造函数用来对类成员进行初始化,在 Cmelon类的构造函数 Cmelon(float w)中,完成 weight的初始化,并把这个 w加到 totalweight中,并且 totalNo自加,因此第 2个标识下应添加 “weight=w; ”。 (3)调用析构函数相当于退瓜,这时 totalweight中减去 weight,然后 totalNo自减,因此第 3个标识下应添加 “totalNo-; ”。 (4)静态数据成员的初始化格式为: : =,因此第 4个标识下应添加 “int Cmelon: totalNo=0: ”。