C++程序语言模拟期末考试试卷(一)附答案.pdf
C+模拟试卷(一)一、单项选择题(共20题,每题1分,共20分)1、下列关于C+标识符的命名不合法的是CA.P a d B.n a m e _ l C.A#b c D._ a l 22、若有以下类型标识符定义:()i n t x=2;ch a r w=a;f l o a t y=23.4 5 f;d o u b l e z=4 5.6 7 12;则表达式w*x+y-z的结果类型是DA.f l o a t B.ch a r C.i n t D.d o u b l e3、若有i n t x=10,y=20,z=30;则执行下面语句后,x的值是Bi f (x y)x=y;y=z;A.10 B.20 C.30 D.04、循环语句w h l i e(i n t i=0)i ;的循环次数是AA.0 B.1 C.5 D.无限5、一个函数无返回值时,应选择的说明符是CA.s t a t i c B.e x t e r n C.v o i d D.无说明符6、对重载函数形参的描述中,错误的是DA.参数的个数可能不同B.参数的类型可能不同C.参数的顺序可能不同D.参数的个数、类型、顺序都相同,只是函数的返回值类型不同7、以下能正确定义数组并正确赋初值的语句是DA.i n t N=5,b N N;B.i n t a 2 =l ,3,4 ,5 ;C.i n t c =1,2,3,4 ;D.i n t d 3 2 =1,2,3,4 ;8、下列给字符数组进行的初始化中,不正确的是DA.ch a r s l =a b cd ;B.ch a r s 2 3 =,x,y,0;C.ch a r s 3 =a,x,y,0;D.ch a r s 4 6 =x y z ,m n p ;9、通常的拷贝构造函数的参数是CA.某个对象名B.某个对象成员名C.某个对象的引用D.某个对象的指针名10、关于构造函数特点的描述中,错误的是AA.定义构造函数必须指出类型B.构造函数的名字与该类的类名相同C.一个类中可定义0 至多个构造函数D.构造函数是一种成员函数11、下面程序的运行结果为C#i n cl u d e i n t a d d(i n t a,i n t b);v o i d m a i n()(e x t e r n i n t x,y;co u t a d d (x,y)e n d l;)i n t x=20,y=5;i n t a d d (i n t a,i n t b)(i n t s=a+b;r e t u r n s;)A.20 B.5 C.25 D.编译会提示出错信息12、关于常成员的描述中,错误的是BA.常成员包含常数据成员和常成员函数两种B.常数据成员必须是公有的C.常数据成员要使用构造函数成员初始化列表进行初始化D.常对象只能调用它的常成员函数,不能调用其它的成员函数13、关于友元函数的描述中,错误的是BA.友元函数不是成员函数B.友元函数只能访问类中私有成员C.友元函数破坏隐藏性,尽量少用D.友元函数说明在类体内,使用关键字f r i e n d14、如果有i n t x,*p;f l o a t y,*q;则下面操作正确的是CA.p=x B.p=qC.p=&x D.p=&y15、若有函数说明v o i d f A(i n t m,i n t n);和指针变量的定义v o i d(*p)(i n t,i n t);并且有p=f A则下列操作不正确的是DA.(*p)(3,4);B.p(3,4);C.f A(3,4);D.*p+;16、若数组名作实参而指针变量作形参,函数调用时实参传给形参的是 DA.数组的长度B.数组第一个元素的值C.数组所有元素的值D.数组第一个元素的地址17、对于动态分配内存空间描述正确的是DA.使用n e w 运算符分配的内存空间的长度必需是常量B.d e l e t e 运算符可以释放动态的存储空间和静态的存储空间C.由n e w 分配的内存空间是不连续的D.d e l e t e 运算符只能释放由n e w 分配的动态存储空间18、能够释放对象所占资源的是(A)A.析构函数B.数据成员C.构造函数D.静态成员函数19、虚函数的定义是在基类中进行的,定义时需要冠以关键字CA.st at i c B.fr e n dC.v i r t u al D.p u bl i c20、在 C+中串流类是在头文件st r st r e a.h中定义的,下列不属于串流类的是C)A.st r st r e am B.ost r st r e amC.ofst r e am D.i st r st r e am二、填空题(共 9 题 16空,每空1分,共 16分)1、函数重载时,编译系统会根据形参的类型或形参的个数来区分。2、若有ch ar a 8 0;则 ci n a表示从键盘上读入一个字符串到数组a 中。3、若希望用一个已有对象来构造另一个同类型的对象,可以使用拷贝构造函数来实现。4、静态成员属于类,而不属于任何一个对象,它被同一个类的所有对象共享。5、类的继承方式有p u bl i c(或公有)继承、p r i v at e (或私有)继承和p r ot e ct e d(或保护)继承。6、重载运算符的含义必须清楚,不能有二义性。7、按照联编进行阶段的不同,联编方法可分为两种:动态联编和静态联编。8、当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型以及参数的顺序都必须与基类中的原型完全相同。9、C+的 I/O 是以的形式实现的,每个C+编译系统都带有一个面向对象的输入/输出软件包,这就是字节流I/O 流类库。三、判断题(共 10题,每题1分,共 10分)1、C+语言支持封装性和继承性,不支持多态性。X2、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。)X3、字符串 sdfg h 的长度是5。J4、引用和指针都可作函数参数。J5、友元函数说明在类体内,它是一种成员函数。X6、友元类必须被说明为公有成员。X7、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。J8、析构函数不能被继承。J9、运算符重载以后,其优先级和结合性都不能改变。V10、在 C+中,函数名实际上是一个指针,它指向函数的入口。V四、分析程序,回答所提出的问题(1 6 分)1、t t in c l u d e c l a s s B;class Apublic:A(int i)a=i;friend int F(A&f 1,B&f2);private:int a;);class B(public:B(int i)b=i;friend int F(A&f 1,B&f2);private:int b;);int F(A&fl,B&f2)return(fl.a+f2.b)*(fl.a-f2.b);v o id m a in()A n l(1 0);B n 2 (8);c o u t F (n l,n 2)e n d l;写出程序的运行结果。3 6该程序中共有几个对象,分别属于哪个类?为什么在程序的开头处通过语句c l a s s B;对类B 进行声明?n l 和 n 2 两个对象,n l 属于A 类,n 2 属于B 类 因为B 类的定义在 A 类后,而 A 类中要引用B 类程序中的哪两条语句会分别调用A、B的构造函数?写出这两个构造函数语句 A n l(1 0);和语 B n 2(8);A 类的构造函数:A(in t i)a=i;B 类的构造函数:B(in t i)b=i;函 数 F是什么函数?它的作用是什么?函数F 是友元函数。它的作用是:提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间共享数据的机制。(关键答出共享数据、或答出通过友元可以访问到封装与类A、B中的数据)五、阅读程序,写出运行结果(共2 题,第 1 题 6 分,第 2 题 8 分,共 1 4 分)1、f t in c l u d e in t f u n c(in t a)(in t b=0;s t a t ic in t c=4;b+;c 一;r e t u r n(a+b+c);)v o id m a in()(in t a=2;f o r(in t j=0;j 2;j+)c o u t f u n c(a+j)”)输出结果为:6 62、in c l u d e c l a s s X(p u b l ic:X(in t i)x=i;c o u t w in t:w c a l l e d n,;X(d o u b l e i)x=(in t)i*2;c o u t w d o u b l e:i ,,,c a l l e d n ;X()c o u t w X():”J c a H e d n”;p r iv a t e:in t x;);v o id m a in()(in t a=8;d o u b l e b=l l.0;X x l(55),x 2(a*5);X x 3=X(2*a);X x 4=X(b);输出结果为:in t:55,c a l l e din t:4 0,c a l l e din t:1 6,c a l l e dd o u b l e:1 1,c a l l e d x :2 2,c a l l e d x :1 6,c a l l e d x :4 0,c a l l e d x :50,c a l l e d六、编写程序(共2题,第1题1 0分,第2题1 4分,共2 4分)1、输入一组数据以-1作为结束标志,要求删除其它数据只保留能被2整除的数据并输出结果。#in c l u d e v o id m a in()in t b 50 ,x,n=0;c in x;w hil e(x!=-l)(b +n =x;c in x;f o r(in t i=l,j=0;i=n;i+)if (b i%2-0)b +j=b i;f o r(i=l;i=j;i+)c o u t b i t;c o u t e n d l;)2、定义一个日期类D a t e,包含年、月、日三个数据成员,以及一个求第二天日期的成员函数和输出日期的成员函数。#in c l u d e class Dateprivate:in t year,month,day;public:Date(int y,in t m,in t d)yearly;month=m;day=d;void nextday();void display()c o u t y e a r/,m onthA,/*d a y e n d l;);void Date:nextday()(inttotaldays2 12=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31;day+;int leap=(year%400=0|year%4=0&year%100!=0);if(daytotaldaysleapmonth-1)day=l;month+;if(month12)month=l;year+;v o id m a in()in t d,m,y;c o u t 请输入年、月、日:n;c i n y m d;D a t e d l (y,m,d);c o u t 今天是:;d l.d is p l a y ();d l.n e x t d a y ();c o u t 明天是:”;d l.d is p l a y ();模拟试卷(一)答案一、单项选择题1、C 2、D 3、B 4、A 5、C 6、1 1、C 1 2、B 1 3、B 1 4、C 1 5、二、填空题1、形参的类型形参的个数2、字符串3、拷贝构造函数4、类任何一个对象5、p u b l ic (或公有)p r iv a t e6、二义性7、动态联编静态联编8、函数名参数个数9、字节流I/O 流类库三、判断题D 7、D 8、D 9、C 1 0、AD 1 6、D 1 7、D 1 8、A 1 9、C 2 0、C(或私有)p r o t e c t e d (或保护)1、X 2、X 3、J 4、J 5、X 6、X 7、J 8、J 9、V 1 0 V四、分析程序,回答所提出的问题(平分标准:每问4 分,共 1 6 分)3 6 n l 和 n 2 两个对象,n l 属于A 类,n 2 属于B 类。因为B 类的定义在A 类后,而 A 类中要引用B 类。语句A n l(1 0);和语B n 2(8);A 类的构造函数:A(in t i)a=i;B 类的构造函数:B(in t i)b=i;函数F是友元函数。它的作用是:提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间共享数据的机制。(关键答出共享数据、或答出通过友元可以访问到封装与类A、B中的数据)五、阅读程序,写出运行结果1、输出结果为:6 62、输出结果为:in t:55,c a l l e din t:4 0,c a l l e din t:1 6,c a l l e dd o u b l e:1 1,c a l l e d x :2 2,c a l l e dx :1 6,c a l l e dx:4 0,c a l l e d x :50,c a l l e d六、编写程序1、输入一组数据以-1作为结束标志,要求删除其它数据只保留能被2整除的数据,并输出结果。#in c l u d e v o id m a in ()(in t b 50 ,x,n=0;c in x;w hil e(x!=-l)b +n =x;c in x;f o r (in t i=l,j=0;i=n;i+)if(b i%2=0)b +j=b i;f o r(i=l;i=j;i+)c o u t b i t;c o u t e n d l;)2、定义一个日期类D a t e,包含年、月、日三个数据成员,以及一个求第二天日期的成员函数和输出日期的成员函数。t t in c l u d e c l a s s D a t ep r iv a t e:in t y e a r,m o n t h,d a y;p u b l ic:D a t e (in t y,in t m,in t d)(y e a r=y;m o n t h=m;d a y=d;)v o id n e x t d a y ();v o id d is p l a y()(c o u t y e a r ,/,m o n t h,/,d a y totaldaysleapmonth-1)(day=l;month+;if(month12)(month=l;year+;)void main()(int d,m,y;coutymd;Date dl(y,m,d);cout今天是:;dl.display();dl.nextday();cout明天是:”;dl.display();