国家二级C++机试(运算符重载、模板和C++流)模拟试卷7
2020年全国计算机等级考试二级C语言上机模拟训练题库(共50套)

2020 年全国计算机等级考试二级 C 语言上机模拟训练题库(共50 套)第一套1 程序填空给定程序中,函数fun 的功能是:计算下式s=1/22+3/42+5/62+(2 ×n-1)/(2 ×n) 2 2 -3 并把计算结果作直到︱( 2×n-1 )/ (2×n)︱《 10为函数值返回。
例如,若形参 e 的值 le -3,函数值的返回值为 2.735678。
第 1 处 i=0;第 2 处 i++;第 3 处 x=(2.0*i-1) / ((2.0*i)* (2.0*i));2程序修改给定程序 MODI1.C中函数 fun 的功能是:将 s 所指字符串的正序和反序进行连接,形成一个新串放在 t 所指的数组中。
/**found**/void fun(char*s, char *t)/**found**/t[2*d]= 0’;3程序设计函数 fun 的功能是:将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在 t 所指的数组中。
viod fun(char*s, chat t[]){int i,j=0;for(i=1;i<strlen(s);i+=2)if(s[i]%2)t[j++]=s[i];t[j]=0;}第二套1程序填空给定程序中,函数 fun 的功能是:在 3× 4 的矩阵中找出在行上最大,列上最小的那个元素,若没有符合条件的元素则输出相应信息。
第 1 处 max=a[i][j];c=j;}第 2 处 find=0;第 3 处 i++;2 程序修改给定程序 MODI1.C中函数 fun 的功能是:根据整形形参 m 的值:计算如下公式的值 ?例如 : 若 m中的值为 5,则应输出: 0.536389 。
/**found**/for(i=2;i<=m;i++)/**found**/y-=1.0/(i*i);3 程序设计m个人的成绩存放在 score 数组中,请编写函数 fun ,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below 所指的数组中。
国家二级C语言机试(操作题)模拟试卷7(题后含答案及解析)

