您的当前位置:首页正文

国家二级C++机试(操作题)模拟试卷509(题后含答案及解析)

2023-03-06 来源:年旅网


国家二级C++机试(操作题)模拟试卷509 (题后含答案及解析)

全部题型 2. 基本操作题 3. 简单应用题 4. 综合应用题

基本操作题

1. 请打开考生文件夹下的解决方案文件proj1,此工程中包含程序文件main.cpp,其中有ElectricFan(“电风扇”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:品牌:清风牌,电源:关,风速:0品牌:清风牌,电源:开,风速:3品牌:清风牌,电源:关,风速:0注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>using namespace std;class ElectricFan{//“电扇”类char*brand;int intensity;//风速:0-关机,1-弱,2-中,3-强public:ElectricFan(const char*the_brand):intensity(0){brand=newchar[strlen(the_brand)+1];strcpy(brand,the_brand);}~ElectricFan( ){delete[ ]brand;}//ERROR*******found*******const char*theBrand( )const{return*brand;}//返回电扇品牌int theIntensity( )const{return intensity;}//返回风速bool isOn( )const{returnintensity>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( )?”开”:”关”)<<”,风速:”<<theIntensity( )<<endl;}};int main( ){ElectricFan fan(“清风”);fan.show( );fan.setIntensity(3);fan.show( );fan.turnOff( );fan.show( );return0;}

正确答案:(1)const char*theBrand( )const{returnbrand;}//返回电扇品牌(2)void turnOff( ){intensity=0;}//关电扇(3)if(inten>=1&&inten<=3)intensity=inten;

解析:(1)主要考查考生对指针的掌握情况,因为brand是一个动态指针,水brand表示字符串的首个字符,brand表示动态数组,这里要返回动态数组存储的品牌名称。(2)主要考查考生对成员函数的掌握情况,根据题目中类的定义中私有成员的定义:int intensity;//风速:0-关机,1-弱,2-中,3-强,可知本函数要关电扇,因此在这里intensity=0;。(3)主要考查考生对成员函数的掌握,根据题目中函数的注释:开电扇并设置风速,可知if语句里要判断的应该是形参inten而不是intensity。

简单应用题

2. 请打开考生文件夹下的解决方案文件proj2,此工程中含有一个源程序文件proj2.cpp。函数char*GetNum(char*src,char*buf)从src开始扫描下一个数字字符序列,并将其作为一个字符串取出放入字符串空间bur中。函数返回扫描

的终止位置,如果返回NULL表示没有扫描到数字字符序列。运行程序时,如果输入的一行字符序列是ABC012XYZ378MN274WS则输出为:Digit string1is012Digit string2is378Digit 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********_______;while(*src!=‘\0’&&isdigit(*src)){//********found********_______;bur++;SEC++;}*buf=‘\0’;return src;}int main( ){char str[100],digits[20];cin.getline(str,100);char*p=str;int i=1;while((p=GetNum(p,dig~ts))!=NULL){cout<<”Digi tstring”<<i<<”is”<<digits<<endl;//********found********_______;}return0;}

正确答案:(1)return NULL(2)*buf=*src(3)i++

解析:(1)主要考查考生对if语句的掌握,由判断条件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. 请打开考生文件夹下的解决方案文件proj3,其中定义了MyString类,一个用于表示字符串的类。成员函数reverse的功能是将字符串进行“反转”。例如,将字符串ABCDEF“反转”后,得到字符串FEDCBA;将字符串ABCDEFG“反转”后,得到字符串GFEDCBA。请编写成员函数reverse。在main函数中给出了一组测试数据,此时程序运行中应显示:读取输入文件...---反转前---STR1=ABCDEFSTR2=ABCDEFG---反转后

---STR1=FEDCBASTR2=GFEDCBA要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中,输出函数WriteToFile已经编译为obj文件,并且在本程序中调用。//mgsering.h#include<iostream>#include<cstring>using namespace std;class MyString{public:MyString(const char*s){str=new char[strlen(s)+1];strcpy(str,s);}~MyString( ){delete[ ]str;)void reverse( );friend ostream&operator<<(ostream&os,const MyString&mystr){os<<mystr.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 inname[128],pathname[80];strcpy(pathname,” “);sprintf(inname,”in.dat”,pathname);cout<<”读取输入文件...\n\n”;ifstream infile(inname);if(infile.fail( )){cerr<<”打开输入文件失败!”;exit(1);}char buf[4096];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=”<<str1<<endl;cout<<”STR2=“<<Str2<<endl<<endl;writeToFile(pathname,str3);returnR0;}

正确答案:int length:strlen(str);//把字符串str的长度赋值给lenthfor(int i=0,j=length-1;i<j;i++,j--)//从i=0,j=length-1,i<j为条件开始遍历,并把Str[i]和Str[j]交换{char temp=str[i];//给定义的临时变量temp赋值为str[i]str[i]=str[j];//给str[i]赋值str[j]str[j]=temp;//给str[j]赋值为temp

解析:主要考查考生对动态数组的掌握,先看题目要求:成员函数reverse的功能是将字符串进行“反转”。再由类的定义可知,字符串存放在动态数组str中,由strlen函数得出字符串的长度,最后一个字符的下标为length-1,第一个字符的下标为0,将这两个字符交换,然后j依次减1同时i依次加1,继续交换,直到i大于j时停止循环即可。

因篇幅问题不能全部显示,请点此查看更多更全内容