




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中山大学计算机科学系2006级 计算机科学与技术专业、网络工程专业、信息平安专业ABCDE班程序设计 A卷学号 _ 姓名 _ 成绩_(试卷共6页,答案全写在答题纸上,交卷时连试卷一同交回) 考试形式:闭卷任课老师:林瑛、肖菁、杨永红2007-6?中山大学授予学士学位工作细那么?第六条:“考试作弊不授予学士学位。 一、 单项选择(每题1分,共15分)1. C+语言新引入了在一种C语言中没有的参数传递方式是:A) 按指针调用B) 按名调用C) 按值调用D) 按引用调用2. 在C+语言中,以下哪个表达式采用了八进制表示整型常量:A) k=0123;B) k=123;C) k=x23; D) k=0x
2、123;3. 下面对结构或类中成员的访问不正确的选项是:B) p->salary (p为指向类对象的指针)(p为指向类对象的指针)C) (*p).salaryD) Worker.salary (p为指向类对象的指针)(Worker是类类型的对象)4. 类A中有一成员函数说明如下void A:Set(A & a); 其中A & a的含义是:A) 指向类A的指针为aB) 变量A与a按位与作为函数Set()的参数C) 将a的地址值赋给变量SetD) a是类A的对象引用,用作函数Set()的形参5. 假定一个类有两个数据成员a和b,其构造函数为: A(int aa=1,int b
3、b=0) a = aa; b = bb; 那么执行语句A x(4); 后,x.a和x.b值分别是: A) 1和0B) 1和4C) 4和0D) 4和16. 可以用友元方式重载的运算符是:A) + : <<B) = >> /C) + & D) + | !7. 设有如下声明的类:class FOO private: static float std; float max, min; ;那么表达式sizeof(FOO)的值为:A) 4B) 8C) 12D) 168. 假设在一个类中用成员函数重载了某种二元运算符,而obj1和obj2都是该类的对象,那么表达式obj1ob
4、j2 被C+编译器解释为:A) obj1.operator(obj2)B) obj2.operator(obj1)C) operator(obj1,obj2)D) operator(obj2,obj1)9. 以下函数中,不能重载的是:A) 类的成员函数B) 非成员函数C) 析构函数D) 构造函数10. 关于构造函数不正确的说法是:A) 构造函数可以有返回值B) 一个类可以有多个构造函数C) 构造函数名与类名相同D) 构造函数初始化时为对象开辟一个内存11. 假定AB为一个类,那么执行语句 AB a(2), *p3, b4;时,自动调用该类构造函数的次数为: A) 3B) 5C) 6D) 9指针
5、不调用构造函数12. template<class T>class APPLE;定义类模板APPLE的成员函数的正确格式是:A) T APPLE<T>:Push(T obj) B) T APPLE:Push(T obj) C) template<class T>D) template<class T> T APPLE:Push(T obj) T APPLE<T>:Push(T obj) 13. 假设程序中已有#include <string.h>,从而可用字符串的库函数。以下声明了一个字符串name,并设置它的值为&quo
6、t;Computer",然后输出该字符串。在以下用法中,哪个有可能引起语法错误或逻辑错误?A) char* name = "Computer"B) char* name; strcpy(name, "Computer");C) char name9 = 'C', 'o', 'm', 'p', 'u', 't', 'e', 'r', '0'D) char name = "Computer&quo
7、t;14. 如果类A被说明成类B的友元,那么:A) 类A的成员函数不得访问类B的成员B) 类A的成员即类B的成员C) 类B不一定是类A的友元D) 类B的成员即类A的成员15. 关于虚基类的描述,正确的选项是:A) 虚基类的唯一副本只被初始化一次B) 无论是虚基类还是普通基类,其构造函数的调用的次序取决于基类在声明时的次序C) 类中对象成员的初始化先于虚基类副本的初始化D) 虚基类的析构函数最先调用二、 程序改错:指出以下题目所示程序段的语法错误(请通过行号来指出错误位置),说明其错误原因并改正之!(8个错误,每个错2.5分:指出错误位置0.5分;错误原因1分;改正1分,共20分)1. 以下程序
8、段包含1个错误: (1) template <class ITEM, class LINK>未使用(2) int compare(ITEM source, ITEM target)(3) if (source > target) return 1;(4) else return 0;(5) 2. 以下程序包含了2个错误,请在不修改主函数假设主函数完全正确的前提下改正之:(1) #include <iostream.h>(2) template <class TYPE>(3) class BASE (4) public:void show(TYPE ob
9、j)(5) cout << obj << "n"(6) void test()(7) cout << "Testingn"(8) ;(9) template <class TYPE, class TYPE1>(10) class DERIVED: BASE<TYPE1> (11) public:void show(TYPE obj1, TYPE1 obj2)(12) cout << obj1 << "n"(13) BASE:show(obj2);得在B
10、ASE后面加上<TYPE1>(14) (15) ;(16) void main()(17) DERIVED<char*, double> obj;(18) obj.test();(不能在类外访问,因为继承默认是private)(19) 3. 假设POINT类的定义完全正确即不允许改变POINT类的定义,以下程序有1个错误:(1) class POINT (2) public:POINT(int x1, int y1): x(x1), y(y1) (3) private:int x, y;(4) ;(5) class LINE (6) public:LINE(int x0
11、, int y0, int x1, int y1)(7) start.x = x0;start.y = y0;(私有成员,不能访问)(8) end.x = x1;end.y = y1; LINE(int x0, int y0, int x1, int y1):start(x0,y0),end(x1,y1)(9) (10) private:POINT start, end;(11) ;(12) void main()(13) LINE line(0, 0, 50, 50);(14) 4. 以下程序包含了4个错误,请在不修改主函数假设主函数完全正确以及不添加任何函数的前提下改正之:(1)class
12、 MyClass(2)public: (3)MyClass(int ini) member = ini; (缺少缺省构造函数)(4)int GetMember() const return member; (5) void SetMember(int m) member = m; (6) void MyClass() 不可有返回值(7) private:(8) int member = 0;(9)少了分号(10)void main()(11)MyClass obj1;(12)MyClass obj2(3);(13)obj1.SetMember(10); (14)三、 程序输出(共30分):写出
13、以下程序的输出结果1. (4.5分)#include <iostream.h>template<class TYPE>TYPE max(TYPE k, TYPE t) cout<< Calling generic version of max( << k << , << t << "),the max is :" ; return (k>t?k:t); int max(int k, int t) cout<< Calling special version of max(
14、<< k << , << t << "),the max is :" ; return (k>t?k:t); void main()cout<<max(10, 20)<<"n" cout<<max(10.5, 20.7)<<"n" cout<<max('B', 'A')<<"n"还算简单2. (6分)#include<iostream.h>clas
15、s BASEA public:BASEA( )cout<<This is BASEA class!n;class BASEB public:BASEB( )cout<<This is BASEB class!n;class DERIVEA : public BASEB, virtual public BASEApublic:DERIVEA( )cout<<This is DERIVEA class!n;class DERIVEB : public BASEB, virtual public BASEApublic:DERIVEB( )cout<<
16、This is DERIVEB class!n;class TOPDERIV : public DERIVEA, virtual public DERIVEBpublic:TOPDERIV( )cout<<This is TOPDERIV class!n;void main( )TOPDERIV topobj;还算简单3. (6分)#include<iostream.h>class BASEXprotected:int x, y;public:BASEX(int i, int j) x=i; y=j; void print( )cout<<"X=&
17、quot;<<x<<"t Y="<<y<<endl;class BASEY : public BASEXint k;public:BASEY(int i, int j) : BASEX(i, j)k=i*j;void print( )cout<<"X="<<x<<"t Y="<<y<<"t K="<<k<<endl;class BASEZ : BASEYpublic:BASEZ(int
18、 i, int j) : BASEY(i, j) void printA( )cout<<"X="<<x<<"t Y="<<y<<endl;void printB( )BASEY:print( );void main( )BASEZ obj1(10,20);BASEY obj2(23,45);obj2.print( );obj1.printB( );obj1.printA( );(还算简单)4. (13.5分)#include <iostream.h>#include <str
19、ing.h>const int CODELEN = 20;class DEPART public:DEPART(char *depCode = "Math") strcpy(code, depCode);cout << "Constructing depart: " << code << ".n"DEPART(const DEPART& other) strcpy(code, other.code);cout << "Copy constructing depar
20、t: " << code << ".n"DEPART() cout << "Destructing depart: " << code << ".n"void operator=(const DEPART& other) cout << "Calling operator =, set " << code;cout << " equal to " << other.cod
21、e << ".n"strcpy(code, other.code);private:char codeCODELEN+1;class EMPLOYEE public:EMPLOYEE(char *empCode = "Teacher",char *depCode = "Computer"):depart(depCode)strcpy(code, empCode);cout << "Constructing employee: " << code << ".n
22、"EMPLOYEE() cout << "Destructing employee: " << code << ".n"DEPART get_depart()return depart;private:char codeCODELEN+1;DEPART depart;void main()DEPART dep;EMPLOYEE emp;dep = emp.get_depart();注意,在get depart();中,return的时候调用了拷贝构造函数四、 程序填空每空2分,共16分:根据以下各小题的描述和
23、要求在指定位置填入适当语句1. 完成如下的程序,使得输出结果为:base:10 base:12derived:24#include <iostream.h>class base int x;public:base(int a) x=a; cout<<base:<< x << endl; ;class derived: public base int y;public:derived(int a,int b):base(a) y=b; void print() ; cout<<derived:<<y<<endl;
24、 ;void main()base b(10), *p;derived d(12,24);b.print(); ;p->print();2. 函数int commstr(char *str1, char *str2, int *sublen)从两字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。约定空串不做为公共子串。例如,如使用以下主函数调用该函数,程序的执行结果为:456abcn=2 len=3请根据题目要求填入
25、适当的语句。#include <string.h>#include <iostream.h>int commstr(char *str1, char *str2, int *sublen)char *s1, *s2;int count = 0, len1, len2, k, j, i, p;len1= strlen(str1);len2= strlen(str2);if (len1>len2) s1= str1;s2= str2;else len2= len1;s1= str2;s2= str1;for (j=len2; j>0; j-) for (k=0; k+j <= len2; k+)for (i=0; s1 i+j-1 !='0' i+) for (p=0; p<j && sii+p=s2k+p ; p+);if ( p=j ) for (p=0; p<j; p+) cout<<s2k+p;cout<<endl;count+;if (count>0) break;*sublen = (count>0)? j :0;return c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门面租赁合同修复协议书
- 长租公寓租赁合同协议书
- 防护网工程销售合同范本
- 法人替公司还款合同范本
- 消防项目安全施工协议书
- 瑕疵生态板出售合同范本
- 物流人力合作合同协议书
- 销售咨询服务合同协议书
- 用于工作安置的合同协议
- 电梯门框安装合同协议书
- 河道水质净化工程合同
- 征信异议申诉合同(2篇)
- DB32T 2860-2015 散装液体化学品槽车装卸安全作业规范
- 《有效的时间管理》课件
- 伏龙肝生物活性成分鉴定与评价
- 2024年全国职业院校技能大赛高职组(法律实务赛项)考试题库(含答案)
- 2024年俄罗斯汽车测试、检验和认证行业应用与市场潜力评估
- 汽车底盘DFMEA-制动总泵带储液罐带液位传感器总成
- 落地式脚手架搭设安全技术交底
- 2024年陕西延长石油延安能源化工有限责任公司招聘笔试参考题库含答案解析
- 剑桥少儿英语预备级下Unit12
评论
0/150
提交评论