姓 名 学 号
西安电子科技大学网络与继续教育学院
2015学年上学期
《面向对象程序设计(C++)》期末考试试题
(综合大作业)
题号 题分 得分
考试说明:
1、大作业于2015年4月3日公布,2015年5月9日前在线提交; 2、考试必须独立完成,如发现抄袭、雷同、拷贝均按零分计。
一、简答题(10分)
1.1(3分)C++提供了哪些循环语句?它们各自的特点是什么?
C++语言提供三种循环语句:for循环语句应用最广泛,使用最灵活。不仅可以用于循环次数已经确定的情况,也能用于循环次
数不确定、只给出循环结束条件的情况。while循环语句,其特点是先判断表达式,后执行语句,在循环体中应有使循环趋于结束的语句。do-while 语句,其特点是先执行语句,后判断表达式。对同一个问题可以用while语句处理,也可以用do-while语句处理。
一 10 二 20 三 20 四 20 五 30 总分
1.2(3分)在C++中什么可以充当友元?友元是否可以继承,为什么?
在C++中,自定义函数可以充当友元,友元只是能访问指定类的私有和保护成员的自定义函数,不是被指定类的成员,自然不能继承
1.3(4分)若派生类以private方式从一个基类派生,派生类的对象可以访问基类中的那些成员?派生类的成员函数可以访问基类中的那些成员?
二、填空题(每空1分,共20分) 2.1 break语句在循环结构中的功能是 是跳出整个循环 ,continue语句的功能是 跳过本次循环 。
2.2有一段程序为:while (表达式) 语句1 语句2 …… 当表达式的值为非0时,执行 语句1后执行语句2 ;当表达式为0时,执行 语句2 。
2.3 使用关键字 Inline 说明的函数称为内联函数。编译时,源程序中所有对该函数第 1 页 (共 5 页)
的调用被替换为此函数的 体内 。 2.4数组名代表的是该数组的_数组首地址的指针 ;数组元素作为函数的实参时,是以 指针 方式传递参数的。
2.5在C++中,类A的每一个非静态成员函数都有一个隐藏的指针类型的形参 This 指针 ,它指向当前正在操作的对象,其类型为 。
2.6 C++语言引入了异常处理机制,用 throw 语句“抛出”异常,然后用相应的语句 _ try 捕获被“抛出”的异常,并做出相应的处理。
2.7在C++语言中,用 new 表达式来创建动态的类对象;用 _delete___ 表达式释放动态类对象。
2.8 C++支持两种类型的多态,编译时多态和运行时多态。 运行时 多态是通过虚函数来实现的, 编译时 多态是通过函数重载来实现的。
2.9 纯虚函数就是 特殊 的虚函数,包含纯虚函数的类称为 抽象类 。 2.10在某些应用中,需要程序中属于某个类的所有对象共享某个数据。在C++语言中,为了不破坏数据的封装性,需将所要共享的数据说明为类的 私有成员 ,即用关键字_ private _______说明的类成员。
三、选择题(每题2分,共20分)
3.1在下列给字符数组赋值语句中, 是错误的。已知,char s[5]。 A.s[0] = 'm'; B.s[5] = 'n'; C.s[1] = 'a'; D.s[2] = 'b'; 3.2下列对结构变量赋值的描述中, 是错误的。 A.结构变量可以使用初始值表对它初始化 B.可以给一个结构变量的各个成员赋值
C.可将任意已知的结构变量名赋给一个结构变量
D.可将一个已知结构变量名赋给相同结构类型的另一个结构变量 3.3下列if语句中,条件为真的语句是 。
A.if(0) B.if(3) C.bool bFlag = ture; if(!bFlag) D.if(a) 3.4若i的初值为1, 能输出1到10的整数。
A.if(i++ < 10) cout << i; B.do cout << i; while(++i <= 10); C. while(i++ < 10) cout << i; D.switch(++i <= 10) cout << i;
3.5在下面的程序中,若实参a与形参x以引用传递的方式传递信息,实参b与形参y以值传递的方式传递信息,那么从函数compute返回主程序后,a和b的值分别为 。 Main Program void compute(x, y)
a := 1; x := x + 2 * y;
b := 2; y := 2 * x + y;
compute(a, b); return ; A.5和2 B.5和12 C.1和2 D.1和12
3.6下列关于运算符重载的描述中, 是正确的。
A.运算符重载可改变其优先级 B.运算符重载不改变其语法结构 C.运算符重载可改变其结合性 D.运算符重载可改变其操作数的个数 3.7 为了使类中的成员能够被类的对象通过成员运算符访问,则应该把成员的访问权限定义为 。
A.public B.protected C.private D.packaged 3.8 假设A是一个类,那么执行语句“A a, b(3), *p;”,调用了 次构造函数。 A.2 B.3 C.4 D.5
3.9 假设类AB用成员函数的方式重载加法运算符,以实现两个AB类对象的加法,并返
第 2 页 (共 5 页)
回相加的结果,则该成员函数的声明为 。
A.AB operator + (AB &a, AB &B); B.AB operator + (AB&); C.operator + (AB a); D.AB & operator + (); 3.10 下列对C++中静态数据成员的描述中,正确的是 。 A.静态数据成员是类的所有对象共享的数据 B.类的每个对象都有自己的静态数据成员 C.类的不同对象有不同的静态数据成员值 D.静态数据成员不能通过类的对象来调用 四、读程题(每题5分,共20分) 4.1给出下列源程序的输出结果。 #include for(sum = 0, i = 0; i < n; i++) sum += *(x+i); return sum; } void main(){ int arr[] = {1, 3, 5, 7}; cout << add(arr, 4) << endl; } 输出结果:16 4.2 指出下列类定义中的3处错误。 #include A() { a1 = a2 = 0; cout << \"Default constructor called.\\n\"; } A(int i, int j) { a1 = i; a2 = j; cout << \"Constructor called.\\n\"; } void print() { cout << \"a1 = \" << a1 <<\" , \" << \"a2 = \" << a2 << endl; } private: int a1, a2; }; void main() { A x, y(3,9); x.print(); y.print(); } 4.3 给出下述源程序的运行结果。 #include 第 3 页 (共 5 页) double score; }*p; void main() { Student s1; p = &s1; p->name = (char *)new char[50]; p->score = 95.5; strcpy(p->name, \"Ma ping\"); cout << p->name << ',' << (*p).score << endl; } 运行结果: Ma ping,95.5 4.4 给出下述源程序的运行结果并说明该程序的功能。 #include int add(int a, int b = 5); void main() { int m = 5; cout << \"sum1 = \" << add(m) << endl; cout << \"sum2 = \" << add(m, add(m)) << endl; cout << \"sum3 = \" << add(m, add(m, add(m))) << endl; } int add(int x, int y) { return x + y; } 运行结果: sum1 = 10 sum1 = 15 sum1 = 20 五、编程题(每题15分,共30分) 5.1有n个整数已按由小到大的顺序排列好,要求输入一个整数,把它插入到原有数列中,而且仍然保持有序,同时输出新的数列。(插入时应考虑到插入的数的各种可能性,比所有的数都小;比所有的数都大;在最大数和最小数之间) int InsertArray(int x,int a[],int k) { int i,j; if(k<0 || k>MaxSize-1) return 0;/* 插入不成功返回0 */ if(k==0){ /* 数组为空,直接插入即可 */ a[0]=x; return 1; } 第 4 页 (共 5 页) } i=0; while(a[i] a[i]=x; return 1; 5.2 利用运算符重载,定义复数类的加法与减法,使之能够执行下列运算。 Complex a(4.0, 6), b(7.4, 2), c(0, 0); c = a + b; c = 4.1 + a; c = b + 2.3; 第 5 页 (共 5 页) 因篇幅问题不能全部显示,请点此查看更多更全内容