国家二级C++机试(操作题)模拟试卷672
基本操作题
1.请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释\\
(1)protected:
(2)msg = new char[strlen(str)+1];
(3)~Base() {delete[ ]msg; }
解析:(1)主要考查保护成员,因为在Base类的派生类中直接调用了msg,所以这里应该是保护成员。
(2)主要考查考生对动态分配的掌握,由下一条语句:strcpy(msg,str)可知,程序要将字符串str复制给msg,因此要给msg分配空间,空间大小应该为str的长度加1。
(3)主要考查考生对析构函数的掌握,delete语句要加上标识符’[ ]’。
简单应用题
2.请打开考生文件夹下的解决方案文件proj2,函数void Insert(node*q)使程序能完成如下功能:从键盘输入一行字符,调用该函数建立反序单链表,再输出整个链表。
注意:请勿修改主函数main和其他函数中的任何内容,只需在横线处编写适当代码,也不要删除或移动“//****found****\\
(1)q->link = head
(2)p =new node
(3)Insert(p)
解析:(1)主要考查考生对链表的掌握,函数功能是将节点插入链表首部。在插入链表首部,即将该节点的指针域指向头结后head。
(2)主要考查考生对动态分配的掌握,用new为节点p动态分配存储空间节点P为node类型,因此直接使用new node分配空间并将首地址赋给P即可。
(3)程序要求插入该节点,应调用Insert函数,并将指针P作为函数的实参。
综合应用题
3.请打开考生文件夹下的解决方案文件prog3,其中声明了ValArray类,该类在内部维护一个动态分配的int型数组voValArray类的成员函数cycle用于对数组元素进行向左循环移动。调用一次cycle后,数组的第二个元素至最后一个元素都将向左移动一个位置,而最左端的元素将循环移动到最右端位置上。例如,若ValArray表示的数组为{1.2.3.4,5},则第一次调用cycle后,数组变为{2,3,4,5,1},第二次调用cycle后,数组变为{3,4,5,1,2},以此类推。请编写成员函数cycle。在main函数中给出了一组测试数据,此情况下程序的输出应该是:
v={1,2,3,4,5}
v={2,3,4,5,1}
v={3.4,5,1,2}
v={4.5,1,2,3}
v={5,1,2,3.4}
要求:
补充编制的内容写在//********333********与//********666********之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。
//ValArray.h
#include <iostream>
using namespace std;
class ValArray {
int* v;
int size;
public:
ValArray(const int* p, int n) : size(n)
{
v = new int[size];
for (int i = 0; i < size; i++)
v[i] = p[i];
}
~ValArray() {delete [ ] v; }
void cycle();
void print(ostream& out) const
{
out << ’{’;
for (int i = 0; i < size-1; i++)
out << v[i] << \\
for (inti=0;i< size-1; i++)
{
int temp =v[i];
v[i] = v[i+1];
v[i+1] = temp;
}
解析:程序要将数组v中的size个整数依次移动到它的前一个单元,其中第一个整数移到原来最后元素所在单元。for循环语句用于遍历整个数组,每循环一次便将当前元素与后一个元素互换,因此循环变量的取值范围是0 size-2,最后一个元素不需遍历。
本文档预览:3600字符,共2246字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载