




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(运算符重载、模板和C++流)模拟试卷1(共8套)(共206题)国家二级C++机试(运算符重载、模板和C++流)模拟试卷第1套一、选择题(本题共26题,每题1.0分,共26分。)1、下列关于函数模板的描述中,正确的是()。A、函数模板是一个实例函数B、使用函数模板定义的函数没有返回类型C、函数模板的类型参数与函数的参数相同D、通过使用不同的类型参数,可以从函数模板得到不同的实例函数标准答案:D知识点解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。2、有如下函数模板定义:template<typenameT1,TypenameT2>T1Fun(T2n){returnn*5.0;}若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为()。A、FUN(9)B、FUN<9>C、FUN<double>[9]D、FUN<9>(double)标准答案:C知识点解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。3、已知主函数中通过如下语句序列实现对函数模板swap的调用:inta[10],b[10];swap(a,b,10);下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是()。A、template<typenameT>voidswap(Ta[],Tb[],intsize);B、template<typenameT>voidswap(intsize,Ta[],Tb[]);C、template<typenameT1,typenameT2>voidswap(T1a[],T2b[],intsize};D、template<classT1,classT2>voidswap(T1a[],T2b[],intsize);标准答案:B知识点解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。4、在定义函数模板或类模板时,开头的保留字是()。A、typenameB、templateC、classD、typedef标准答案:B知识点解析:定义函数模板或类模板时,开头的保留字是template。5、若有函数模板mySwap和一些变量定义如下:()。template<classT>voidmySwap(Tx,Ty);doubled1,d2;inti1,i2;下列对mySwap的调用中,错误的是A、mySwap(i1,i2)B、mySwap(d1,d2)C、mySwap(i1,d1)D、mySwap<int>(i2,d2)标准答案:C知识点解析:按照函数模板mySwap的定义,变量x和y应该是同一类型,而在选项C的定义中变量i1和d1属于不同的数据类型。6、模板对类型的参数化提供了很好的支持,因此()。A、类模板的主要作用是生成抽象类B、类模板实例化时,编译器将根据给出的模板实参生成一个类C、在类模板中的数据成员都具有同样类型D、类模板中的成员函数都没有返回值标准答案:B知识点解析:此题考查了类模板的概念。在定义对象的过程中,系统会自动地根据需要生成相应的类定义,这种依据类模板生成具体类的过程称为类模板的实例化。7、关于关键字class和typename,下列表述中正确的是()。A、程序中的typename都可以替换为classB、程序中的class都可以替换为typenameC、在模板形参表中只能用typename来声明参数的类型D、在模板形参表中只能用class或typename来声明参数的类型标准答案:A知识点解析:此题考查的是class和typename两个关键字。关键字class除了能用来定义类以外还能用来声明模板的虚拟类型参数。在用作声明虚拟类型参数时typename与class可以互换,但不能使用typename来定义类;在模板形参表中除了可以用typename和Class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项C错误。8、下列模板声明中,有语法错误的是()。A、template<typenameT>Tfun(Tx){returnx;}B、template<typenameT>Tfun(Tx,intn){returnx*n;}C、template<classT>Tfun(T*p){return*p;}D、template<classT>TclassA{Tn;};标准答案:D知识点解析:第四个选项是定义类模板的,但是class前面的T是多余的。对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。9、在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是()。A、()B、[]C、<>D、{)标准答案:C知识点解析:声明一个类模板的格式是:template<<模板形参声明>><类声明>。10、有如下模板声明:template<typenameT1,typenameT2>ClaSSA;下列声明中,与上述声明不等价的是()。A、template<classT1,classT2>classA;B、template<classT1,typenameT2>classA;C、template<typenameT1,classT2>classA;D、template<typenameT1,T2>classA;标准答案:D知识点解析:在类模板中,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。声明一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。对于本题来说,模板形参表中包括类型T1和T2两个类型参数,而在选项D)中T1说明其类型,而T2没有说明其类型,与题干中的模板说明不一致。11、若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列MyTemp<double>p2;MyTemp<long>p3[2];编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是()。A、1B、2C、3D、0标准答案:C知识点解析:p2是一个double型的MyTemp,p3[2]是一个long.型MyTemp数组,其中包括两个元素。所以共有3个MyTemp的实例。12、下列关于模板的叙述中,错误的是()。A、调用模板函数时,有时可以省略模板实参B、函数模板的每个实例就是一个函数定义C、类模板的每个实例就是一个类定义D、类模板的实例是一个类对象标准答案:D知识点解析:在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。13、下列类模板的定义中语法格式错误的是()。A、template<classT>classBuffer{/*…*/};B、template<typenameT>classBuffer{/*…*/};C、template<classT1,classT2>classBuffer{/*…*/};D、template<T>classBuffer{/*…*/};标准答案:D知识点解析:定义类模板的一般形式是:template<类型名参数名1,类型名参数名2,…>class类名{类声明体};模板的类型参数由关键字class或关键字typename及其后的标识符构成。在模板参数表中关键字class和typename的意义相同。14、在语句cin>>data;中,cin是()。A、C++的关键字B、类名C、对象名D、函数名标准答案:C知识点解析:此题考查的是预定义流对象。C++有4个预定义的流对象:cin一标准输入;cout-一标准输出;cerr一标准出错信息输出;clog一带缓冲的标准出错信息输出。15、如果利用C++流进行输入输出,下面的叙述中正确的是()。A、只能借助于流对象进行输入输出B、只能进行格式化输入输出C、只能借助于cin和tout进行输入输出D、只能使用运算符>>和<<进行输入输出标准答案:A知识点解析:此题考查的知识点是C++流。利用C++流既可以进行有格式输入输出,也可以进行无格式输入输出,所以选项B错误;C++的4个预定义的流对象为:cin一标准输入,cout一标准输出,cerr-一标准出错信息输出,clog一带缓冲的标准出错信息输出,选项C错误;C++流除了可以使用提取“>>”插入“<<”进行输入输出外,还可以通过流对象的一些成员函数进行输入输出,故选项D错误。16、下列有关C++流的叙述中,错误的是()。A、C++操作符setw设置的输出宽度永久有效B、C++操作符endl可以实现输出的回车换行C、处理文件I/O时,要包含头文件fstreamD、进行输入操作时,eof()函数用于检测是否到达文件尾标准答案:A知识点解析:此题考查的是C++流。C++操作符setw()的作用是设置输入输出宽度,且只对当前一次有效,并非永久有效,故选项A叙述错误。17、在语句“cout<<’A’:”中,cout是()。A、类名B、对象名C、函数名D、C++的关键字标准答案:B知识点解析:C++有四个预定义的流对象:cin标准输,cout标准输出,cerr标准出错信息输出,clog带缓冲的标准出错信息输出。18、下列关于C++流的描述中,错误的是()。A、cout>>’A’表达式可输出字符AB、eof()函数可以检测是否到达文件尾C、对磁盘文件进行流操作时,必须包含头文件fstreamD、以iosbase::out模式打开的文件不存在时,将自动建立一个新文件标准答案:A知识点解析:cout是一个标准输出流对象。>>称之为提取运算符,它的功能是从输入流中提取数据赋值给一个变量。<<为插入运算符,其功能是把表达式的值插入到输出流中。当系统执行cout<<x操作时,首先根据x值的类型调用相应的插入运算符重载器函数,把x的值传送给对应的形参,接着执行函数体,把x的值输出到显示器屏幕上,在当前屏幕光标位置处显示出来,然后返回ostream流,以便继续使用插入运算符输出下一个表达式的值。对于本题来说,要输出字符‘A’的值应该写成cout<<’A’。因而选项A是错误的。19、在C++中,cin是一个()。A、类B、对象C、模板D、函数标准答案:B知识点解析:cin为istream流类的对象。20、下列关于C++预定义流对象的叙述中,正确的是()。A、cin是C++预定义的标准输入流对象B、cin是C++预定义的标准输入流类C、cout是C++预定义的标准输入流对象D、cout是C++预定义的标准输入流类标准答案:A知识点解析:cin为istream流类的标准输入对象,标准输入设备就是指键盘。21、C++系统预定了4个用于标准数据流的对象,下列选项中不属于此类对象的是()。A、coutB、cinC、cerrD、cset标准答案:D知识点解析:C++流有4个预定义的流对象,它们分别是:ein标准输入:cout标准输出;cerr标准出错信息输出;clog带缓冲的标准出错信息输出。22、要利用C++流实现输入输出的各种格式控制,必须在程序中包含的头文件是()。A、fstreamB、istrearaC、ostreamD、iomanip标准答案:D知识点解析:要使用setw、fixed等操作符,须包含iomanip这个文件。23、在C++H冲,打开一个文件时与该文件建立联系的是()。A、流对象B、模板C、函数D、类标准答案:A知识点解析:在C++中,打开一个文件时与该文件建立联系的是流对象。24、下列关于输入输出流的叙述中,正确的是()。A、一个文件流可以与一个数据文件相联系B、cin是专门从键盘输入数据的输入流类C、流运算符<<用来从输入流中读取数据D、宽度设置的效果永久有效标准答案:A知识点解析:当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的流对象,另一个是文件对象。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。25、在C++中既可以用于文件输入又可以用于文件输出的流类是()。A、fstrearnB、ifstreamC、ofstreamD、iostream标准答案:A知识点解析:文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。ifstream是文件输入流类,ofstream是文件输出流类,fstream是文件输入输出流类,当使用cin、cout的预定义流对象进行针对标准设备的I/O操作,则需.要使用iostream文件。26、对于语句cout<<endl<<x中的各个组成部分,下列叙述中错误的是()。A、’’cout’’是一个输出流对象B、’’endl"的作用是输出回车换行C、’’x’’是一个变量D、’’<<’’称作提取运算符标准答案:D知识点解析:此题考查的是C++语言的输出流。符号“<<”是预定义插入符,提取运算符是“>>”。国家二级C++机试(运算符重载、模板和C++流)模拟试卷第2套一、选择题(本题共26题,每题1.0分,共26分。)1、若在表达式y/x中,’’/’’是作为成员函数重载的运算符,则该表达式还可以表示为()。A、x.operator/(y)B、operator/(x,y)C、y.operator/(x)D、operator/(y,x)标准答案:C知识点解析:运算符函数的函数名是由运算符前加关键字operator构成的。所以当“/”作为运算符重载后,其格式为operator/。所以其作为成员函数调用时的格式为y.operator/(x)。2、有类定义如下:classType{public:Type(inti=0);Typeoperator-(int);friendTypeoperator+(Type,Type);private:intval;};若有对象定义Typec1;则下列语句序列中,错误的是()。A、Type(3)+c1;B、e1+Type(3);C、3-c1:D、c1-3;标准答案:C知识点解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。3、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+{Data};C、Data+operator{Data};D、operator+(Data,Data);标准答案:B知识点解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。4、若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()。A、operatorlong()const;B、operatorlong(bigNumber);C、longoperatorlong()const;D、longoperatorlong(BjgNumber);标准答案:A知识点解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。5、有如下类模板定义:template<typenameT>classBigNumber{longn:public:BigNumber(Ti):n(i){}BigNumberoperator+(BigNumberb){returnBigNtmaber(n+b.n);}}已知b1、b2是,BigNumber的两个对象,则下列表达式中错误的是()。A、b1+b2B、b1+3C、3+b1D、3+3标准答案:C知识点解析:C++运算符的重载有两个方式,一种是做为成员函数,另一种是做为友元函数。前种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为COperatoroperator+(COperator&op);,在调用的过程中我们可以理解为result=operator+(op);友元方式为friendCOperatoroperator.(COperator&op1,COperator&op2);,在调用的过程中我们可以理解为result=operator-(op1,op2);。对于本题题来说,整数3与b1相加时,3是诚型,b1是BigNumber<T>型,int型不能和别的型做运算。6、为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是()。A、+B、=C、<<D、++标准答案:B知识点解析:在C++中,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。7、若为Fraction类重载前增1运算符++,应在类体中将其声明为()。A、Fraction&operator++();B、Fraction&operator++(int);C、friendFraction&operator++();D、friendFraction&operator++(int);标准答案:A知识点解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符十+时,其声明形式为Fraction&operatorH(int);。8、若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是()。A、XVoperator*(XV,XV);B、XV*(XV);C、operator*(XV);D、XVoperator*(XV);标准答案:D知识点解析:“*”是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以this指针的形式隐藏在参数表中。9、已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:MyClockc1,c2;//……c2=c1+10;由此可知:为类MyClock重载的“+”运算符函数的声明是()。A、friendMyClockoperator+(MyClock,int);B、friendMyClockoperator+(MyClock,MyClock);C、friendMyClockoperator+(int,MyClock);D、MyClockoperator+(MyClock);标准答案:A知识点解析:由表达式c2=c1+10可知,在对“+”进行重载时,第一操作数是MyClock类的对象,而第二操作数是一个整型数据。10、已知将运算符’’+’’和’’*’’作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于()。A、c1.operator*(c2.operator+(c1))B、c1.operator+(c2.operator*(c1))C、c1.operator*(c1.operator+(c2))D、c2.operator+(c1.operator*(c1))标准答案:B知识点解析:表达式c1+c2*c1的含义是c1加上c2与c1的积。11、下列运算符不能重载为友元函数的是()。A、=()[]->B、+-++--C、><>=<=D、+=-=*=/=标准答案:A知识点解析:此题考查的是运算符重载的概念。c1++语言规定,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,如果要重载为友元函数就必须重载为非成员函数。12、若要重载+、=、<<、==和[]运算符,则必须作为类成员重载的运算符是()。A、+和=B、=和<<C、==和<<D、=和[]标准答案:D知识点解析:=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,而且不能是针对枚举类型操作数的重载。13、在类中重载赋值运算符时,应将其声明为类的()。A、静态函数B、友元函数C、成员函数D、构造函数标准答案:C知识点解析:赋值运算符只能作为类的成员函数重载。14、有如下函数模板定义:template<classT>Tfunc(Tx,Ty){returnx*x+y*y;}在下列对func的调用中,错误的是()。A、func(3,5);B、func(3.0,5.5);C、func(3,5.5);D、func<int>(3,5.5);标准答案:C知识点解析:此题考查的是函数模板的使用。引用模板函数和引用一般函数在语法形式上基本相同。需要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中的对应形参。本题C选项中,编译系统从第一个参数“3”获得信息“int”和从第二个参数获得信息“double”两者矛盾,错误;A、B选项正确:D选项中,函数名后的是模板实参表,编译系统会将double型的形参“5.5”自动转化成int类型。15、有如下函数模板:template<typenamet,typenameU>Tcast(Uu){returnu;}其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是()。A、cast(i);B、cast<>(i);C、cast<char*,int>(i);D、cast<double,int>(i);标准答案:D知识点解析:此题考查的是模板函数的调用。本题中cast()函数的实参i只能确定模板参数U的类型为int,而不能确定另外一个模板参数T,故选项A、B错误;C++语言不允许隐式地将int转化为char*,故选项C错误。16、关于在调用模板函数时模板实参的使用,下列表述正确的是()。A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略标准答案:D知识点解析:此题考查的是模板实参的省略。模板实参在以下集中情况中不能省略:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参表中:函数模板含有常规形参。17、有如下函数模板:template<classT>Tsquare(Tx){returnx*x;}其中T是()。A、函数形参B、函数实参C、模板形参D、模板实参标准答案:C知识点解析:此题考查的是函数模板。声明一个函数模板的格式是:template<模板形参表声明>函数声明,{函数体}其中的<模板形参表声明>是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:typename参数名;class参数名,类型修饰参数名。18、下列函数模版中的定义中,合法的是()。A、template<typenameT>Tabs(Tx){returnx<0?-x:x;}B、templateclass<T>Tabs(Tx){returnx<0?-x:x;}C、templateT<class.T>abs(Tx){returnx<0?-x:x;}D、templateTabs(Tx){returnx<07-x:x;}标准答案:A知识点解析:此题考查的是函数模板。声明一个函数模板的格式是:template<模板形参表声明>函数声明,其中的<模板形参表声明>是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:typename参数名;class参数名;类型修饰参数名。19、下列有关模板的叙述中,正确的是()。A、函数模板不能含有常规形参B、函数模板的_个实例就是一个函数定义C、类模板的成员函数不能是模板函数D、用类模板定义对象时,绝对不能省略模板实参标准答案:B知识点解析:此题考查的是模板的概念。函数模板可以含有常规形参;函数模板的一个实例就是一个函数定义;类模板中的成员函数都是模板函数;在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的参数设置默认值。20、下面是一个模板声明的开始部分:templute<typenameT>double由此可知()。A、这可能是一个函数模板的声明B、这可能是一个类模板的声明C、这既可能是一个函数模板的声明,也可能是一个类模板的声明D、这肯定是一个错误的模板声明标准答案:A知识点解析:此题考查的是函数模板的声明。声明一个函数模板的格式是:template<模板形参表声明>函数声明;定义类模板的格式是:template<类型形参表>class<类模板名>{};。21、下列关于模板的叙述中,错误的是()。A、调用模版函数时,在一定条件下可以省略模板实参B、可以用int、double这样的类型修饰符来声明模版参数C、模板声明中的关键字class都可以用关键字typename替代D、模板的形参表中可以有多个参数标准答案:C知识点解析:在声明模板参数是,关键字typename和class是可以互换的,两者是等价的。但选项C中说的是模版声明,在类模板声明中,替换可能会引起麻烦。22、下列关于函数模板的描述中,错误的是()。A、从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准B、对于常规参数所对应的模板实参,任何情况下都不能省略C、虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参D、模板参数表不能为空标准答案:D知识点解析:在调用一个模板函数时,如果编译系统能够从模板实参表判断其中或全部虚拟类型参数对应的实际参数,而且它们正好是参数表中最后的若干参数,刚模板实参表中的那几个参数可以省略。23、下列关于模板形参的描述中,错误的是()。A、模板形参表必须在关键字template之后B、模板形参表必须用括弧()括起来C、可以用class修饰模板形参D、可以用typename修饰模板形参标准答案:B知识点解析:声明一个函数模板的格式是:template<<模板形参表声明>><函数声明>,其中的<模板形参表声明>是由一个或多个<模板形参>组成(如果是多个,需要用逗号隔开)。每个<模板形参>具有下面的几种形式:①typename<参数表>②class<参数名>③<类型修饰><参数名>由此可知,模板形参表必须用括弧<>括起来,而不是(),所以选项B为正确答案。24、下列关于类模板的描述中,错误的是()。A、类模板的成员函数都是模板函数B、可以为类模板参数设置默认值C、类模板描述了一组类D、类模板中只允许有一个类型参数标准答案:D知识点解析:类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)。一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值。25、下列关于模板的叙述中,正确的是()。A、如果一个类中存在纯虚函数,这个类就是类模板B、函数模板不能有形式参数表C、类模板是一种参数化类型的类,是类的生成器D、类模板中不能包含构造函数标准答案:C知识点解析:对于函数模板,数据类型本身成了它的参数,是一种参数化类型的函数。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。26、有函数模板声明和一些变量定义如下:template<classT1,classT2,classT3>T1sum(T2,T3);doubled1,d2;则下列调用中,错误的是()。A、sum<double,double,double>(d1,d2);B、sum<double,double>(d1,d2);C、sum<double>(d1,d2);D、sum(d1,d2);标准答案:D知识点解析:虚拟类型参数T1没有出现在模板函数的形参表中,因此在调用时不可能从模板函数的实参表中获得相应的信息,因此T1无法省略。而在选项D中省略了。国家二级C++机试(运算符重载、模板和C++流)模拟试卷第3套一、选择题(本题共24题,每题1.0分,共24分。)1、有如下程序:#include<iostrearn>usingnamespacestd;intmain(){cout.fill(’*’);cout.width(6);cout.fill(’#’);cout<<123<<endl;return0;}执行后的输出结果是()。A、###123B、123###C、***123D、123***标准答案:A知识点解析:此题考查的是I/O格式化输出。函数width(intn)设置输入输出宽度,当实际数据宽度小于制定的宽度时,多余的位置用填充字符填满;当实际数据宽度大于设置的宽度时,仍按实际宽度输出;函数fill(charc)用来设置填充字符。2、有如下程序:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){cout.fill(’*’);cout<<left<<setw(4)<<123<<<’’OK’’<<endl;return0;}执行这个程序的输出结果是()。A、123*OKB、123*OK**C、*123OKD、*123**OK标准答案:A知识点解析:此题考查了输出流的格式控制。cout的fill()是设置填充字符:left和endl分别是使输出数据左对齐和换行;setw()函数的作用是设置输入输出的宽度,此设置效果只对以此输入或输出有效。此题中,输出整数123时宽度为4且左对齐,得到“123*”;输出字符串“OK”时宽度没有定义实际大小输出,结果得到OK:故最后得到的输出结果是123*K。3、下列关于输入流类成员函数getline()的描述中,错误的是()。A、该函数是用来读取键盘输入的字符串的B、该函数读取的字符串长度是受限制的C、该函数读取字符串时,遇到终止符便停止D、该函数读取字符串时,可以包含空格标准答案:A知识点解析:此题考查的是getline()函数。getline()函数的原型为:istream_type&getline(char_type*s,strearnsize,char_typedelim);。其功能是从当前输入位置开始提取字符存入s所指向的具有n个字节的字符空间中。遇到以下情况时停止:已提取并存储了n-1个字符;到流尾,无字符可取:下一个要提取的字符等于结束标志字符delim。故选项B、C、D都是正确的。getline()函数不仅可以用来读取键盘输入的字符串,还可以用来读取文件等数据流,故选项A错误。4、使用输入输出操作符setw,可以控制()。A、输出精度B、输出宽度C、对齐方式D、填充字符标准答案:B知识点解析:此题考查的是C++流的操作符。在C++流中,操作符setw的作用是设置输入输出宽度。5、已知一程序运行后执行的第一个输出操作是()。cout<<setw(10)<<setfill(’*’)<<1234;则此操作的输出结果是A、1234B、******1234C、**********1234D、1234******标准答案:B知识点解析:此题考查的是输入输出的格式控制。setw()控制的是输入输出的宽度;setfill()控制的是输出的填充字符。所以本题的输出结果是*****1234。6、有如下4个语句:①cout<<’A’<<setfill(’*’)<<left<<setw(7)<<’B’<<endl;②cout<<setfill(’*’)<<left<<setw(7)<<’A’<<’B’<<endl;③cout<<’A’<<serfill(’*’)<<right<<setw(7)<<’B’<<endl;④cout<<setfill(’*’)<<right<<setw(7)<<’A’<<’B’<<endl;其中能显示A******B的是()。A、①和③B、①和④C、②和③D、②和④标准答案:C知识点解析:此题考查C++流的使用。setfill()作用是设置填充字符;left是使输出数据在指定宽度内左对齐:fight是使输出数据在指定宽度内右对齐。7、假定下列语句都是程序运行后首次执行的输出语句,其中输出结果与另外三条语句不同的语句是()。A、cout<<setfill(’*’)<<123<<setw(9)<<321;B、cout<<setfill(’*’)<<setw(6)<<left<<123<<setw(6)<<right<<321;C、cout<<123<<setfill(’*’)<<setw(6)<<321;D、cout<<setfill(’*’)<<setw(9)<<left<<123<<321;标准答案:B知识点解析:按照选项B的输出格式控制符输出的结果为“123******321”,而按照选项A、C、D的输出格式控制符输出的结果为“123***321”。8、有如下程序:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ints[]={123,234};cout<<right<<setfill(’*’)<<setw(6);for(inti=0;i<2;i++){cout<<s[i]<<endl;}return0;}运行时的输出结果是()。A、123234B、***123234C、***123***234D、***123234***标准答案:B知识点解析:在输出语句中定义了输出的格式是字符宽度为6,并且向右对齐,不足的位用‘*’补齐。在C++中,输出格式的设置只对第一次输出有效,在完成了一个数据的输出后,宽度设置自动恢复为0(表示按数据实际宽度输出)。所以对于本题来说,在循环语句中输出数组s[0]中的元素时,按照规定的格式输出,其结果为***123,当输出s[1]时,输出格式已经恢复到按数据实际宽度输出,所以此时输出为234。9、下列控制格式输入输出的操作符中,能够设置浮点数精度的是()。A、setprecisionB、setwC、setfillD、showpoint标准答案:A知识点解析:setprecision(intn):设置浮点数的精度(有效位数或小数位数),等价函数调用:ioprecision(n)。10、有如下程序:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){cout<<setw(10)<<setfill(’x’)<<setprecision(8)<<left;cout<<12.3456793<<______<<98765;return0;}若程序的输出是12.345679x98765xxxxx,则划线处缺失的部分是()。A、setw(10)B、setfill(’x’)C、setprecision(8)D、right标准答案:A知识点解析:根据程序输出的结果最后5个位置用x进行填充,又因为setw(10)设置输出的宽度效果只对一次输出有效。所以划线处应该填写setw(10)。11、下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是()。A、cout<<internal<<12345;B、cout<<left<<12345:C、cout<<right<<12345;D、cout<<setw(6)<<12345;标准答案:D知识点解析:选项A,B,C都没有指输出数据的宽度,所以在输出时,按实际字符的宽度输出,而选项D指定输出字符的宽度为6,而实际输出的宽度等于5,所以最后一个字符用空格补齐。12、下列控制对齐方式的操作符中,错误的是()。A、internalB、centerC、leftD、fight标准答案:B知识点解析:对齐方式的控制操作符left的含义是在设定的宽度内左对齐输出,右端填已设定的填充字符:right(此为默认设置)在设定的宽度内右对齐输出;intemal在设定的宽度内右对齐输出,但若有符号(-或+),符号置于最左端。13、有如下程序:#include<iostrearm>#include<iomanip>usingnamespacestd;intmain(){cout<<setfill(’#’)<<setw(4)<<’’OK’’<<123<<endl;return0;}运行这个程序的输出结果是()。A、##OK123B、##OK#123C、K#123D、OK##123#标准答案:A知识点解析:setfill是设置填充字符,setw设置输出的宽度,它们的作用表现在紧接着输出的字符串上。这个宽度是填充后的宽度。所以cout<<setfill(’#’)<<setw(4)<<’’OK’’<<123中,setfill和s6tw只作用在’’OK’’,表示在’’OK’’前面填充2个##。14、若磁盘上已存在某个文本文件,其全路径文件名为d:\ncre\test.txt,下列语句中不能打开该文件的是()。A、ifstreamfile(’’d:\ncre\test.txt’’);B、ifStreamfile(’’d:\ncre\\test.txt’’);C、ifstreamfile;file.open(’’d:\\ncre\\test.txt’’);ifstream(’’d:\\ncre\\test.txt’’);D、ifstream*pFile=new标准答案:A知识点解析:此题考查的是转义字符。在字符常量或字符串中,以“\”开头的一系列字符被看做是一个转义字符。要表示“\”字符,必须使用转义字符“\\”。15、语句ofstreamf(’’SALARY.DAT’’,ios_base::app);的功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且()。A、若文件存在,将其置为空文件;若文件不存在,打开失败B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D、若文件存在,打开失败;若文件不存在,建立一个新文件标准答案:B知识点解析:此题考查的是文件打开模式。文件打开模式isobase::app是为添加数据而打开(总是在尾部写),故只有选项B说法正确。16、如下函数的作用是以双倍行距输出文件:voiddouble__space(ifstream&f,ofstream&t){charc;while(){;_________if(c==’\n’)t.put(c);}}画线处缺失的部分是()。A、f.get(c)与t.put?B、f.put(c)与tget?C、t.get(c)与f.put?D、t.put(c)与f.get?标准答案:A知识点解析:此题考查的是文件流。get()函数作用是读入一个字符,所以调用它的应该是输入文件流ifstream对象f.put()函数作用是输出一个字符,所以调用它的应该是输入文件流ofstre锄对象t,故选项B、C排除。读入和输出应该是有顺序的,应该先读入后输出,所以前一空填fget(c),后一空填t.put(c)。17、要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是()。A、ifstreamfin=ifstream.open(’’file.dat’’);B、itstream*fin=ewifstream(’’file.dat’’);C、ifstreamfin;fin.open(’’file.dat’’);D、ifstream*fin=newifstream0;fin->open(’’file.dat’’);标准答案:A知识点解析:在选项A中,在赋值号的左侧表示建立一个输入流对象fin,而在赋值号的右侧的表达式不正确,因为文件输入流类ifstream不能直接调用其成员函数open。18、当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为()。A、ios_base:finB、ios_base::in|ios_base::outC、iosbase::outD、iosbase::in&iosbase::out标准答案:A知识点解析:对于ifstream,默认打开模式是ios_base::in。ifstream只能用于输入,它没有提供任何用于输出的操作。19、在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是()。A、ios_base::curB、ios_base::begC、ios__base::outD、ios__base::end标准答案:A知识点解析:C++流的定位方式(也就是指针移动方式)有三种,被定义为ios_base::seekdir中的一组枚举符号:iosbase::beg相当于文件首;iosbase::cur相当于当前位置(负数表示当前位置之前);iosbase::end相对于文件尾。20、打开文件时可单独或组合使用下列文件打开模式()。①ios__base::app②ios__base::binary③ios__base::in④ios__base::out若要以二进制读方式打开一个文件,需使用的文件打开模式为A、①⑧B、①④C、②③D、②④标准答案:D知识点解析:模式ios_base::binary作为二制进文件打开,ios_base::out为输出而打开文件。21、下列关于文件流的描述中,正确的是()。A、文件流只能完成针对磁盘文件的输入和输出B、建立一个文件流对象时,必须同时打开一个文件C、若输入流要打开的文件不存在,将建立一个新文件D、若输出流要打开的文件不存在,将建立一个新文件标准答案:D知识点解析:对于输入文件流类ifstream,默认的打开模式是iosbase::in,当以这种方式打开文件而文件又不存在时,通过fail()可测试打开失败(返回值为true),对于输出文件流类ofstream,默认的打开模式是ios_base::out,当以这种方式.打开文件而文件又不存在时,将自动建立新文件。22、若目前D盘根目录下并不存在test.txt文件,则下列打开文件方式不会自动创建test.txt文件的是()。A、ifstreamfin;fin.open(’’d:\\test.txt’’,ios_base::in);B、fstreamrio;fio.open(’’d:\\test.txt’’,ios_base::out);C、ofstreamlout;fout.open(’’d:\\test.txt’’,ios_base::out);D、ofstreamfout;fout.open(’’d:\\test.txt’’,ios_base::app);标准答案:A知识点解析:如果以iso_base::in模式打开文件但文件又不存在时,可以通过fail()测出文件打开失败,不会自动创建文件。23、如需要向一个二进制文件尾部添加数据,则该文件的打开方式为()。A、ios_base::appB、ios_base::binary|los__base::outC、ios__base::outD、ios_base::binary|ios_base::app标准答案:D知识点解析:ios_base::binary模式是作为二进制文件打开,ios_base::app模式是作为添加数据而打开(总是在尾部写)。24、有如下语句序列:ifstreaminffie(’’DATA.DAT’’);if(infile.good())cout<<’’A’’;else{tout<<’’B’’;ofstreamoutfile(’’DATA.DAT’’);if(outfile.fail())cout<<’’C’’;elsecout<<’’D’’;}若执行这个语句序列显示的是BD,则说明文件DATA.DAT()。A、以读方式打开成功B、以读方式打开失败,但以写方式打开成功C、以读方式打开失败,以写方式打开也失败D、以读方式打开成功,以写方式打开也成功标准答案:B知识点解析:由这个语句序列显示的结果是BD,说明执行了cout<<’’B’’和cout<<"D"语句。国家二级C++机试(运算符重载、模板和C++流)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、若在表达式y/x中,’’/’’是作为成员函数重载的运算符,则该表达式还可以表示为()。A、x.operator/(y)B、operator/(x,y)C、y.operator/(x)D、operator/(y,x)标准答案:C知识点解析:运算符函数的函数名是由运算符前加关键字operator构成的。所以当“/”作为运算符重载后,其格式为operator/。所以其作为成员函数调用时的格式为y.operator/(x)。2、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+{Data};C、Data+operator{Data};D、operator+(Data,Data);标准答案:B知识点解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。3、若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()。A、operatorlong()const;B、operatorlong(bigNumber);C、longoperatorlong()const;D、longoperatorlong(BjgNumber);标准答案:A知识点解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。4、有如下类模板定义:template<typenameT>classBigNumber{longn:public:BigNumber(Ti):n(i){}BigNumberoperator+(BigNumberb){returnBigNtmaber(n+b.n);}}已知b1、b2是,BigNumber的两个对象,则下列表达式中错误的是()。A、b1+b2B、b1+3C、3+b1D、3+3标准答案:C知识点解析:C++运算符的重载有两个方式,一种是做为成员函数,另一种是做为友元函数。前种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为Coperatoroperator+(Coperator&op);,在调用的过程中我们可以理解为result=operator+(op);友元方式为friendCoperatoroperator.(Coperator&op1,Coperator&op2);,在调用的过程中我们可以理解为result=operator-(op1,op2);。对于本题题来说,整数3与b1相加时,3是诚型,b1是BigNumber<T>型,int型不能和别的型做运算。5、为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是()。A、+B、=C、<<D、++标准答案:B知识点解析:在C++中,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。6、有如下类定义classMyClasspublic:_________Private:intdata;};若要为MyClass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入MyClass类的对象obj,则横线处的声明语句应为()。A、friendistream&operator>>(istream&is,MyClass&a);B、friendistream&operator>>(istream&is,MyClassa);C、istream&operator>>(istream&is,MyClass&a);D、istream&operator>>(istream&is,MyClassa);标准答案:A知识点解析:C++的输入运算符>>作为非类成员函数重载。在一个类中,可将输入运算符>>声明为友元函数,在类MyClass重载输入运算符>>的形式如选项A所示。7、若为Fraction类重载前增1运算符++,应在类体中将其声明为()。A、Fraction&operator++();B、Fraction&operator++(int);C、friendFraction&operator++();D、friendFraction&operator++(int);标准答案:A知识点解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符十+时,其声明形式为Fraction&operatorH(int);。8、若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是()。A、XVoperator*(XV,XV);B、XV*(XV);C、operator*(XV);D、XVoperator*(XV);标准答案:D知识点解析:“*”是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以this指针的形式隐藏在参数表中。9、已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:MyClockc1,c2;//……c2=c1+10;由此可知:为类MyClock重载的“+”运算符函数的声明是()。A、friendMyClockoperator+(MyClock,int);B、friendMyClockoperator+(MyClock,MyClock);C、friendMyClockoperator+(int,MyClock);D、MyClockoperator+(MyClock);标准答案:A知识点解析:由表达式c2=c1+10可知,在对“+”进行重载时,第一操作数是MyClock类的对象,而第二操作数是一个整型数据。10、已知将运算符’’+’’和’’*’’作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于()。A、c1.operator*(c2.operator+(c1))B、c1.operator+(c2.operator*(c1))C、c1.operator*(c1.operator+(c2))D、c2.operator+(c1.operator*(c1))标准答案:B知识点解析:表达式c1+c2*c1的含义是c1加上c2与c1的积。11、下列运算符不能重载为友元函数的是()。A、=()[]->B、+-++--C、><>=<=D、+=-=*=/=标准答案:A知识点解析:此题考查的是运算符重载的概念。c1++语言规定,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,如果要重载为友元函数就必须重载为非成员函数。12、在类中重载赋值运算符时,应将其声明为类的()。A、静态函数B、友元函数C、成员函数D、构造函数标准答案:C知识点解析:赋值运算符只能作为类的成员函数重载。13、下列关于模板的叙述中,错误的是()。A、模板声明中的第一个符号总是关键字templateB、在模板声明中用<和>括起来的部分是模板的形参表C、类模板不能有数据成员D、在一定条件下函数模板的实参可以省略标准答案:C知识点解析:此题考查模板的概念。模板的一般说明形式如下:template类型形参表函数返回值类型函数名(形参表){函数体},所以选项A、B正确。函数模板的实参在一定条件下是可以省略的,所以选项C错误。14、有如下函数模板定义:template<classT>Tfunc(Tx,Ty){returnx*x+y*y;}在下列对func的调用中,错误的是()。A、func(3,5);B、func(3.0,5.5);C、func(3,5.5);D、func<int>(3,5.5);标准答案:C知识点解析:此题考查的是函数模板的使用。引用模板函数和引用一般函数在语法形式上基本相同。需要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中的对应形参。本题C选项中,编译系统从第一个参数“3”获得信息“int”和从第二个参数获得信息“double”两者矛盾,错误;A、B选项正确:D选项中,函数名后的是模板实参表,编译系统会将double型的形参“5.5”自动转化成int类型。15、有如下函数模板:template<typenamet,typenameU>Tcast(Uu){returnu;}其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是()。A、cast(i);B、cast<>(i);C、cast<char*,int>(i);D、cast<double,int>(i);标准答案:D知识点解析:此题考查的是模板函数的调用。本题中cast()函数的实参i只能确定模板参数U的类型为int,而不能确定另外一个模板参数T,故选项A、B错误;C++语言不允许隐式地将int转化为char*,故选项C错误。16、关于在调用模板函数时模板实参的使用,下列表述正确的是()。A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略标准答案:D知识点解析:此题考查的是模板实参的省略。模板实参在以下集中情况中不能省略:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参表中:函数模板含有常规形参。17、下列函数模版中的定义中,合法的是()。A、template<typenameT>Tabs(Tx){returnx<0?-x:x;}B、templateclass<T>Tabs(Tx){returnx<0?-x:x;}C、templateT<class.T>abs(Tx){returnx<0?-x:x;}D、templateTabs(Tx){returnx<07-x:x;}标准答案:A知识点解析:此题考查的是函数模板。声明一个函数模板的格式是:template<模板形参表声明>函数声明,其中的<模板形参表声明>是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:typename参数名;class参数名;类型修饰参数名。18、C++中的模板包括()。A、对象模板和函数模板B、对象模板和类模板C、函数模板和类模板D、变量模板和对象模板标准答案:C知识点解析:此题考查的是模板。在C++语言中,模板有两类:函数模板和类模板。19、下列有关模板的叙述中,正确的是()。A、函数模板不能含有常规形参B、函数模板的_个实例就是一个函数定义C、类模板的成员函数不能是模板函数D、用类模板定义对象时,绝对不能省略模板实参标准答案:B知识点解析:此题考查的是模板的概念。函数模板可以含有常规形参;函数模板的一个实例就是一个函数定义;类模板中的成员函数都是模板函数;在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的参数设置默认值。20、下列关于模板的叙述中,错误的是()。A、调用模版函数时,在一定条件下可以省略模板实参B、可以用int、double这样的类型修饰符来声明模版参数C、模板声明中的关键字class都可以用关键字typename替代D、模板的形参表中可以有多个参数标准答案:C知识点解析:在声明模板参数是,关键字typename和class是可以互换的,两者是等价的。但选项C中说的是模版声明,在类模板声明中,替换可能会引起麻烦。21、下列关于函数模板的描述中,错误的是()。A、从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准B、对于常规参数所对应的模板实参,任何情况下都不能省略C、虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参D、模板参数表不能为空标准答案:D知识点解析:在调用一个模板函数时,如果编译系统能够从模板实参表判断其中或全部虚拟类型参数对应的实际参数,而且它们正好是参数表中最后的若干参数,刚模板实参表中的那几个参数可以省略。22、下列关于模板形参的描述中,错误的是()。A、模板形参表必须在关键字template之后B、模板形参表必须用括弧()括起来C、可以用class修饰模板形参D、可以用typename修饰模板形参标准答案:B知识点解析:声明一个函数模板的格式是:template<<模板形参表声明>><函数声明>,其中的<模板形参表声明>是由一个或多个<模板形参>组成(如果是多个,需要用逗号隔开)。每个<模板形参>具有下面的几种形式:①typename<参数表>②class<参数名>③<类型修饰><参数名>由此可知,模板形参表必须用括弧<>括起来,而不是(),所以选项B为正确答案。23、下列关于类模板的描述中,错误的是()。A、类模板的成员函数都是模板函数B、可以为类模板参数设置默认值C、类模板描述了一组类D、类模板中只允许有一个类型参数标准答案:D知识点解析:类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)。一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值。24、下列关于模板的叙述中,正确的是()。A、如果一个类中存在纯虚函数,这个类就是类模板B、函数模板不能有形式参数表C、类模板是一种参数化类型的类,是类的生成器D、类模板中不能包含构造函数标准答案:C知识点解析:对于函数模板,数据类型本身成了它的参数,是一种参数化类型的函数。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。25、有函数模板声明和一些变量定义如下:template<classT1,classT2,classT3>T1sum(T2,T3);doubled1,d2;则下列调用中,错误的是()。A、sum<double,double,double>(d1,d2);B、sum<double,double>(d1,d2);C、sum<double>(d1,d2);D、sum(d1,d2);标准答案:D知识点解析:虚拟类型参数T1没有出现在模板函数的形参表中,因此在调用时不可能从模板函数的实参表中获得相应的信息,因此T1无法省略。而在选项D中省略了。国家二级C++机试(运算符重载、模板和C++流)模拟试卷第5套一、选择题(本题共27题,每题1.0分,共27分。)1、有如下程序:#include<iostrearn>usingnamespacestd;intmain(){cout.fill(’*’);cout.width(6);cout.fill(’#’);cout<<123<<endl;return0;}执行后的输出结果是()。A、###123B、123###C、***123D、123***标准答案:A知识点解析:此题考查的是I/O格式化输出。函数width(intn)设置输入输出宽度,当实际数据宽度小于制定的宽度时,多余的位置用填充字符填满;当实际数据宽度大于设置的宽度时,仍按实际宽度输出;函数fill(charc)用来设置填充字符。2、下面关于C++流的叙述中,正确的是()。A、cin是一个输入流对象B、可以用ifstream定义一个输出流对象C、执行语句序列char*y="PQMN’’;cout<<,y;将输出字符串"PQMN”的地址D、执行语句序列charx[80];cin.getline(x,80);时,若键入Happynewyear则x中的字符串是"Happy’’标准答案:A知识点解析:此题考查的是C++流的概念和I/O的格式化。cin是类的对象,亦即输入流对象;ifstream是输入文件流类,不能定义一个输出流对象:C选项中最后输出的是字符串“PQMN”:D选项中x中字符串应该是“Happynewyear”。3、有如下程序:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){cout.fill(’*’);cout<<left<<setw(4)<<123<<<’’OK’’<<endl;return0;}执行这个程序的输出结果是()。A、123*OKB、123*OK**C、*123OKD、*123**OK标准答案:A知识点解析:此题考查了输出流的格式控制。cout的fill()是设置填充字符:left和endl分别是使输出数据左对齐和换行;setw()函数的作用是设置输入输出的宽度,此设置效果只对以此输入或输出有效。此题中,输出整数123时宽度为4且左对齐,得到“123*”;输出字符串“OK”时宽度没有定义实际大小输出,结果得到OK:故最后得到的输出结果是123*K。4、下列关于输入流类成员函数getline()的描述中,错误的是()。A、该函数是用来读取键盘输入的字符串的B、该函数读取的字符串长度是受限制的C、该函数读取字符串时,遇到终止符便停止D、该函数读取字符串时,可以包含空格标准答案:A知识点解析:此题考查的是getline()函数。getline()函数的原型为:istream_type&getline(char_type*s,strearnsize,char_typedelim);。其功能是从当前输入位置开始提取字符存入s所指向的具有n个字节的字符空间中。遇到以下情况时停止:已提取并存储了n-1个字符;到流尾,无字符可取:下一个要提取的字符等于结束标志字符delim。故选项B、C、D都是正确的。getline()函数不仅可以用来读取键盘输入的字符串,还可以用来读取文件等数据流,故选项A错误。5、有如下程序#include<iostream>#include<iomanip>usingnamespacestd;intmain(){cout<<setprecision(3)<<fixed<<setfill(’*’)<<setw(8);cout<<12.345<<_______<<34.567;return0:}若程序的输出是:**12.345
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农牧设备回收合同范本
- app软件采购合同范本
- 劳动合同范本 简约
- 佛山机械购销合同范本
- 京东供货方合同范本
- 加工协作合同范本
- 劳务合同范本保密协议
- 动漫公司产品合同范本
- 修理提成合同范例
- 全款买车正规合同范本
- 经典文学作品中的女性形象研究外文文献翻译2016年
- 控股集团公司组织架构图.docx
- 高炉煤气安全知识的培训
- 2008 年全国高校俄语专业四级水平测试试卷
- 需求供给与均衡价格PPT课件
- 最常用2000个英语单词_(全部标有注释)字母排序
- 人造革的几种生产制造方法
- 在银行大零售业务工作会议上的讲话讲解学习
- 古代传说中的艺术形象-
- 水电站大坝土建安装工程悬臂模板施工手册
- 三体系内审检查表(共58页).doc
评论
0/150
提交评论