1、国家二级 C+机试(操作题)模拟试卷 382及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: i=5 i=10 i=15 i=20 注意:错误的语句在 *error*的下面,修改该语句即可。 #include class CMyClass public: template void func(T x, T Y) *error* T i=0; if(x=i) i=i+x; else i=i+y; cout #define MAXLEN 1024 void Convert(char*des,
2、 char*str) void main() char sourMAXLEN; char destMAXLEN; cout #include #include #define NMAX 50 class Teacher; class Student public: student(char *name=“未知 ”, char *number=“0 0 0 0 0”, double mark=0 0) int len=strlen(name); m name=new charlen+1; strcpy(m name, name); strcpy(m number, number); m mark
3、=mark; Student() deletem name; void DisplayMsg() coutname; innumber; inmark; mcount+; m pStui=new Student (name, number, mark); coutmmark m_pStuindex-mmark) index=j; *2* if() Student*ps=m pStui; m_pStui=m_pStu index; m pStuindex=ps; void Teacher: Display() coutDisplayMsg(); int Teacher: BestScore(St
4、udent *pS) int index=0; int count=1; *3* for(int j=1; jmmark m pStuindex一 m mark) count=1; index=j; pScount+=m pStu index; else if(m_pstujmmark =m_pStuindex一 m_mark) index=j; pScount+=m pStu index; return count; void main() Teacher Teacher; Student*pStudentNMAX; cout 9isplayMsg(); 国家二级 C+机试(操作题)模拟试卷
5、 382答案与解析 一、基本操作题 1 【正确答案】 (1)static T i=0; (2)t func(char)6 8, (char)1); (3)t func(int)i, 1); 【试题解析】 程序当中定义了类 CMyClass,含有一个成员函数模板 func(T x,T y),在函数内定义一个变量 i,如果参数 x大于 i,则 i和 X的和赋值给 i,否则 i和 y的和赋值给 i。 二、简单应用题 2 【正确答案】 int i, j; bool ToAdd; des0=0; for(i=0; stri!=NULL; i+) ToAdd=true; for(j=0; desj!=NU
6、LL; j+) if(stri=desj) ToAdd=false; des数纽中已存在该元素,将标志位设置为假,说明不用再添加 brea k; des数组中已存在该元素,跳出循环 if(ToAdd) des数组中不存在,添加进来 deSj=Stri; desj+1=0; 【试题解析】 convert(char*des, char*str)函数的功能是去掉字符串 str中相同的字母,并将处理后的结果存到 des所指的字符串中。原来的字符串存放在 str指向的数组中,新字符串存放在 des指向的数组中,因此可逐个读取 str指向的数组里面的字符,把不同的字符放入 des指向的数组中,即每次读 s
7、tr指向的数组一个字符,就在 des指向的数组里面查找是不是已经有该字符了,如果已经有了则不添加进来,反之则把该字符加入到 des指向的数组中。 (1)由审题分析可知,需要两重循环,外层循环不断读取 str中的元素,内循环在des数组中查找读到的 str中的字符,如果找到了 des数组中已存在该元素不需要添加,如果没找到则添加到 des数组中。 (2)在外循环体内,先设置 bool型的标志变量 ToAdd为真,假设 stri不存在在des数组中,然后再内循环中,用 stri和 desj比较,如果相同说明已经存在了,将 ToAdd设置为假 desj后面的元素不需要再比较了,跳出内循环。 (3)通
8、过判断 ToAdd可知, stri是否存在 des数组中,如果 ToAdd为真,则说明des数组中不存在 stri,将 stri添加到 des数组中。 三、综合应用题 3 【正确答案】 (1)添加语句: friend ClasS Teacher; (2)将 “if()”补充完整为: if(i ndex!: j) (3)添加语句: pS0=m pStu0; 【试题解析】 类 Student含有三个成员变量:姓名、五个英文字符的学号和精确到小数点后一位的一科成绩,类 Teacher含有 Student对象数组的指针Student*m_pStuNMAX、 m_average和 m count三个成员变量,类 Teacher有多个成员函数,完成学生数据输入、排序、查找最好成绩和打印等功能。