《面向对象程序设计》课程作业及答案.docx
面向对象程序设计课程作业及答案 面向对象程序设计课程作业及答案 作业1: 是非题 1. 头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。1. 错 2. 程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。4. 对 填空题 下面是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。函数sum计算数组元素之和。填充程序中不完整的部分。 _A_ int sum(int ,int); void main() int ia5 = 2,3,6,8,10; B ; sumOfArray = sum(ia,5); cout data = newData; newNode->next = NULL; /插入到链表的结尾 if (head = NULL) head = newNode; else /寻找链表的最后一个节点 Node *tail = head; while(tail->next != NULL) tail = tail->next; /将新节点插入到最后 tail->next = newNode; return newNode; 作业2: 是非题 1. 在不同作用域中的变量可以同名。对 2. 派生类的成员函数可以直接访问基类的所有成员。2. 错 填空题 #include _A_; 4 void main() int a6=2,4,8,6,9,14; int x1=_B_; /调用f1函数求出a中前4各元素之和。 int x2=f1(a,6); cout='a' && stri<='z') num+; /返回数字字符个数 return num; 作业3: 是非题 1. 函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。3. 错 2. 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。5. 对 填空题 #include _A_; int f2(int* a, int n) _ B_; for(i=1;i<n;i+) if(max return max; void main() int bMM=3,12,6,20,9,7,34,50,25,66; _C_; /求出b4至b8 之间的最大值并赋给x1 _D_; /求出b0至b5 之间的最大值并赋给x2 cout<<x1<<' '<<x2<<endl; 答案: A const int MM=10; B int i,max=a0; C int x1=f2(b+4, 5); 8 D int x2=f2(b, 6); 阅读理解题 二、valarray是C+的标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类型的数组,如valarray是一个整型的数组类。该类的使用和一般的数组非常类似,可以通过 运算符来访问数组中的每个元素。 C+的标准模板库中还有一个模板函数abs(),其函数原型为: template valarray abs(const valarray & x); 该函数的作用是将作为参数的数组x的每个元素的值取绝对值,并返回得到的新的数组。如原来的数组为: 4 -1 -3 0 -34 将这个数组作为参数传递给函数abs后,函数返回的数组就变成: 4 1 3 0 34 要求:阅读下列程序,回答后面的问题。 /*/ #include #include /该头文件中定义了模板类valarray和模板函数abs() #define ARRAY_SIZE 10 typedef valarray INTVALARRAY; void main() INTVALARRAY val_array(ARRAY_SIZE); /定义一长度为ARRAY_SIZE的数组对象 /赋初始值 for (int i = 0; i < ARRAY_SIZE; i+) val_arrayi = -i; cout << "Size of val_array = " << val_array.size() << "n" cout << "The values of val_array before calling abs():n" for (i = 0; i < ARRAY_SIZE; i+) cout << val_arrayi << " " cout << "n" INTVALARRAY abs_array = abs(val_array); cout << "The result of val_array after calling abs():n" for (i = 0; i < ARRAY_SIZE; i+) cout << abs_arrayi << " " cout << "n" /*/ 问题1:写出程序的输出结果 问题2:关于程序中的语句: INTVALARRAY val_array(ARRAY_SIZE); 下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错” (A)该语句定义了一个对象val_array,这个对象是类valarray的实例 10 (B)该语句说明了一个函数原型,函数的名字为val_array,参数为ARRAY_SIZE,函数的返回值类型为INTVALARRAY (C)板类valarray一定有一个只带一个参数的构造函数 (D)模板类valarray一定有一个只带两个参数的构造函数 (E)ARRAY_SIZE将作为参数传递给val_array的构造函数,初始化val_array对象问题3:(本小题共12分)下面是模板函数abs()的实现。这个实现中有错误,指出错误并写出正确的实现。注意:函数头是正确的,不要改变,所有的错误出现在函数体中。 template valarray abs(const valarray& x) for(int i=0; i<x.size(); i+) if(xi<0) xi*=-1; return x; 这个函数实现中有以下错误: (1)_ (2)_ (3)_ 正确的函数实现应为: template valarray abs(const valarray& x) 问题4:(本小题3分)从上面的程序中,你可以推断出,valarray模板类中至少重载了哪个或哪些C+的运算符?