1、国家二级 C+机试(操作题)模拟试卷 117及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp该程序运行时有错误,请改正程序中的错误。 本题的功能是:从键盘输入字符串 S,然后输出字符串 s中的字符个数。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面 1 #include 2 int main() 3 4 *error* 5 coutch,则新的查找区间的下界不变,上界改为 k-1;否则新的查 找区间的下界改为 k+1,上界不变。在新区间内继续用二分法查找。 注意:请勿改动主函数 main与其
2、他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 #include int fun(char*str, char ch) void main() char str=a, b, c, d, e, f, g, h, i, j,k, 0; char ch; coutch, cout #include #include #define NMAX 50 class Teacher ; C1ass Student public: Student(char*name=II未知 “, char *number=”00000”, double mark=0 0) int len=strlen
3、(name); mname=new char1en+1; strcpy(m_name, name); strcpy(m_number, number); m_mark=mark ; 一 Student() deletemname ; ) void DisplayMsg() cout name; innumber; inmark; m count+; m pStui=new Student (name, number, mark); coutmmark m_pStuindex一 m_mark) index=j; *2* if() Student*ps=m_pStui; m_pStui=m_pSt
4、u index; m_pStuindex=ps? void Teacher: Display() coutDisplayMsg(); int Teacher: BestScore(Student *pS) int index=0: int count=1; *3* for(int j=1 ; jmmark m_pStuindex一 mmark) count=1; index=j; pScount+=m_pStu index; else if(m_pStuj_mmark =m_pStuindex一 mmark) index=j; pScount+=m_pStu index; return cou
5、nt; void main() Teacher Teacher ; Student*pStudentNMAX; cout DisplayMsg(); 国家二级 C+机试(操作题)模拟试卷 117答案与解析 一、基本操作题 1 【正确答案】 (1)std: coutch) high=k一 1 ; else low=k+1 ; if(strlow=ch) return low; return一 1 ; 【试题解析】 根据题干中给出的二分法查找思想,从已给部分源程序的 main主函数开始入手,核心函数 int fun(char*str,char ch)中的 ch参数为输入的字符,其中返回值为 ch所
6、在的位置。 解题思路 (1)首先,初始查 找区间的下界为 0。 (2)然后,求得字符串长度 len,上界为 len 1,查找区问的中后, k=(下界 +上界 ) 2;若 listk等于 ch,查找成功。 (3)若 listkch,则新的查找区间的下界不变,上界改为 k-1;否则新的查找区间的下界改为 k+1,上界不变。 三、综合应用题 3 【正确答案】 (1)添加语句: friend class Teacher; (2)将 “if()”补充完整为: if(index!=j) (3)添加语句: pS0=m -pstu0; 【试题解析】 (1)学生 的信息受到严密保护和限制,任课老师可以修改学生数
7、据,比如本科升到研究需要修改学号等信息,因此老师类 (1eacher“)可以访问学生类 (Student),故老师类是学生类友元类,故第 1个标识下应添加 “friend classTeacher; “。 (2)SortScore()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置 (外层循环变量 i+l的值 )不同则两者交换,故第 2个标识下的判断条件为 “if(index!=x)”。 (3)BestScore(Student*pS)实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下来,搜索整个数组就能找到成绩最高的学生,即第 3标识下应添加 “pS0=mpStu0; ”。