1、二级 C+分类模拟 158 及答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: This is a greart! Hello Hello 注意:错误的语句在/*error*的下面,修改 #includeiostream.h class CMyClass public: void displayl() cout name; in number; in mark; m_count+; m_pStu i=new Student (
2、name, number,mark); cout name; in number; in mark; m_count+; m_pStu i=new Student (name, number,mark); cout name “ / t“ number “ / t“ mark endl; void Teacher:SortScore() double sum=0; for (int i=0; im_count; i+) int index=i; for (int j=i+1; jm_count; j+) if (m_pStu j-m_mark m_pStuindex -m_mark) inde
3、x=j; /*2* if() Student *ps=m_pStui; m_pStui=m_pStuindex; m_pStuindex=ps; void Teacher:Display() cout “姓名/t“ “学号/t“ “成绩 /t“ endl; for(int j=0; jm_count; j+) m_pStu j-DisplayMsg (); int Teacher:BestScore (Student *pS ) int index=0; int count=1; /*3* for(int j=1; jm_count; j+) if(m_pStuj-m_mark m_pStui
4、ndex-m_mark) count=1; index=j; pScount+=m_pStu index; else if(m_pStuj-m_mark =m_pStuindex-m_mark) index=j; pScount+=m_pStuindex; return count; void main () Teacher Teacher; Student *pStudentNMAX; cout “输入的学生信息: “ endl; Teacher.InputScore(); Teacher.SortScore(); cout endl “排序后的学生信息: “ endl; Teacher.D
5、isplay(); cout endl “查询成绩最高的学生信息: “ endl; int n=Teacher.BestScore (pStudent); while(n-) pStudentn- DisplayMsg(); (分数:30.00)_正确答案:()解析:(1)添加语句:friend class Teacher; (2)将“if()”补充完整为:if(index!=j) (3)添加语句:pS0=m_pStu0; 答案考生文件夹 解析 类 Student 含有三个成员变量:姓名、五个英文字符的学号和精确到小数点后一位的一科成绩,类 Teacher 含有 Student 对象数组的指针
6、 Student *m_pStuNMAC、m_average 和m_count 三个成员变量,类 Teacher 有多个成员函数,完成学生数据输入、排序、查找最好成绩和打印等功能。 (1)学生的信息受到严密保护和限制,任课老师可以修改学生数据,比如本科升到研究需要修改学号等信息,因此老师类(Teacher)可以访问学生类(Student),故老师类是学生类友元类,故第 1 个标识下应添加“friend class Teacher;”。 (2)SortScore()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置(外层循环变量i+1 的值)不同则两者交换,故第 2 个标识下的判断条件为“if(index!=j)”。 (3)BestScore(Student *pS)实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下来,搜索整个数组就能找到成绩最高的学生,即第 3 标识下应添加“pS0=m_pStu0;”。