1、国家二级 C+机试(操作题)模拟试卷 481及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,此工程中包含程序文件main cpp,其中有 ElectricFan(“电风扇 ”)类和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 品牌:清风牌,电源:关,风速: 0 品牌:清风牌,电源:开,风速: 3 品牌:清风牌,电源:关,风速: 0 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include iostream using namesp
2、ace std; class ElectricFan “电扇 ”类 char*brand; int intensity;风速: 0-关机, 1-弱, 2-中, 3-强 public: ElectricFan(const char*the_brand): intensity(0) brand=newcharstrlen(the_brand)+1; strcpy(brand, the_brand); ElectricFan( )delete brand; ERROR*found* const char*theBrand( )constreturn*brand; 返回电扇品牌 int theInte
3、nsity( )constreturn intensity; 返回风速 bool isOn( )constreturnintensity 0; 返回电源开关状态 ERROR*found* void turnOff( )intensity=1; 关电扇 void setIntensity(int inten) 开电扇并设置风速 ERROR*found* if(intensity =1&intensity =3) intensity=inten; VOid Show( ) cout “品牌: “ theBrand( ) “牌 “ ”,电源: “ (isOn( )?“开 “: “关 “) “,风速:
4、 “ theIntensity( ) endl; ; int main( ) ElectricFan fan(“清风 “); fan show( ); fan setIntensity(3); fan show( ); fan turnOff( ); fan show( ); return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 proj2,此工程中含有一个源程序文件proj2 cpp。函数 char*GetNum(char*src, char*buf)从 src开始扫描下一个数字字符序列,并将其作为一个字符串取出放入字符串空间 bur中。函数返回扫描的终止位置,如果 返回
5、NULL表示没有扫描到数字字符序列。 运行程序时,如果输入的一行字符序列是 ABC012XYZ378MN274WS 则输出为: Digit string1is012 Digit string2is378 Digit string3is274 注意:只在横线处编写适当代码,不要删除或移动 “ *found*”。 proj2 cpp #include iostream using namespace std; char*GetNum(char*src, char*bur) whle(*src!= 0) if(isdigit(*src)break; src+; if(*src= 0) *found*
6、 _; while(*src!= 0&isdigit (*src) *found* _; bur+; SEC+; *buf= 0; return src; int main( ) char str100, digits20; cin getline(str, 100); char*p=str; int i=1; while(p=GetNum(p, digts)!=NULL) cout “Digi tstring“ i “is“ digits endl; *found* _; return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中定义了 MyString类,一个
7、用于表示字符串的类。成员函数 reverse的功能是将字符串进行 “反转 ”。例如,将字符串 ABCDEF“反转 ”后,得到字符串 FEDCBA;将字符串 ABCDEFG“反转 ”后,得到字符串 GFEDCBA。请编写成员函数 reverse。在 main函数中给出了一组测试数据,此时程序运行中应显示: 读取输入文件 -反转前 - STR1=ABCDEF STR2=ABCDEFG -反转后 - STR1=FEDCBA STR2=GFEDCBA 要求: 补充编制的内容写在 “ *333*”与 “ *666*”之间,不得修改程序的其他部分。 注意:程序 最后将结果输出到文件 out dat中,输出
8、函数 WriteToFile已经编译为obj文件,并且在本程序中调用。 mgsering h #include iostream #include cstring using namespace std; class MyString public: MyString(const char*s) str=new charstrlen(s)+1; strcpy(str, s); MyString( )delete str; ) void reverse( ); friend ostream&operator (ostream&os, const MyString&mystr) os mystr
9、str; return os; private: char*str; ; void writeToFile(char*, constMyString&); main cpp #include“mystring h“ #include fstream void MyString: reverse( ) *333* *666* int main( ) char inname128, pathname80; strcpy(pathname, “ “); sprintf(inname, “in dat“, pathname); cout “读取输入文件 n n“; ifstream infile(in
10、name); if(infile fail( ) cerr “打开输入文件失败 !“; exit(1); char buf4096; infile getline(buf, 4096); MyStringstrl(”ABCDEF”), Str2(“ABCDEFG“), Sstr3(buf); cout “-反转前 - n“; cout “STR1=“ str1 endl; cout “STR2=“ str2 endl endl; Strl reverse( ); Str2 reverse( ); Str3 reverse( ); cout “-反转后 - n“; cout “STR1=” st
11、r1 endl; cout “STR2=“ Str2 endl endl; writeToFile(pathname, str3); returnR0; 国家二级 C+机试(操作题)模拟试卷 481答案与解析 一、基本操作题 1 【正确答案】 (1)const char*theBrand( )constreturnbrand; 返回电扇品牌 (2)void turnOff( )intensity=0; 关电扇 (3)if(inten =1&inten =3)intensity=inten; 【试题解析】 (1)主要考查考生对指针的掌握情况,因为 brand是一个动态指针,水 brand表示字符
12、串的首个字符, brand表示动态数组,这里要返回动态数组存储的品牌名称。 (2)主要考查考生对成员函数的掌握情况,根据题目中类的定义中私有成员的定义: int intensity;风速: 0-关机, 1-弱, 2-中, 3-强,可知本函数要关电扇,因此在这里 intensity=0;。 (3)主要考查考生对成员函数的掌握,根据题目中函数的注释:开电扇并设置风速,可知 if语句里要判断的应该是形参 inten而不是 intensity。 二、简单应用题 2 【正确答案】 (1)return NULL (2)*buf=*src (3)i+ 【试题解析】 (1)主要考查考生对 if语句的掌握,由判
13、断条件 if(*src= 0),说明字符串 SYC为空,则返回 NULL即可。 (2)主要考查考生对 while循环语句的掌握, while语句的循环条件为 *src!=0&isdigit(*src),该条件是指,若字符串 src不为空并且 *src指向的字符为数字字符,则进行循环。题目要求把数字字符放入字符串 buf中,因此 为 *buf=*src。 (3)主要考查考生对 while循环语句的掌握,从上一行语句 cout “Digit string“ i “is“ digits endl;中可以得出,题目要求输出的 i是递增的,因此这里需添加语句 i+。 三、综合应用题 3 【正确答案】 i
14、nt length: strlen(str);把字符串 str的长度赋值给 lenth for(int i=0, j=length-1; i j; i+, j-) 从 i=0, j=length-1, i j为条件开始遍历,并把 Stri和 Strj交换 char temp=stri;给定义的临时变量 temp赋值为 stri stri=strj;给 stri赋值 strj strj=temp;给 strj赋值为 temp 【试题解析】 主要考查考生对动态数组的掌握,先看题目要求:成员函数reverse的功能是将字符串进行 “反转 ”。再由类的定义可知,字符串存放在动态数组 str中,由 strlen函数得出字符串的长度,最后一个字符的下标为 length-1,第一个字符的下标为 0,将这两个字符交换,然后 j依 次减 1同时 i依次加 1,继续交换,直到 i大于 j时停止循环即可。