一单项选择题
1.‘A’的ASCII码为65,n为int型,执行 n =‘A’+‘6’-‘3’;后,n的值为B。
A)‘D’ B) 68 C) 不确定的值 D) 编译出错
2.下列变量名中, A 是合法的。
A)CHINA B) byte-size C) double D) A+a
3.在static int B[3][3]={{1},{3,2},{4,5,6}};中, a[2][2]的值是C。
A)0 B) 5 C)6 D)2
4.若有定义 int a=3, *p=&a ;则 *p的值是 B 。
A)常量a的地址值 B)3
C)变量p的地址值 D)无意义
5.下列关于指针运算的各叙述中,不正确的叙述是 D 。
A)指向同一数组的两个指针,可以进行相等或不等的比较运算;
B)可以用一个空指针赋值给某个指针;
C)指向数组的指针,可以和整数进行加减运算;
D)指向同一数组的两个指针,可以进行有意义的相加运算。
6. 已知x、y、z是int型变量,且x=3,y=4,z=5;则下面各表达式中,值为0的是 D 。
A)‘x’&&‘y’ B) x<=y C)x || y+z && y-z D) !((x A) 0和‘\0’值相等。 B) 0和‘0’值相等。 C)‘\0’和‘0’值相等。 D) 0、‘\0’和‘0’值都不相等。 8. 若有说明语句:char ch=‘\72’;则变量 ch A 。 A)包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法 9.在下列关于C++与C语言关系的各描述中, D是错误的。 A)C语言是C++的一个子集; B)C语言与C++是兼容的; C)C++对C语言进行了一些改进; D) C++和C语言都是面向对象的。 10.在下列关于类概念的各描述中, A 是错误的。 A)类就是C语言中的结构体类型; B)类是具有共同行为的若干对象的统一描述体; C)类是创建对象的样板; D)类是抽象数据类型的实现。 11.在下列各选项中,符合C++语法的赋值表达式是 C 。 A) d=3+=d+6 B) d=6+e=d+8 C) d=e+=f+6 D) d=2+e, d+5=1 12.对 for(表达式1 ;;表达式3 )可理解为 B 。 A)for(表达式1 ;0 ;表达式3 ) B)for(表达式1 ;1 ;表达式3 ) C)for(表达式1 ;表达式1 ;表达式3 ) D)for(表达式1 ;表达式3 ;表达式3 ) 13.若有定义:int a[3][4] ;则对a数组某一元素的正确表示是 C 。 A)a[2][4] B) a[1,3] C)a[1+1][0] D) a(2)(1) 14.若有初始化 static char str[]=“NDJSZX”;则其中的str[]相当于B。 A)str[8] B) str[7] C) str[6] D) str[2] 15.一维整型数组a的正确定义是 D 。 B) int n=10; int a[n]; C) int n; cin>>n; int a[n]; D) const int SIZE=10; int a[SIZE]; 16.采用函数重载的目的在于 D ; A) 实现共享 B)减少空间 C) 提高速度 D)使用方便,提高可读性 17.下列的各类函数中, C 不是类的成员函数。 A)构造函数 B)析构函数 C)友元函数 D)拷贝初始化构造函数 18.若有定义:int x , *p ;则正确的赋值表达式是 D 。 A) *p=*x B) *p=&x C) p=x D) p=&x 19.下列静态数据成员特性中, D 是错误的。 A) 说明静态数据成员时前边要加修饰符static; B) 静态数据成员要在类体外进行初始化; C) 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域分辨符; D) 静态数据成员不是所有对象共有的。 20.以下各选项中,正确的函数声明是 C 。 A)double func( int x , int y ) B)int func( int x ; int y ) ; C)float func( int x , int y ) ; D)char func( int x , y ) ; 二、填空题(每空1分,共20分) 1.一个C++程序的执行从main 函数开始,到 main 函数结束。 2.设有定义 int x=3, y=4 ;则表达式 x*=y+5的值为 27 。若有定义 int a=2 ;则执行完语句 a+=a-=a*a ;之后,a的值为-4 。 3.在C++ 中,只能用于整型操作数的算术运算符是 % ;表达式3 / 2的结果为 1 。4.在C++ 中,变量的三个基本要素是指:变量名、变量类型和变量值。 5.设有定义 int x=3, y=4, t ;则实现x,y两变量值交换的三个语句是:t=x ; x=y ; y=t ;。 6.在C++ 中,有两种给出注释的方法。一种是沿用C语言的注释符,即/* */ 。另一种是从它开始,直到它所在行尾的字符都为注释的注释符,即 // 。 7.在C++ 中,函数在定义时可以预先定义出默认的形参值。默认形参值必须按从右到左的顺序定义。因为在调用时,实参初始化形参是按从左到右的顺序。 8.在C++程序中,对刚创建的对象进行初始化的工作由构造函数来完成;而对象被删除前的一些清理工作则是由析构函数来完成的。 9. Visual C++ 6.0 集成开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以及状态栏等组成。 10.类是逻辑上相关的函数与数据的封装。特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 三、程序阅读题 (每小题5分,共30分) 请在各程序的右侧空白部分,写出对应程序运行后的输出结果。 1.源程序如下: # include char *s =″abcdefg ″ ; cout << s << endl ; s + = 2 ; cout << s << endl ; } 2.源程序如下: # include for( j = 1; j <= N-i ; j + + ) cout << ″ ″; // 双引号内含一空格 for( j = 1; j <= 2*i-1 ; j + + ) cout << ″*″; cout << endl ; } } 3.源程序如下: # include int fun( int a ) ; int a=2, i ; for ( i = 0 ; i < 3 ; i + + ) printf (“ %3d ” , fun( a ) ) ; } int fun( int a ) { int b = 1 ; static int c = 1 ; b = b + 1 ; c = c + 1 ; return ( a + b + c ) ; } 4.源程序如下: # include void main( ) int prime ( int x ) ; static int a [6] = { 5, 9, 6, 11, 13, 8 } ; int i , *p = a , sum = 0 ; for ( i = 0 ; i < 6 ; i + + ) if ( prime ( *( p + i ) ) = = 1 ) { printf ( “ %d \t ” , * (a+i ) ) ; sum + = * ( a + i ) ; } printf ( “\n The Sum = %d \n ”, sum ) ; } int prime ( int x ) { int i ; for ( i = 2 ; i < x ; i + + ) if ( x % i = = 0 ) return ( 0 ) ; return ( 1 ); } 5.源程序如下: # include < iostream.h > void f1( int I ) { I += 10 ; } void f2( int * I ) { *I += 10 ; }kl, void f3( int& n ) { n += 10 ; } void main( ) { int I = 0 ; f1( I ) ; cout <<“I is ”<< I << endl ; f2( &I ) ; cout <<“I is ”<< I << endl ; f3( I ) ; cout <<“I is ”<< I << endl ; } 6.源程序如下: # include class Class { public : Class ( int n = 6 , int m = 7 ) ; ~Class ( ) ; void Set ( int n , int m ) { x = n ; y = m ; } private : int x, y ; } ; Class :: Class( int n, int m) { cout <<“Construct : x= ”<< x <<“, y= ” << y << endl ; } Class :: ~Class( ) { cout <<“Destruct : x=” << x <<“, y= ” << y << endl ; } void main( ) { Array Class a ( 5 ) ; Class b ( 1 , 3 ) ; cout <<“exiting…\n ” ; } 四、程序填空题 (每小题6分,共12分)。 1.本程序用递归的方法计算并输出Fibonacci数列的前20项。Fibonacci数列的规律是:数列前两项均为1,从第三项开始,每一项都是其前两项的和。请补全fac函数。 # include int fac( int n ) ; void main( ) { int i ; for( i = 0 ; i < 20 ; i + + ) cout << fac( i ) << ″″; } int fac( int n ) { // 红色显示的部分为参考答案 int s; if(n==0 || n==1) s=1; else s=fac(n-1)+fac(n-2); return s; } 2.本程序的功能是输出三角形式的九九乘法表。请在横线上填空。 #include void main( ) { int i , j ; for( i=1; i<=___9___ ; i++ ) { for( j=1; j<=___i_____ ; j++) printf ( “ %1d*%1d=%2d ” , j , i , i*j ) ; printf( “ \n ” ) ; } } 五、程序设计题(每小题9分,共18分) 1.设学生的人数已知,他们的考试成绩也已知。请编程补全下面的程序,使该程序能完成:(1)计算出这些成绩的平均成绩并显示出来;(2)计算出这些成绩的最高成绩并显示出来。 # include # define N 8 void main( ) { static float score[N]={ 86, 67, 98, 80, 78, 95, 56, 78 } ; int i; float s, aver, max; s=0; for(i=0; i s=s+score[i]; aver=s/N; cout<<”aver=”< max=score[0]; for(i=1; i if(max cout<<”max=”< } 2.编一程序,其功能是:对键盘输入的年、月、日,计算并输出该日是该年的第几天。 要求:年、月、日分别用year、month、day表示;用函数leap来判别year年是否闰年。 提示:非闰年各月的天数可预先放入一个数组中。 void main( ) { int year , month , day , s , i ; bool leap(int year); static dofm[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 0下标(0月)不用 cin>>year>>month>>day; s=0; for(i=1; i s=s+dofm[i]; if( month>2 && leap(year)==true ) s=s+1; cout< } bool leap(int year) { bool flag=false ; // 先设输入的该年不是闰年 if( (year%400==0) || ( year%4==0 && year%100 !=0 ) ) flag=true ; return flag ; } 南昌大学 2004~2005学年第一学期期末考试试卷 试卷编号: ( B )卷 课程名称:面向对象程序设计适用班级:本科2002级 学院:信息工程学院系别:计算机科学与技术系考试日期:2005.1.10 一、选择题(每题2分,共20分) 1、在下面的函数声明中,存在着语法错误的是______。 A.void BC(int a,int) B.void BD(int,int) C.void BE(int,int=5) D.int BF(int x, int y) 2、假定AB为一个类,则执行“AB a(4),b[3],*p[2];”语句时,自动调用该类构造函数的次 数为_______。 A.3 B.4 C.6 D.9 3、下列各类函数中,()不是类的成员函数 A.构造函数 B.析构函数C.友元函数D.拷贝构造函数 4、关于new运算符的下列描述中,()是错的 A.可以用来动态创建对象和对象数组 B.使用它创建的对象或对象数组可以使用delete运算符删除 C.使用它创建对象时要调用构造函数 D.使用它创建对象数组时必须制定初始值 5、下列类声明程序段正确的是() A. class figure { public: figure(); ~figure(int have_drawn); }; class line { public: int is_on_line(int x, int y); private: int start_x = 0, start_y =0; }; C. class rectangle { public: int draw(); int is_in_rectangle(int x, int y); private: int upper_left_x, upper_left_y, lower_right_x, lower_right_y; }; D. class square { public: void square(int x = 0,int y = 1,int len = 0); ~square(); int draw(); private: int upper_left_x, upper_left_y, side_length; }; 6、分析下列程序段,以下几种说法中正确的是() class A { public: virtual void f(); }; class B { public: virtual void f(); virtual void g(); }; class C: public A,public B { public: void f(); }; 假设有指针pa、pb和pc说明如下: A* pa;B* pb;C* pc;C c;pa = &c; pb = &c; pc = &c; pa->f();pb->f();pc->f(); B.pa->f();pb->f();pc->f();都将实际调用A中的f(); C.pa->f();pb->f();pc->f();分别实际调用A::f()、B::f()、C::f() D.pa->f();pb->f();pc->f();分别实际调用C::f()、B::f()、A::f() 7、下列的()是引用调用 A.形参是指针,实参是地址值 B.形参和实参都是变量 C.形参是数组名,实参是数组名 D.形参是引用,实参是变量 8、下述静态数据成员的特性中,()是错误的 A.说明静态数据成员时前面要加修饰符static B.静态数据成员要在类体外进行初始化 C.引用静态数据成员时,要在静态数据成员名前加〈类名〉和作用域运算符 D.静态数据成员不是所有对象所共用的 9、下列运算符中,()运算符不能重载 A. && B. [ ] C.? : D. = 10、关于动态绑定的下列描述中,()是错误的 A.动态绑定是以虚函数为基础的 B.动态绑定是在运行时确定所调用的函数代码的 C.动态绑定调用函数的操作是指向对象的指针或对象引用 D.动态绑定是在编译时确定操作函数的 二、判断题(每题2分,共20 分) 1、()函数的参数个数和类型都相同,只是返回值类型不同,这不是重载函数 2、()对象数组只能赋初值,而不能被赋值 3、()抽象类是没有说明对象的类 4、()在公有继承中,基类中只有公有成员对派生类对象是可见的 5、()构造函数和析构函数都不能重载 6、()带有虛基类的多层派生类构造函数的成员初始化列表中都要列出虛基类的构造函数,这样将对虛基类的子对象初始化多次 7、()当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A 的所有成员。 8、()构造函数可以被继承,析构函数不能被继承 9、()C++中允许一个基类既是直接基类又是间接基类 10、()一个类属类可以作为一个普通类的派生类,也可以作为其他类属类的基类 三、写出以下各程序的运行结果(每题5分,共20分) 1、 #include class FOO { public: FOO( int i) { cout<<“constr ucting.\n”; pointer = new int; *pointer = i;} FOO(const FOO& other ) { cout<<“copy constructing.\n”; pointer = new int; *pointer = *other.pointer;} ~FOO( ) { cout<<“destructing.\n”; delete pointer;} int get(){ return *pointer;} private: int* pointer; }; void display(FOO obj ) { cout< void main( ) { FOO obj1(15); FOO obj2 = obj1; display(obj2); } 2、#include class Sample { int n; static int sum; public: Sample(int x){n = x;} void add(){sum += n;} void disp(){ cout<<"n="< int Sample::sum=0; void main() { Sample a(2), b(3), c(5); a.add(); a.disp(); b.add(); b.disp(); c.add(); c.disp(); } 3、 #include class A { public: A(){} virtual void f(){cout<<“A::f() called.\n”;} }; class B: public A { public: B(){f();} void g(){f();} }; { public: C(){} virtual void f(){cout<<“C::f() called.\n”;} } void main() { C c; c.g(); } 4、 #include class A { public: A(char *s) { cout << s << endl; } ~A() {} }; class B:public A { public: B(char *sl,char *s2) : A(sl) { cout << s2 << endl; } }; class C:public A { public: C(char *sl,char *s2) : A(sl) { cout << s2 << endl; } }; class D:public B,public C { public: D(char *sl,char *s2,char *s3,char *s4) : B(sl,s2), C(sl,s3) { cout << s4 << endl; } void main () { D d("class A","class B","class C","class D"); } 四、程序分析题(每题5分,共20分) 1、 #include void main() { cout<<“This is a c++ program!\n”; 修改该程序(但不允许对main()作任何修改),使该程序能输出: Hello,everyone! This is a c++ program! Goodbye! 2、请修改以下程序的错误,使得程序可以连续五次输出字符串string #include void main() { char string[30] = “Nanchang University\n”; char* ptr = string; for(int loop = 0; loop<= 4; loop+1) { while (*ptr) { cout<<*ptr; ptr = ptr + 1; } } } 3、 #include class A { public: void set(int a,int b){m = a; n =b;} void show(){cout< protected: int m,n; }; class B:public A { int s; public: void sets(){s = m*n;} void shows(){cout< } void main() { B obj; obj.set(2,3); obj.show(); obj.sets(); obj.shows(); } 和n定义为私有成员,上面的程序能否通过编译,为什么? 4、 # include template Type WD(Type a[], int n) { Type m= a[0] ; for(int i=l;i if(a[i]>m) m = a[i]; return m; } 请说出这是什么函数及它的功能。 五、程序设计题(每题10分,共20分) 1、设计一个平面几何中的位置类position,要求该类提供移动,求到另一点距离(包括到原点 距离),求x坐标,求y坐标,输出坐标值的操作,并演示该类提供的各种操作。 2、下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通 用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体的求面积函数。 class shape { public: virtual float area( )=0 }; float total(shape *s[ ],int n) { float sum=0.0; for(int i=0;i sum += s[i]->area( ); return sum; } 南昌大学 2008~2009学年第二学期期末考试试卷试卷编号: ( C )卷 课程编号: T61050004 课程名称: C++程序设计考试形式:闭卷 一、选择题(每小题2分,共30分) 1、设a=6,执行语句 a+=4; 得到a的值为。 A) 6 B) 12 C) 18 D) 10 2、二维数组int b[][4]={{1,2},{1,2,3},{1,2,3,4}}的元素个数为。 A) 12 B) 3 C) 4 D) 7 3、下列表达式为真的是。 A) 5<3 B) 2*3>=6 C) (7= =9)&&(4>0) D) (10!=2+8)||(5<3) 4、对程序段: if(x>y) z=1; else z=3; 要得到z=3的结果,满足条件的一组数是。 A) x=﹣1,y=﹣2 B) x=1,y=0 C) x=2,y=1 D) x=2,y=3 5、下面的函数声明中, 哪一个是” void BC(int a, int b);”的重载函数? A) int BC(int a, int b) B) void BC(int a, char b) C) float BC(int a, int b, int c = 0) D) void BC(int a, int b=0) 6、声明类test的拷贝构造函数的正确形式是。 A) int test B) void test C) test(void) D) test(test&) 7、C++源程序文件的扩展名为。 A) .CPP B) .C C) .DLL D) .EXE 8、一个const对象。 A) 能访问所有成员函数 B) 只能访问const成员函数 C) 也能访问volatile成员函数 D) 能访问const和volatile成员函数 9、下面关于类的对象性质的描述,正确的是。 A)对象之间不可以相互赋值 B)不可以说明指向对象的指针 C)对象不能用作数组元素 D)一个对象能用作另一个对象的成员 10、以下程序的输出结果是: #include int fun(char *s){ char *p=s; while (*p!='\0') p++; return (p-s); } void main(){ cout< A) 0 B) 1 C) 2 D) 11、在情况下适宜采用 inline 定义内联函数。 A) 函数体含有循环语句 B) 函数体含有递归语句 C) 函数代码少、频繁调用 D) 函数代码多、不常调用 12、.对 do-whie 语言错误的说法是。 A) 可构成多重循环结构 B) 循环次数不可能为 0 C) 循环次数可能为 0 D) 先执行后判断 13、在类中说明的成员可以使用关键字进行修饰。 A) extern B) public C) cpu D) register 14、对于double (*p)[10];的描述,是正确的。 A) p是一个指向数组的指针,所指向的数组是10个double型元素; B)p是一个指向某个数组中第10个元素的指针,该元素是double型变量; C)p[5]表示某个数组的第10个元素的值; D) p是一个具有10个元素的指针数组,每个元素是一个double型指针; 15、下述关于开关语句(switch)的描述中,是正确的。 A) 开关语句中default子句可以没有,也可以有一个; B) 开关语句中每个语句序列中必须有break语句; C) 开关语句中default子句只能放在最后; D) 开关语句中case子句后面的表达式可以是整形表达式。 二、填空题(每空1分,共20分) 1、一个C++程序的开发步骤通常包括编辑、【1】、【2】、运行和调试。 2、在c++中,除具有【3】、【4】语句的函数不能说明为内联函数外,其它函数都可以说明为内联函数。 3、在C++中,函数的参数有两种传递方式,它们是【5】和【6】。 4、C++程序主要有三种基本控制结构,分别是顺序结构、条件分支结构和 【7】。 5、非成员函数应声明为类的【8】__ ____才能访问这个类的private成员。 6、C++中没有输入输出语句,输入输出是通过【9】实现的,写出一条打印整型变量n 的输出语句:【10】。 7、类的具体表现是通过定义【11】 __来操作的。 8、C++中没有字符串类型,字符串是通过【12】来表示的,每一个字符串都有一个结尾字符【13】。 9、类中数据成员的默认访问权限是【14】。 11、已知变量x的值是3,则表达式x+=3,x++,x+2的值是【16】。 12、以下程序实现求1~100之间所有偶数的和。 #include void main( ) { int i ,sum; sum=0; for(i=2; i <= 100 ; 【17】 ) 【18】 ; cout<<”sum=”< } 13、以下程序实现从键盘输入两个整数a和b,输出其中大者的功能(不考虑相等的情况)#include void main( ) { 【19】 ; cin>>a>>b; if( 【20】 ) cout<<”最大值为:”< else cout<<”最大值为:”< } 三、判断题 (每小题1分,共10分) 1、C++中,标识符可以包含下划线。() 2、数组的下标从1开始。() 3、break语句也可以用于if体内,它可退出if语句。() 4、在传值调用中,要求实参和形参的类型完全一致并且个数相等。() 5、私有继承中,基类中所有成员对派生类的对象都是不可见的。() 6、对象数组的元素可以是不同类的对象。() 7、友元函数是类的成员函数,所以可以存取或修改该类中的私有成员。() 8、引用就是某个变量的别名,对引用的操作,实质上就是对被引用的变量的操作。() 9、While循环语句的循环体至少执行一次。() 10、类中所提供的成员函数可以直接访问私有成员。() 四、程序阅读题 (每小题5 分,共20分) 写出下列程序的运行结果。 1、#include void main() { int a,b,c,; c=2,c+=8; a = 10; b=11; a * = 3; b / = 3; c % = 3;