1、国家二级 C+机试(操作题)模拟试卷 348及答案解析(总分:8.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 prog1下的工程 prog1。此工程中包含程序文件maincpp,其中有类 Score(“成绩”)和主函数 main的定义。程序中位于每个“ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 学号:12345678 课程:英语 总评成绩:85 注意:只修改每个“ERROR*found*”下的一行,不要改动程序中的其他内容。#includeiostreamusing na
2、mespace std;class Scorepublic: Score(const char*the course,const char*the id,int the normal,int the midterm,int the end of term) :course(the course),normal(the normal),midterm(the midterm),end of term(the end of term) ERROR*found* strcpy(the id,student_id); const char*getCourse()constreturn course;)
3、返回课程名称ERROR*found* const char*getID()constreturn 总评成绩中平时成绩占 20,期中考试占 30,期末考试占 50,最后结果四舍五入为 一个整数 ERROR*found* int getFinal()const return normal*02+midterm*03+end_of_term*05+05;int main() char English=”英语”; Score score(English,”12345678”,68,83,92);cout”学号:”scoregetID()“;cout”课程:”scoregetCourse()”; cou
4、t”总评成绩:”scoregetFinal()endl; return 0;(分数:2.00)_二、简单应用题(总题数:2,分数:4.00)2.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2,此工程中含有一个源程序文件proj2epp。函数 char*GetNum(char*src,char*buf)从 src开始扫描下一个数字字符序列,并将其作为一个字符串取出放人字符串空间 buf中。函数返回扫描的终止位置,如果返回 NULL表示没有扫描到数字字符序列。 运行程序时,如果输入的一行字符序列是 ABC012XYZ378MN274WS 则输出为: Digit st
5、ring 1 is 012 Digit string 2 is 378 Digit string 3 is 274 注意:只在横线处编写适当代码,不要删除或移动“*found*”.proj2cpp#includeiostreamusing namespace std;char*GetNum(char*see,char*bur) while(*src!=0) if(isdigit(*src)break; SrC+; if(*src=0)/*found*_;while(*src!=0 protected: int*a; unsigned int size,num;;class SortedArra
6、y:public Arraypublic:/*found* SortedArray(unsigned int S) :_ virtual void add(int e) if(num=Size) return; int i=0,j; while(inum) if(eai) for(j=num;ji;j一)*found* _; *found* _; break; i+; if(i=num) ai=e; num+; ;void fun(Array for(i=0;i10;i+) coutaget(i)”,”; coutendl;int main() Array a(10); fun(a); Sor
7、tedArray sa(10); fun(sa); return 0;(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)4.请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 pmj3,其中声明了一个单向链表类sList。sLst 的成员函数 Prepend的功能是在链表头部加入一个新的元素。请编写成员函数 Prepend。在main函数中给出了一组测试数据,此时程序的输出应为: B 一A 一 # A 一 # A 一 # exiting inner block exiting outer block 注意:只在函数 Prepend的“*333*”和“*666*”之
8、间填入若干语句,不要改动程序中的其他内容。/SListhstruct sListItem char data; sListItem*next;class sListpublic: sList():h(0)0 表示空链表 sList(); void Prepend(char c);在链表前端加入元素 void Del();删除链表首元素 sListItem*First()constreturnh;返回链表首元素 void Print()const;打印链表内容 void Release();销毁链表 private: sListItem* h;/链表头;void writeToFile(cons
9、t char* );maincpp#includeiostream#include”sListh”us ing namespace std;sList:一 sList() Release(); void sList:Prepend(char C) *333* /*666* void sList:Del() sListItem*temp=h; h=h 一next; delete temp; void sList:Print()const sListItem*temp=h; while(temp!=0) 判断是否到达链表尾部 couttemp 一data”一”; temp=temp 一next;
10、cout”n#”endl;void sList:Release() while(h!=0) Del();int main() sLisL*ptr; sList obj; objPrepend(A); objPrepend(B); objPrint(); objDel(); objPrint(); pfir=obj; pLr 一Print();tout”exiting inner block”end1; couL”exiting outer block”endl; writeToFile(”); return 0;(分数:2.00)_国家二级 C+机试(操作题)模拟试卷 348答案解析(总分:8
11、.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 prog1下的工程 prog1。此工程中包含程序文件maincpp,其中有类 Score(“成绩”)和主函数 main的定义。程序中位于每个“ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 学号:12345678 课程:英语 总评成绩:85 注意:只修改每个“ERROR*found*”下的一行,不要改动程序中的其他内容。#includeiostreamusing namespace std;class Scorepublic: S
12、core(const char*the course,const char*the id,int the normal,int the midterm,int the end of term) :course(the course),normal(the normal),midterm(the midterm),end of term(the end of term) ERROR*found* strcpy(the id,student_id); const char*getCourse()constreturn course;)返回课程名称ERROR*found* const char*ge
13、tID()constreturn 总评成绩中平时成绩占 20,期中考试占 30,期末考试占 50,最后结果四舍五入为 一个整数 ERROR*found* int getFinal()const return normal*02+midterm*03+end_of_term*05+05;int main() char English=”英语”; Score score(English,”12345678”,68,83,92);cout”学号:”scoregetID()“;cout”课程:”scoregetCourse()”; cout”总评成绩:”scoregetFinal()endl; ret
14、urn 0;(分数:2.00)_正确答案:(正确答案:(1)strcpy(student_id,the_id); (2)const char*getID()constretum student_id; (3)int Score:getFinal()const)解析:解析:(1)主要考查考生对 strcpy()函数的掌握情况,strcpy(参数一,参数二)函数的功能是将参数二的字符串复制给参数一,因此在这里 student_id应该位于参数一的位置,即strcpy(student_id,the_id);。 (2)主要考查考生对函数返回值的掌握情况,根据注释:返回学号可知学号应该由一个字符串组成。
15、再看函数要返回的类型:const char*,可知要返回一个 char型指针,也就是一个 char型数组,而 protected: int*a; unsigned int size,num;;class SortedArray:public Arraypublic:/*found* SortedArray(unsigned int S) :_ virtual void add(int e) if(num=Size) return; int i=0,j; while(inum) if(eai) for(j=num;ji;j一)*found* _; *found* _; break; i+; if
16、(i=num) ai=e; num+; ;void fun(Array for(i=0;i10;i+) coutaget(i)”,”; coutendl;int main() Array a(10); fun(a); SortedArray sa(10); fun(sa); return 0;(分数:2.00)_正确答案:(正确答案:(1)anum=e; (2)Array(s) (3)aj=aj1 (4)ai=e)解析:解析:(1)考查的是虚函数 virtual void add(int e)的定义,即添加一个整型数 e到 anum中。 (2)主要考查的是 Array类的派生类 SortedA
17、rray类的构造函数的定义,定义之前要对基础类初始化。 (3)因为 Sorted_Array类是排序类,所以数组 a中的元素要从小到大排序。在 if(e三、综合应用题(总题数:1,分数:2.00)4.请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 pmj3,其中声明了一个单向链表类sList。sLst 的成员函数 Prepend的功能是在链表头部加入一个新的元素。请编写成员函数 Prepend。在main函数中给出了一组测试数据,此时程序的输出应为: B 一A 一 # A 一 # A 一 # exiting inner block exiting outer block 注
18、意:只在函数 Prepend的“*333*”和“*666*”之间填入若干语句,不要改动程序中的其他内容。/SListhstruct sListItem char data; sListItem*next;class sListpublic: sList():h(0)0 表示空链表 sList(); void Prepend(char c);在链表前端加入元素 void Del();删除链表首元素 sListItem*First()constreturnh;返回链表首元素 void Print()const;打印链表内容 void Release();销毁链表 private: sListIte
19、m* h;/链表头;void writeToFile(const char* );maincpp#includeiostream#include”sListh”us ing namespace std;sList:一 sList() Release(); void sList:Prepend(char C) *333* /*666* void sList:Del() sListItem*temp=h; h=h 一next; delete temp; void sList:Print()const sListItem*temp=h; while(temp!=0) 判断是否到达链表尾部 coutt
20、emp 一data”一”; temp=temp 一next; cout”n#”endl;void sList:Release() while(h!=0) Del();int main() sLisL*ptr; sList obj; objPrepend(A); objPrepend(B); objPrint(); objDel(); objPrint(); pfir=obj; pLr 一Print();tout”exiting inner block”end1; couL”exiting outer block”endl; writeToFile(”); return 0;(分数:2.00)_
21、正确答案:(正确答案:sLiStItem*temp=new sLiStItern; 动态分配空间给结构体 ternp的指针 terap一data=c; 把 c赋值于结构体 temp成员 data ternp一next=h; 把 h赋值于结构ternp体成员 next h=temp; 把 temp赋值给 h,即 h指向 temp指向的空间)解析:解析:主要考查考生对链表的掌握,成员函数 Prepend的功能是在链表头部加入一个新元素。形参c是一个 char型变量,因此要定义一个新的结构体指针 temp,并给它分配 sListItem类型空间,把形参c中的值赋给 temp的数据域,并使 temp通过指针链接到链表上。