1、二级 C+-37及答案解析(总分:71.00,做题时间:90 分钟)一、B1改错题/B(总题数:1,分数:30.00)使用 VC+6.0打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。程序输出:s1:n=20s2:n=10执行 s3.add(s1,s2)s3:n=30s4:n=30注意:不要改动 main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.hclass TCint n;public:TC()TC(int m)n=m;/*error*TC add(TC s1
2、,s2)thisn=s1.n+s2.n;/*error*return(this);void disp()cout“n=“nend1;/*error*void main()TC s1(20),s2(10),s3,s4;cout“s1:“;s1.disp();cout“s2:“;s2.disp();s4=s3.add(s1,s2);cout“执行 s3.add(s1,s2)/ns3:“;s3.disp();cout“s4:“;s4.disp();(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、B2简单应用题/B(总题数:1,分数:40.00)1.使用 VC+6.0打开考生文件夹下
3、的源程序文件 2.cpp。阅读下列函数说明和代码,完成空出部分的程序。实现函数 sort(int A,int n),用冒泡法对数组数据进行排序。所谓冒泡法,就是每次把相邻的两个数交换,较大的数交换到后面。这样下标从 0到 n-1的数与其后面相邻的数交换,可以把最大的数交换到数组的末端。进行 n次下标从 0到 n-1的交换,则数组变成有序的,并且按由大到小排序。 注意:不能修改和删除程序的其他部分,也不能修改程序的结构。 试题程序: #includeiostream.h #define N 10 void sort(int AN,int n) int main() int AN=1,50,17,
4、69,87,42,90,-6,0,-11; sort(A,10); for(int i=0;isizeof(A)/sizeof(int);i+) coutAi; coutend1; return 0; (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:1.00)2.使用 VC6打开考生文件夹下的工程 test34_3。此工程包含一个 test34_3.cpp,其中定义了表示栈的类stack。源程序中 stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。 (1)定义类stack的私有数据成员 sp和 size,它们分别为整型的指针和变量,其中 sP指向存放栈的数据元素
5、的数组,size为栈中存放最后一个元素的下标值。请在注释“/*1*”之后添加适当的语句。 (2)完成类 stack的构造函数,该函数首先从动态存储空间分配含有 100个元素的 int型数组,并把该数组的首元素地址赋给指针 sp,然后将该数组的所有元素赋值为 0,并将 size赋值为-1(size 等于-1 表示栈为空)。请在注释“/*2*”之后添加适当的语句。 (3)完成类 stack的成员函数 push的定义。该函数将传入的整型参数x压入栈中,即在 size小于数组的最大下标情况下, size 自加 1,再给 x赋值。请在注释“/*3*”之后添加适当的语句。 (4)完成类 stack的成员函
6、数 pop的定义,该函数返回栈顶元素的值,即在 size不等于-1 的情况下,返回数组中下标为 size的元素的值,并将 size减 1。请在注释“/*4*”之后添加适当的语句。 程序输出结果如下: the top elem:1 the pop elem:1 the stack is empty 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 test34_3.cpp清单如下: #includeiostream.h class stack /* 1 * public: stack ( ); bool empty()return size=-1; bool full()
7、 return size=99; void push(int x); void pop(); void top(); ; stack:stack() /* 2 * for(int i=0; i100; i+) *(sp+i)=0; size=-1; void stack:push(int x) /* 3 * cout“the stack is full“end1; else size+; *(sp+size) = x; void stack:pop() /* 4 * cout“the stack is empty“end1; else cout“the pop elem:“*(sp+size)
8、end1; size-; void stack:top() if iempty() ) cout“the stack is empty“end1; else cout“the top elem:“*(sp+size)end1; void main ( ) stack s; s.push(1); s.top(); s.pop(); s.top(); (分数:1.00)_二级 C+-37答案解析(总分:71.00,做题时间:90 分钟)一、B1改错题/B(总题数:1,分数:30.00)使用 VC+6.0打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行
9、。程序输出:s1:n=20s2:n=10执行 s3.add(s1,s2)s3:n=30s4:n=30注意:不要改动 main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.hclass TCint n;public:TC()TC(int m)n=m;/*error*TC add(TC s1,s2)thisn=s1.n+s2.n;/*error*return(this);void disp()cout“n=“nend1;/*error*void main()TC s1(20),s2(10),s3,s4;cout“s1:
10、“;s1.disp();cout“s2:“;s2.disp();s4=s3.add(s1,s2);cout“执行 s3.add(s1,s2)/ns3:“;s3.disp();cout“s4:“;s4.disp();(分数:30.00)填空项 1:_ (正确答案:应改为“TC add(TC s1,TC s2)”。)解析:填空项 1:_ (正确答案:应改为“return(*this);”。)解析:填空项 1:_ (正确答案:应改为“;”。)解析:解析 本题中的变量“s2”没有声明类型,所以补充“s2”的类型,即“TC add(TC s1,TC s2)”。“thisn=s1.n+s2.n;”语句中的
11、this 变量为指针变量,所以第 2处的“return(this);”返回语句中的 this变量,应该返回指针型,所以修改为“return(*this);”。C+中类的定义格式应为“class类名;”,以分号为结尾,所以在第 3处的类结尾处补充分号“;”,即修改为“;”二、B2简单应用题/B(总题数:1,分数:40.00)1.使用 VC+6.0打开考生文件夹下的源程序文件 2.cpp。阅读下列函数说明和代码,完成空出部分的程序。实现函数 sort(int A,int n),用冒泡法对数组数据进行排序。所谓冒泡法,就是每次把相邻的两个数交换,较大的数交换到后面。这样下标从 0到 n-1的数与其后
12、面相邻的数交换,可以把最大的数交换到数组的末端。进行 n次下标从 0到 n-1的交换,则数组变成有序的,并且按由大到小排序。 注意:不能修改和删除程序的其他部分,也不能修改程序的结构。 试题程序: #includeiostream.h #define N 10 void sort(int AN,int n) int main() int AN=1,50,17,69,87,42,90,-6,0,-11; sort(A,10); for(int i=0;isizeof(A)/sizeof(int);i+) coutAi; coutend1; return 0; (分数:40.00)_正确答案:(i
13、nt i,j,k,t; for(i=0;in-1;i+) for(k=i,j=i+1;jn;j+) if(AkAj) /如果前面的比后面的小则需要交换 k=j; if(k!=i)/交换 t=Ai; Ai=Ak; Ak=t; )解析:解析 以数组“A=3,8,7,6,5,0,1,2,9,4”为例来说明具体的排序过程,第一次选择:第一步,从 A0=A9中找最大值 max及下标 k,max=9,k=8;第二步,交换 a0与最大值 a8的值;第一次结束后 a0已存放了最大值,下一次比较就不必再经过它了,而从 a1开始,如此循环。从例中可以看出 10个元素要进行 9次比较,n 个元素要进行 n-1次比较
14、。设置两层循环,外层循环变量 i从 0到 n-1,内层循环变量从 i开始到 n-1,在内层循环中找最大值,如果最大值的下标 k和 i不同,则交换,实现选择法排序。在内层循环体内,如果最大值的下标 k和 i不同,则用一个临时变量记录第 i个元素,然后将第 k个元素赋值给第 i个元素,临时变量值赋给第 k个元素,如此完成两个元素的交换。三、B3综合应用题/B(总题数:1,分数:1.00)2.使用 VC6打开考生文件夹下的工程 test34_3。此工程包含一个 test34_3.cpp,其中定义了表示栈的类stack。源程序中 stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。 (1
15、)定义类stack的私有数据成员 sp和 size,它们分别为整型的指针和变量,其中 sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“/*1*”之后添加适当的语句。 (2)完成类 stack的构造函数,该函数首先从动态存储空间分配含有 100个元素的 int型数组,并把该数组的首元素地址赋给指针 sp,然后将该数组的所有元素赋值为 0,并将 size赋值为-1(size 等于-1 表示栈为空)。请在注释“/*2*”之后添加适当的语句。 (3)完成类 stack的成员函数 push的定义。该函数将传入的整型参数x压入栈中,即在 size小于数组的最大下标情况下,
16、 size 自加 1,再给 x赋值。请在注释“/*3*”之后添加适当的语句。 (4)完成类 stack的成员函数 pop的定义,该函数返回栈顶元素的值,即在 size不等于-1 的情况下,返回数组中下标为 size的元素的值,并将 size减 1。请在注释“/*4*”之后添加适当的语句。 程序输出结果如下: the top elem:1 the pop elem:1 the stack is empty 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 test34_3.cpp清单如下: #includeiostream.h class stack /* 1 * pub
17、lic: stack ( ); bool empty()return size=-1; bool full() return size=99; void push(int x); void pop(); void top(); ; stack:stack() /* 2 * for(int i=0; i100; i+) *(sp+i)=0; size=-1; void stack:push(int x) /* 3 * cout“the stack is full“end1; else size+; *(sp+size) = x; void stack:pop() /* 4 * cout“the
18、stack is empty“end1; else cout“the pop elem:“*(sp+size)end1; size-; void stack:top() if iempty() ) cout“the stack is empty“end1; else cout“the top elem:“*(sp+size)end1; void main ( ) stack s; s.push(1); s.top(); s.pop(); s.top(); (分数:1.00)_正确答案:(1) int *sp; int size; (2) spnew int100; (3) if(full() (4) if(empty()解析:解析 本题主要考查的是考生利用类、数组、指针和基本控制结构等知识,建立经典数据结构的能力。栈在数据结构中是一应用范围很广的类,在这里实现的只是最核心的部分。在该题中特别注意使用new进行动态空间申请及指针在数组访问中的应用。