国家二级C语言机试(操作题)模拟试卷7(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.给定程序中,函数fun的功能是:将形参S所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。
例如,形参s 所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <string.h>#include <ctype.h>int fun(char *s){ int sum=0;while(*s) {/**********found**********/if(isdigit(*s))sum+=*s____1____;/**********found**********/____2____;}/**********found**********/return____3____;}main( ){ char s[81];int n;printf(“\nEnter a string:\n\n”);gets(s);n=fun(s);printf(“\nThe result is:%din\n”,n);}正确答案:(1)48或’0’(2)s++(3)sum解析:第一空:“if(isdigit(*s)) sum+=*s-___1___;”如果木s是数字字符的话,sum累加其对应的数字的和,第一空处是将*s转化为对应的数字,由审题分析可知,第一空为“‘0’”或“48”,’0’的ASCII码值为48。
第二空:“while(*s)”循环的终止条件是达到s字符串的结束,因此在循环体内s应该不断往字符串尾移动,故第二空处应为“s++”。
国家二级C语言机试(选择题)模拟试卷107(题后含答案及解析)

国家二级C语言机试(选择题)模拟试卷107(题后含答案及解析) 题型有:1. 选择题选择题1.下列选项中不属于结构化程序设计原则的是( )。
A.可封装B.自顶向下C.模块化D.逐步求精正确答案:A解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。
知识模块:选择题2.有两个关系R和T如下:则由关系R得到关系T的操作是( )。
A.投影B.交C.选择D.并正确答案:A解析:从表图中可以看出,关系T是从关系R中选取一部分字段(A和C)及其值构成新的关系,是一种纵向操作产生新列,属于投影,正确选项为A。
知识模块:选择题3.有以下程序:#include <stdio.h>main( ){printf(″%d\n”,NULL);}程序运行后的输出结果是( )。
A.1B.变量无定义,输出不确定C.—1D.0正确答案:D解析:NULL为一个符号常量,对应的ASCⅡ码值为0,答案选D。
知识模块:选择题4.有以下程序:#include<stdio.h>#define f(x)x*x*xmain( ){int a=3,s,t;s=f(a+1);t=f((a+1));printf(″%d,%d\n″,s,t);}程序运行后的输出结果是( )。
A.10,64B.10,10D.64,64正确答案:A解析:C语言中带参数的宏可以理解为用参数直接替代定义式中的变量,而不经过任何修改。
所以s=f(a+1)=a+1*a+1*a+1,t=f((a+1))=(a+1)*(a+1)*(a+1),所以有无括号的运算结果是不同的。
知识模块:选择题5.有以下程序:#include<stdio.h>int f(int x,int y){return((y—x) * x);}void main( ){int a=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf(″%d\n″,d);}程序运行后的输出结果是( )。
国家二级C语言机试C语言基础知识模拟试卷7_真题-无答案

国家二级C语言机试(C语言基础知识)模拟试卷7(总分60,考试时间90分钟)1. 选择题1. DOS文件系统的组织结构属于A. 星形结构B. 网星结构C. 环形结构D. 树形结构2. 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是A. C语言程序仅可以编译执行B. C语言程序仅可以解释执行C. C语言程序既可以编译执行又可以解释执行D. 以上说法都不对3. 以下叙述中错误的是A. C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件B. 用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中C. C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令D. C语言源程序经编译后生成后缀为.obj的目标程序4. 下列叙述中错误的是A. C程序可以由多个程序文件组成B. 一个C语言程序只能实现一种算法C. C程序可以由一个或多个函数组成D. 一个C函数可以单独作为一个C程序文件存在5. 以下叙述中错误的是A. 结构化程序由顺序、分支、循环三种基本结构组成B. C语言是一种结构化程序设计语言C. 使用三种基本结构构成的程序只能解决简单问题D. 结构化程序设计提倡模块化的设计方法6. 以下叙述中错误的是A. 算法正确的程序最终一定会结束B. 算法正确的程序可以有零个输入C. 算法正确的程序可以有零个输出D. 算法正确的程序对于相同的输入一定有相同的结果7. 以下选项中关于程序模块化的叙述错误的是A. 把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块B. 可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序C. 把程序分成若干相对独立的模块,可便于编码和调试D. 可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序8. C语言源程序名的后缀是A. .exeB. .objC. .cD. .cp9. 关于算法,以下叙述中错误的是A. 同一个算法对于相同的输入必能得出相同的结果B. 一个算法对于某个输入的循环次数是可以事先估计出来的C. 某个算法可能会没有输入D. 任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕10. 以下不能用于描述算法的是A. 程序语句B. E-R图C. 伪代码和流程图D. 文字叙述11. 以下叙述中正确的是A. 程序的算法只能使用流程图来描述B. N—S流程图只能描述简单的顺序结构的程序C. 计算机可以直接处理C语言程序,不必进行任何转换D. 结构化程序的三种基本结构是循环结构、选择结构、顺序结构12. 以下叙述中正确的是A. 在C语言程序设计中,所有函数必须保存在一个源文件中B. 在算法设计时,可以把复杂任务分解成一些简单的子任务C. 只要包含了三种基本结构的算法就是结构化程序D. 结构化程序必须包含所有的二三种基本结构,缺一不可13. 以下叙述中正确的是A. 每个后缀为.c的C语言源程序都应该包含一个main函数B. 在C语言程序中,main函数必须放在其他函数的最前面C. 每个后缀为.c的C语言源程序都可以单独进行编译D. 在C语言程序中,只有main函数才可单独进行编译14. 有以下程序,在VC6平台上编译运行,程序运行后的输出结果是#include<stdio.h>main(){int s,t,A=10;double B=6:s=sizeof(A);t=sizeof(B);printf("%d,%d\n",s,t);}A. 4,4B. 2,4C. 4,8D. 10,615. 对于一个正常运行的C程序,以下叙述中正确的是A. 程序的执行总是从程序的第一个函数开始,在main函数结束B. 程序的执行总是从main函数开始,在程序的最后一个函数中结束C. 程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束D. 程序的执行总是从main函数开始16. 计算机能直接执行的程序是A. 目标程序B. 可执行程序C. 汇编程序D. 源程序17. 以下叙述中正确的是A. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行B. C语言程序将从源程序中第一个函数开始执行C. main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等D. C语言规定必须用main作为主函数名,程序将从此开始执行18. 以下叙述中错误的是A. C程序在运行过程中所有计算都以二进制方式进行B. 所有C程序都需要编译链接无误后才能运行C. C程序在运行过程中所有计算都以十进制方式进行D. C程序中字符变量存放的是字符的ASCII值19. 下列叙述中正确的是A. 在C程序中main函数的位置是固定的B. C程序中所有函数之间都可以相互调用C. 每个C程序文件中都必须要有一个main函数D. 在C程序的函数中不能定义另一个函数20. 以下叙述正确的是A. C语言程序是由过程和函数组成的B. C语言函数可以嵌套调用,例如:fun(fun(x))C. C语言函数不可以单独编译D. C语言中除了main函数,其他函数不可作为单独文件形式存在21. C语言程序的模块化通过以下哪个选项来实现A. 变量B. 程序行C. 函数D. 语句22. 以下叙述中正确的是A. 程序的主函数名除main外,也可以使用Main或mainB. 在C程序中,模块化主要是通过函数来实现的C. 程序可以包含多个主函数,但总是从第一个主函数处开始执行D. 书写源程序时,必须注意缩进格式,否则程序会有编译错误23. 以下叙述中正确的是A. C语言程序总是从最前面的函数开始执行B. C语言程序总是从main函数开始执行C. C语言程序中main函数必须放在程序的开始位置D. C语言程序所调用的函数必须放在main函数的前面24. C语言主要是借助以下哪种手段来实现程序模块化A. 定义常量和外部变量B. 使用丰富的数据类型C. 使用三种基本结构语句D. 定义函数25. 以下四个程序中,完全正确的是A. #include<stdio.h>main();{/*/1Programming /*/printf("programming!\n");}B. #include<stdio.h>main();{/*programming*/printf("programming!\n");}C. #include<stdio.h>main() {/*/*programming*/*/printf("programming!\n");}D. include<stdio.h>main() {/*programming*/printf("programming!\n");}26. 以下关手结构化程序设计的叙述中正确的是A. 结构化程序使用goto语句会很便捷B. 一个结构化程序必须同时由顺序、分支、循环三种结构组成C. 由三种基本结构构成的程序只能解决小规模的问题D. 在C语言中,程序的模块化是利用函数实现的27. 以下叙述中正确的是A. C程序中的每一行只能写一条语句B. 简单C语句必须以分号结束C. C语言程序中的注释必须与语句写在同一行D. C语句必须在一行内写完28. 以下叙述中正确的是A. C程序书写格式严格,要求一行内只能写一个语句B. C程序书写格式自由,一个语句可以写在多行上C. C程序中的注释只能出现在程序的开始位置和语句的后面D. 用C语言编写的程序只能放在一个程序文件中29. 以下关于C语言的叙述中正确的是A. C语言中的变量可以在使用之前的任何位置进行定义B. 在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致C. C语言的数值常量中夹带空格不影响常量值的正确表示D. C语言中的注释不可以夹在变量名或关键字的中间30. 有以下程序#include<stdio.h>main(){int a=0,b=0;/*给a赋值a=10;b=20;给b赋值*/printf("a+b=%d\n",a+b);/*输出计算结果*/}程序运行后的输出结果是A. a+b=30B. a+b=10C. 出错D. a+b=0。
全国计算机二级《C语言》考试题库与答案

全国计算机二级《C语言》考试题库与答案全国计算机二级《C语言》考试题库与答案在学习、工作中,我们都离不开试题,借助试题可以检验考试者是否已经具备获得某种资格的基本能力。
什么样的试题才能有效帮助到我们呢?以下是店铺为大家收集的全国计算机二级《C语言》考试题库与答案,欢迎大家分享。
全国计算机二级《C语言》考试题库与答案篇1(1)下列关于栈叙述正确的是( )。
A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除(2)下列叙述中正确的是( )。
A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D.以上说法都不正确某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( )。
A.3B.4C.6D.7软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是( ):A.学生成绩管理系统B.c语言编译程序C.UNIX操作系统D.数据库管理系统(5)结构化程序所要求的基本结构不包括( )。
A.顺序结构B.GOT0跳转C.选择(分支)结构D.重复(循环)结构(6)下面描述中错误的是( )。
A.系统总体结构图支持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD图是软件详细设计的表示工具(7)负责数据库中查询操作的数据库语言是( )。
A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言一个教师可讲授多门课程,一门课程可由多个教师讲授。
则实体教师和课程间的联系是( )。
A.1:1联系B.1:m联系C.m:1联系D.m:n联系(9)已知大写字母A的ASCIl码值是65,小写字母a的ASCIl码值是97。
以下不能将变量C中的大写字母转换为对应小写字母的语句是( )。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷6

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.若在表达式y/x中,''/''是作为成员函数重载的运算符,则该表达式还可以表示为( )。
(分数:2.00)A.x.operator/(y)B.operator/(x,y)C.y.operator/(x) √D.operator/(y,x)解析:解析:运算符函数的函数名是由运算符前加关键字operator构成的。
所以当“/”作为运算符重载后,其格式为operator/。
所以其作为成员函数调用时的格式为y.operator/(x)。
2.有类定义如下: class Type{ public: Type(int i=0); Type operator-(int); friend Type operator+(Type,Type); private: int val; };若有对象定义Type c1;则下列语句序列中,错误的是( )。
(分数:2.00)A.Type(3)+c1;B.e1+Type(3);C.3-c1:√D.c1-3;解析:解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。
3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。
(分数:2.00)A.Data+(Data);B.Data operator+{Data};√C.Data+operator{Data};D.operator+(Data,Data);解析:解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。
运算符函数的函数名是由运算符前加关键字operator构成的。
4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷1

国家二级C++机试(运算符重载、模板和C++流)模拟试卷1(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.运算符重载是对已有的运算符赋予多重含义,因此( )。
(分数:2.00)A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载C++中已经有的运算符,不能定义新运算符√D.C++中已经有的所有运算符都可以重载解析:解析:此题考查的是运算符重载。
运算符重载是针对C++语言原有的运算符进行的,并不能创造新的运算符。
2.关于运算符重载,下列表述中正确的是( )。
(分数:2.00)A.C++已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型√D.可以通过运算符重载来创建C++中原来没有的运算符解析:解析:此题考查的是运算符重载的概念。
C++语言规定,“.”、''*''、''->*''、“::”和“?:”这五个运算符不能被重载,故选项A错误;运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项B说法是错误的:运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项D错误。
3.通过运算符重载,可以改变运算符原有的( )。
(分数:2.00)A.操作数类型√B.操作数个数C.优先级D.结合性解析:解析:此题考查的是运算符重载。
运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。
故本题选项A正确。
4.下列运算符中,不能被重载的是( )。
(分数:2.00)A.&&B.!=C..√D.++解析:解析:此题考查的是运算符重载。
在C++中,只有.、*、->*、::、?:这五个运算符不能重载。
5.下列关于运算符重载的描述中,正确的是( )。
国家二级C语言机试(操作题)模拟试卷781(题后含答案及解析)

国家二级C语言机试(操作题)模拟试卷781(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.使用VC++2010打开考生文件夹下blank1中的解决方案。
此解决方案的项目中包含一个源程序文件blank1.c。
在此程序中,通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。
函数fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。
请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!试题程序:#inclucle<stdio.h >#include<string.h>struct student{long srlo;char name[10];float score[3];};void fun(struct student a[],int n){/*********found*********/【1】t;int i,j;/*********found*********/for(i=0;i<【2】;i++)for(j=i+1;j<n;j++)/*********found*********/if(strcmp(【3】)>0){t=a[i];a[i]=a[j];a[j]=t;}}main( ){struct students[4]={{10001,”ZhangSan”,95,80,88},{10002,”LiSi”,85,70,78},{10003,”CaoKai”,75,60,88},{10004,”FangFang”,90,82,87}};int i,j;printf(“\n\nThe original data:\n\n”);for(j=0;j<4;j++){printf(“\nNo:%ld Name:%﹣8s Scores:”,s[j].sno,s[j].name);for(i=0;i<3;i++)printf(“%6.2f”,s[j].score[i]);printf(“\n”);}fun(s,4);printf(“\n\nThe data after sorting:\n\n”);for(j=0;j<4;j++){printf(“\nNo:%ld Name:%一8sScores:”,s[j].sno,s[j].name);for(i=0;i<3;i++)printf(“%6.2f”,s[j].score[i]);printf(“\n”);}}正确答案:(1)struct student(2)n﹣1(3)a[i].name,a[j].name解析:填空1:变量t是中间变量,用来存放结构体数组中的元素,因此应定义为结构体类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷7(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.下列关于函数模板的描述中,正确的是( )。
(分数:2.00)A.函数模板是一个实例函数B.使用函数模板定义的函数没有返回类型C.函数模板的类型参数与函数的参数相同D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数√解析:解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。
数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。
2.有如下函数模板定义: template<typename T1,Typename T2> T1 Fun(T2 n){ return n*5.0;} 若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。
(分数:2.00)A.FUN(9)B.FUN<9>C.FUN<double>[9] √D.FUN<9>(double)解析:解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。
3.下列关于模板的描述中,错误的是( )。
(分数:2.00)A.类模板的成员函数都是模板函数B.函数模板是一种参数化类型的函数C.满足一定条件时可以省略模板实参D.模板形参只能由关键字typename声明√解析:解析:同一模板的声明和定义中,模板形参的名字不必相同。
每个模板类型形参前面必须带上关键字typename/class,每个非类型形参前面必须带上类型名字。
4.已知主函数中通过如下语句序列实现对函数模板swap的调用: int a[10],b[10]; swap(a,b,10);下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。
(分数:2.00)A.template<typename T> void swap(T a[],T b[],int size);B.template<typename T> void swap(int size,T a[],T b[]);√C.template<typename T1,typename T2> void swap(T1 a[],T2 b[],int size};D.template<class T1,class T2> void swap(T1 a[],T2 b[],int size);解析:解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。
5.在定义函数模板或类模板时,开头的保留字是( )。
(分数:2.00)A.typenameB.template √C.classD.typedef解析:解析:定义函数模板或类模板时,开头的保留字是template。
6.若有函数模板mySwap和一些变量定义如下:( )。
template<class T>void mySwap(T x,T y);double d1,d2;int i1,i2;下列对mySwap的调用中,错误的是(分数:2.00)A.mySwap(i1,i2)B.mySwap(d1,d2)C.mySwap(i1,d 1) √D.mySwap<int>(i2,d2)解析:解析:按照函数模板mySwap的定义,变量x和y应该是同一类型,而在选项C的定义中变量i1和d1属于不同的数据类型。
7.模板对类型的参数化提供了很好的支持,因此( )。
(分数:2.00)A.类模板的主要作用是生成抽象类B.类模板实例化时,编译器将根据给出的模板实参生成一个类√C.在类模板中的数据成员都具有同样类型D.类模板中的成员函数都没有返回值解析:解析:此题考查了类模板的概念。
在定义对象的过程中,系统会自动地根据需要生成相应的类定义,这种依据类模板生成具体类的过程称为类模板的实例化。
8.关于关键字class和typename,下列表述中正确的是( )。
(分数:2.00)A.程序中的typename都可以替换为class √B.程序中的class都可以替换为typenameC.在模板形参表中只能用typename来声明参数的类型D.在模板形参表中只能用class或typename来声明参数的类型解析:解析:此题考查的是class和typename两个关键字。
关键字class除了能用来定义类以外还能用来声明模板的虚拟类型参数。
在用作声明虚拟类型参数时typename与class可以互换,但不能使用typename 来定义类;在模板形参表中除了可以用typename和Class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项C错误。
9.下列关于类模板的模板参数的叙述中,错误的是( )。
(分数:2.00)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量的类型√解析:解析:此题考查的是模板参数。
模板参数是一种参数化的数据模型,在模板类或模板函数中,只要使用数据类型的地方都能使用模板参数来代表一种未知的数据类型。
所以,模板参数可以作为成员函数的局部变量类型。
10.下列模板声明中,有语法错误的是( )。
(分数:2.00)A.template<typename T>T fun(T x){return x;}B.template<typename T>T fun(T x,int n){return x*n;}C.template<class T>T fun(T*p){return*p;}D.template<class T>T classA{T n;};√解析:解析:第四个选项是定义类模板的,但是class前面的T是多余的。
对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。
11.在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是( )。
(分数:2.00)A.( )B.[ ]C.<>√D.{ )解析:解析:声明一个类模板的格式是:template<<模板形参声明>><类声明>。
12.有如下模板声明: template<typename T 1,typename T2>ClaSS A;下列声明中,与上述声明不等价的是( )。
(分数:2.00)A.template<class T1,class T2>class A;B.template<class T1,typename T2>class A;C.template<typename T1,class T2>class A;D.template<typename T1,T2>class A;√解析:解析:在类模板中,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。
声明一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。
对于本题来说,模板形参表中包括类型T1和T2两个类型参数,而在选项D)中T1说明其类型,而T2没有说明其类型,与题干中的模板说明不一致。
13.若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列 MyTemp<double>p2; MyTemp <long>p3[2];编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是( )。
(分数:2.00)A.1B.2C.3 √D.0解析:解析:p2是一个double型的MyTemp,p3[2]是一个long.型MyTemp数组,其中包括两个元素。
所以共有3个MyTemp的实例。
14.下列关于模板的叙述中,错误的是( )。
(分数:2.00)A.调用模板函数时,有时可以省略模板实参B.函数模板的每个实例就是一个函数定义C.类模板的每个实例就是一个类定义D.类模板的实例是一个类对象√解析:解析:在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。
类模板实例化所生成的每一个类定义就是相应类模板的一个实例。
15.下列类模板的定义中语法格式错误的是( )。
(分数:2.00)A.template<class T>class Buffer{/*…*/};B.template<typename T>class Buffer{/*…*/};C.template<class T1,class T2>class Buffer{/*…*/};D.template<T>class Buffer{/*…*/}; √解析:解析:定义类模板的一般形式是: template<类型名参数名1,类型名参数名2,…> class类名{类声明体};模板的类型参数由关键字class或关键字typename及其后的标识符构成。
在模板参数表中关键字class和typename的意义相同。
16.下列关于C++流的说明中,正确的是( )。
(分数:2.00)A.与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现√B.从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作C.cin是一个预定义的输入流类D.输出流有一个名为open的成员函数,其作用是生成一个新的流对象解析:解析:此题考查的是C++流的概念。
从输入流中提取数据称为提取操作,把表达式插入到输出流中的操作称为插入操作,故选项B错误;cin是一个预定义的输入流对象而不是流类,故选项C错误;输入输出流中没有open成员函数,故选项D错误。
17.在语句cin>>data;中,cin是( )。
(分数:2.00)A.C++的关键字B.类名C.对象名√D.函数名解析:解析:此题考查的是预定义流对象。
C++有4个预定义的流对象:cin一标准输入;cout-一标准输出;cerr一标准出错信息输出;clog一带缓冲的标准出错信息输出。
18.如果利用C++流进行输入输出,下面的叙述中正确的是( )。
(分数:2.00)A.只能借助于流对象进行输入输出√B.只能进行格式化输入输出C.只能借助于cin和tout进行输入输出D.只能使用运算符>>和<<进行输入输出解析:解析:此题考查的知识点是C++流。
利用C++流既可以进行有格式输入输出,也可以进行无格式输入输出,所以选项B错误;C++的4个预定义的流对象为:cin一标准输入,cout一标准输出,cerr-一标准出错信息输出,clog一带缓冲的标准出错信息输出,选项C错误;C++流除了可以使用提取“>>”插入“<<”进行输入输出外,还可以通过流对象的一些成员函数进行输入输出,故选项D错误。