1、国家二级 C+机试(操作题)-试卷 54 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modilcpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 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=i) i=i+x; els
2、e i=i+y; cout0,此时 i 和 X 的和为 5,故屏幕输出 i 的值为 i=5;第二次调用 func()函数,传入参数为 char 型数据,此时 T 表示字符型(char),char i=0,680,故 i 为 68,屏幕输出 ASCII 码为 68的字符,即 i=D;第三次调用 func()函数,传入整型数据 10 和 1,此时 T 表示整型(int),输出为 i=1 5,显然如果 i 为一般的局部变量,输出应该是 i=10(100,i=10+0=10),这里 i 记忆了第一次调用 func0函数后的值 0=5,105,10+5=15),故 i 为静态变量,因此第 1 个标识下应
3、改为“staticT i=0:”。 (2)func0 函数两个参数类型一致,从输出结果看,第二次调用 func0 传入的参数均是 char 型的,故第 2 个标识下应改为“tfunc(char)68,(char)1);”,(char)68 和(char)1 含义是做强制类型转换,将整型转换成 char 型。 (3)第 3 个标识下传入参数 1 为整型,局部变量 i 为 float 型,由输出结果可知,第四次调用 func0 函数也改变了静态变量 i(static int i)的值,故传入的参数均为整型,因第 3 个标识下的局部变量 i(float 型)也要强制类型转换,故第 3 个标识下应改为
4、“tfunc(int)i,1);”。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。请完成函数 fun(char*s),该函数完成以下功能:(1)把 S 中的大写字母转换成小写字母,把其中的小写字母转换成大写字母。并且在函数中调用写函数WriteFile()将结果输出到 modi2txt 文件中。 例如:s=”helloTEST”,则结果为:s=”HELLOtest” (2)完成函数 WriteFile(char*s),把字符串输入文件中。 提示:打开文件使用的第二参数为ios_base:binaryliosbase:app。 注意
5、:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 #include #include #include us ing namespace std void WriteFile(char*s) void fun(char*S) void ClearFile() ofstream outl; outlopen(”modi2txt”) outlClose()j int main() ClearFile() char S1024 cout_正确答案:(正确答案:(1)void WriteFile(char*s)中的命令语句: ofStream outl ; outlopen(”mo
6、di2txt”,ios base :binary I losbase:app);打 开文件 modi2 outls ; 写入字符串 s outlClose(); (2)void fun(char*s)中的命令语句: for(int i=0 ; s1!=0;1+) 循环判断每一个字符 if(Si=A&si=Z) 2 果是大写字符,转换为小写字符 Si=si一A+a; si一A+a等于字符 si+32- Else if(si=a&si=z) 如果是小写字符,转换为大写字符 si=si一a+A; si一a+A-等于字符 si-32 writeFile(s);)解析:解析:(1)本题要求实现两个函数的
7、功能,其中 WriteFile(char*s)实现把字符串输入到文件中;fun(char*s)函数实现大写字母转换成小写字母,把其中的小写字母转换成大写字母。其中大小写字母之间的 ASCII 码差为 32。 (2)从已给部分源程序的 main 主函数开始入手,首先实现 WriteFile 函数,然后再实现 fun 函数,并在其中调用 WriteFile 函数。 解题思路 (1)在 WriteFile(char*s)函数中,利用标准流 ofstream 实现字符串写入文件 modi2txt。 (2)在 fun 函数中,利用 for 循环逐个判断字符是大写还是小写。 (3)如果是大写,那么加上 3
8、2 实现大写转换为小写。否则,就减去 32,实现小写到大写的转换。最后调用前面实现的 WriteFile 函数,将字符串写入文件。三、综合应用题(总题数:1,分数:2.00)3.用 VC6 打开考生文件夹下的源程序文件 modi3cpp。其中定义的类并不完整,按照要求完成下列操作,将类的定义补充完整。在屏幕和程序 modi3txt 文件中输出以下结果: Hello Test 出现异常情况 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整: (1)以追加的方式打开文件modi3txt,请在注释*1*后添加适当的语句。 (2)定义一个类对象 S,请在注释*2*后添加适当的语句。 注意:
9、仅在函数指定位置添加语句,请勿改动主函数 main 与其他函数中的任何内容。 #include #include using rlamespace std; void Wr:it:ePle(char*x) ofstream out:1; *1* out:1open(“modi3txt”, ); out:1 x ; out:1close(), void ClearFile() of:stream out:1; out;1open(“modi3txt”); out:1close(); class TestClass public: TestClass() tout:“Hello”“Test”出现异常情况”