1、国家二级 C+机试(操作题)模拟试卷 21及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi cpp,该程序运行时有错,请改正其中错误,使得程序正常运行,并使程序输出的结果为: C Test 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 1 #include 2 void main() 3 4 *error* 5 char c=“c“; 6 cout 2 #include 3 #include 4 US ing namespace std ; 5 void WriteFile(char*S) 6 7
2、8 9 void fun(char* S) 10 11 12 13 Void ClearFile() 14 15 ofstream outl; 16 outl open(“modi2 txt“); 17 outl Close(); 18 19 int mein() 20 21 ClearFile(); 22 char s1024; 23 cout 2 #5 nc11de 3 #include 4 #define NMAX 50 5 C1ass Teacher; 6 C1ass Student 7 8 public: 9 Student(char *name=“未知 “, char *numbe
3、r=“00000“, double mark=0 0) 10 11 int len=strlen(name); 12 m name=new char1en+1; 13 strcpy(mname, name); 14 strcpy(m_number, number); 15 m mark=mark; 16 17 Student() 18 19 deletem name; 20 21 void DisplayMsg() 22 23 coutname; 63 innumber; 64 inmark ; 65 m_count+; 66 m_pstui=new Student (name, number
4、, mark); 67 cout m-markm_pstuindex-m_mark) 79 index=j ; 80 81 *2* 82 if() 83 84 Student*ps=m_pStui; 85 m_pStui=m_pstuindex; 86 m_pstuindex=ps; 87 88 89 90 void Teacher: Display() 91 92 coutDisplayMsg(); 96 97 98 int Teacher: BestScore(Student*pS) 99 100 int index=0; 101 int count=1; 102 *3* 103 104
5、for(int J=1 ; Jm_markm_pStuindex-m_mark) 107 108 count=1; 109 index=j; 110 pscount+=m_pstu index; 111 112 else if(m_pStuj卜 m_mark =m pStuindex-m mark) 113 114 index=j ; 115 pScount+=m_pstu index; 116 117 118 return count; 119 120 void main() 121 122 Teacher Teacher ; 123 Student*pStudentNMAX; 124 co
6、ut DisplayMsg(); 134 135 国家二级 C+机试(操作题)模拟试卷 21答案与解析 一、基本操作题 1 【正确答案】 (1)char c=c; (2)int b=1024; (3)b+= 1024; 【试题解析】 本题的功能是输出字符 c和字符串 Test。因为本题程序中不存在复杂的结构,解题思路,从已定源程序的 main主函数依次处理错误提示下的语句即可。 解题思路 (1)打开 modil cpp,调试程序,显示错误提示为第一标识下 “odi 1 cpp(5):error C2440: initializing: cannotconvert fromchar2t toch
7、ar”。变量 c的类型为字符型,字符型值应该是用单引号,双引号是字符串型。所以这里修改为 “char c=c; ”。 (2)根据第 3个标识下的语句知道, b的值加上 1024,然后判断 b的值是否为2048,所以这里 b的类型应该是整型,而不是字符型,所以修改为“int=1024; ”。 (3)显示第 3个标识下的语句 “b+=1024; ”的错误提示。 modil cpp(10): error C2018: unknown character0xa3,因为语句中的 “; ”为中文输入法下的输入,并不是英文下的 “: ”,所以修改为 “b+=1024; ”。 二、简单应用题 2 【正确答案】
8、 (1)void WriteFile(char*S)中的命令语句: 1 ofStream outl ; 2 outl open(“modi2 txt“, ios_base : binaryI iosbase: app);打开文件 modi2 3 outl=A&si=a&si=z) 如果是小写字符,转换为大写字符 8 9 Si=Si-a+A; Si-a+A等于字符 Si-32 10 11 12 WriteFile(S); 【试题解析】 (1)本题要求实现两 个函数的功能,其中 WriteFile(char*s)实现把字符串输入到文件中; fun(char*s)函数实现大写字母转换成小写字母,把其
9、中的小写字母转换成大写字母。其中大小写字母之间的 ASCII码差为 32。 (2)从已给部分源程序的 main主函数开始入手,首先实现 WriteFile函数,然后再实现 fun函数,并在其中调用 WriteFile函数。 解题思路 (1)在 WriteFile(char*s)函数中,利用标准流 ofstream实现字符串写入文件modi2 txt。 (2)在 fun函数中,利用 for循环逐个判断字符是大写还是小写。 (3)如果是大写,那么加上 32实现大写转换为小写。否则,就减去 32,实现小写到大写的转换。最后调用前面实现的 WriteFile函数,将字符串写入文件。 三、综合应用题 3
10、 【正确答案】 (1)添加语句: friend class rreacher; (2)将 “if()”补充完整为: if(index!=j) (3)添加语句: pS0=m pStu0; 【试题解析】 类 Student含有三个成员变量:姓名、五个英文字符的 学号和精确到小数点后一位的一科成绩,类 Teacher含有 Student对象数组的指针Student*m_pStuNMAX、 m_average和 m_count三个成员变量,类 Teacher有多个成员函数,完成学生数据输入、排序、查找最好成绩和打印等功能。 解题思路 (1)学生的信息受到严密保护和限制,任课老师可以修改学生数据,比如本
11、科升到研究需要修改学号等信息,因此老师类 (Teacher)可以访问学生类 (Student),故老师类是学生类友元类,故第 1个标识下应添加 “friend classTeacher; ”。 (2)SortScore()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置 (外层循环变量 i+l的值 )不同则两者交换,故第 2个标识下的判断条件为 “if(index!=j)”。 (3)BestScore(Student*pS)实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下 来,搜索整个数组就能找到成绩最高的学生,即第 3标识下应添加 “pS0=mpStu0; ”。