1、二级 C+机试-129 及答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1,其中有枚举 DOGCOLOR、狗类Dog 和主函数 main 的定义。程序中位于每个/ERROR*found*下的语句行有错误,请加以改正。改正后程序的输出应该是:There is a white dog named Hoho.There is a black dog named Haha.There is a motley dog named Hihi.注意:只能修改每个/ERRO
2、R*found*下的那一行,不要改动程序中的其他内容。/源程序#include iostreamusing namespace std;/狗的颜色:黑、白、黄、褐、花、其他enum DOGCOLOR BLACK,WHITE,YELLOW,BROWN,PIEBALD,OTHER;class Dog/狗类DOCCOLOR color;char name20;static int count;public:Dog(char name,DOGCOLOR color)strcpy(this-name,name);/ERROR*found*strcpy(this-color,color);DOGCOLOR
3、 getColor() const return color;/ERROR*found*const char*getName() const return*name;const char*getColorString() constswitch(color)case BLACK: return“black“;case WHITE: return“white“;case YELLOW: return“yellow“;case BROWN: return“brown“;case PIEBAIJD: return“piebald“;return“motley“;void show() const c
4、out“There is a“getColorString()“dog named“name.endl;;int main()/ERROR*found*Dog dog1(“Hoho“,WHITE),dog2(“Haha“,BLACK); dog3(“Hihi“,OTHER);dog1show();dog2.show();dog3.show();return 0:(分数:30.00)_二、2简单应用题(总题数:1,分数:40.00)2.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2,函数 void Insert(node*q)使程序能够完成如下功能:从键盘输入
5、一行字符,调用该函数建立反序的无头结点的单链表,然后输出整个链表。注意:请勿修改主函数 main 和其他函数中的任何内容,只需在画线处编写适当代码,也不能删除或移动/*found*。/源程序 proj2.cpp#includeiostreamusing namespace std;struct nodechar data;node*link:*head; /链表首指针void Insert(node*q) /将节点插入链表首部/*found*_;head=q;int main()char ch;node *p;head=NULL:cout“Please input the string“end
6、l;while(ch=cin.get()!=/n)/*found*_;/用 new 为节点 p 动态分配存储空间p-data=ch;/*found*_; /在链表首部插入该节点p=head;while(p!=NULL)coutp-data;p=p-link;coutendl;return 0:(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj3 下的工程 proj3,其中声明了 DataList 类,这是一个用于表示数据表的类。sort 成员函数的功能是将当前数据表排序,使得表中的元素呈升序排列。请编写这个 so
7、rt 函数。程序的正确输出应该是:排序前:7,1,3,11,6,9,12,10,8,4,5,2排序后:1,2,3,4,5,6,7,8,9,10,11,12要求:补充编制的内容写在/*333*与*666*两行之间,不得修改程序的其他部分。注意:程序最后已经将结果输出到文件 out.dat 中。输出函数 writeToFile 已经编译为 obj 文件,并且在本程序中调用。/源程序#include“DataList.h“DataList: DataList(int len, double data):len(len)d=new doublelen;for(int i=0; ilen; i+) di
8、=(data=NULL?0.0:datai);void DataList:sort()/数据表排序/*333*/*666*void DataList:show() const/显示数据表for(int i=0; ilen-1,i+) coutdi“,“;coutdlen-1endl;int main()double s=7,1,3,11,6,9,12,10,8,4,5,2;DataList list(12,s);cout“排序前:“;list.show();list.sort();coutendl“排序后:“;list.show();/writeToFile(“K:/b10/61000102/
9、“,list);return 0:(分数:30.00)_二级 C+机试-129 答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1,其中有枚举 DOGCOLOR、狗类Dog 和主函数 main 的定义。程序中位于每个/ERROR*found*下的语句行有错误,请加以改正。改正后程序的输出应该是:There is a white dog named Hoho.There is a black dog named Haha.There is a motley do
10、g named Hihi.注意:只能修改每个/ERROR*found*下的那一行,不要改动程序中的其他内容。/源程序#include iostreamusing namespace std;/狗的颜色:黑、白、黄、褐、花、其他enum DOGCOLOR BLACK,WHITE,YELLOW,BROWN,PIEBALD,OTHER;class Dog/狗类DOCCOLOR color;char name20;static int count;public:Dog(char name,DOGCOLOR color)strcpy(this-name,name);/ERROR*found*strcpy
11、(this-color,color);DOGCOLOR getColor() const return color;/ERROR*found*const char*getName() const return*name;const char*getColorString() constswitch(color)case BLACK: return“black“;case WHITE: return“white“;case YELLOW: return“yellow“;case BROWN: return“brown“;case PIEBAIJD: return“piebald“;return“
12、motley“;void show() const cout“There is a“getColorString()“dog named“name.endl;;int main()/ERROR*found*Dog dog1(“Hoho“,WHITE),dog2(“Haha“,BLACK); dog3(“Hihi“,OTHER);dog1show();dog2.show();dog3.show();return 0:(分数:30.00)_正确答案:(this-color=color;2)const char* getName()const return name;3)Dog dog1(“Hoho
13、“,WHITE), dog2(“Haha“,BLACK),dog3(“Hihi“,OTHER);)解析:枚举变量的赋值,不能用 strcpy。strcpy 主要用于字符数组赋值,不能用于枚举赋值。2)getName 的函数返回类型是数组,应与 return 返回类型一致。name 本来就是一个字符数组,所以不需要再加“*“。3)定义同一类型的多个变量,变量之间用“,“隔开,最后一个变量后面跟“;“。二、2简单应用题(总题数:1,分数:40.00)2.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2,函数 void Insert(node*q)使程序能够完成如下
14、功能:从键盘输入一行字符,调用该函数建立反序的无头结点的单链表,然后输出整个链表。注意:请勿修改主函数 main 和其他函数中的任何内容,只需在画线处编写适当代码,也不能删除或移动/*found*。/源程序 proj2.cpp#includeiostreamusing namespace std;struct nodechar data;node*link:*head; /链表首指针void Insert(node*q) /将节点插入链表首部/*found*_;head=q;int main()char ch;node *p;head=NULL:cout“Please input the st
15、ring“endl;while(ch=cin.get()!=/n)/*found*_;/用 new 为节点 p 动态分配存储空间p-data=ch;/*found*_; /在链表首部插入该节点p=head;while(p!=NULL)coutp-data;p=p-link;coutendl;return 0:(分数:40.00)_正确答案:(1)node*head;2)p=new node();3)p-link=head; head=p;)解析:1)后面有 head=q;,显然有个变量头指针没定义,所以在该行应该定义一个头指针 head。2)为指针 p 分配内存空间。3)将新结点插入到链表中,
16、链表的指针顺序不能搞错,应该是先将 p-link 指向 head 指向的地址,然后将 head 指针指向 p。三、3综合应用题(总题数:1,分数:30.00)3.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj3 下的工程 proj3,其中声明了 DataList 类,这是一个用于表示数据表的类。sort 成员函数的功能是将当前数据表排序,使得表中的元素呈升序排列。请编写这个 sort 函数。程序的正确输出应该是:排序前:7,1,3,11,6,9,12,10,8,4,5,2排序后:1,2,3,4,5,6,7,8,9,10,11,12要求:补充编制的内容写在/*333*与*666*两行
17、之间,不得修改程序的其他部分。注意:程序最后已经将结果输出到文件 out.dat 中。输出函数 writeToFile 已经编译为 obj 文件,并且在本程序中调用。/源程序#include“DataList.h“DataList: DataList(int len, double data):len(len)d=new doublelen;for(int i=0; ilen; i+) di=(data=NULL?0.0:datai);void DataList:sort()/数据表排序/*333*/*666*void DataList:show() const/显示数据表for(int i=
18、0; ilen-1,i+) coutdi“,“;coutdlen-1endl;int main()double s=7,1,3,11,6,9,12,10,8,4,5,2;DataList list(12,s);cout“排序前:“;list.show();list.sort();coutendl“排序后:“;list.show();/writeToFile(“K:/b10/61000102/“,list);return 0:(分数:30.00)_正确答案:(/*333*int n=len:int tmp;for(int i=0;in;i+)for (int j=0;ji;j+)if(didj)tmp=di;di=dj;dj=tmp;/*666*)解析:解析 首先取得数组的长度 len。然后利用插入法进行排序,逐次比较已经有序的数组序列,待排的 di和前面 i-1 个已经有序的数组序列比较,如果 didj,则交换位置。