Smallint sil(20), Si2(13) 则表达式: 将返回对象sil的引用,并且sil中的的值是 sil. val和s2.va的值之和(但必须正规化为在 128至127之间)。 在下面写出重载的运算符+=的实现: 试题答案 程序为 int CalcDigital(char *str) ∥判断字符指针是否为空 if(str=NULL return 0 ∥记录数字字符个数的变量 int num of digital=0 ∥依次检查各个字符,如果是数字,则总数加1 for(int i=0; str[1=0x0; 1++) if(str[1<=9&&str[i>=0) num of digital++ ∥返回数字字符个数 eturn num of digital 2.程序为 long sum(int n)
SmallInt si1(20),si2(13); 则表达式: si1+=si2 将返回对象 si1 的引用,并且 si1 中的的值是 si1.val 和 si2.val 的值之和(但必须正规化为在 -128 至 127 之间)。 在下面写出重载的运算符+=的实现: 试题答案 一、 题号 1 2 3 4 5 6 7 8 9 10 对/错 对 错 对 错 错 对 错 对 错 对 二、 1. 程序为: int CalcDigital(char *str) { //判断字符指针是否为空 if(str==NULL) return 0; //记录数字字符个数的变量 int num_of_digital=0; //依次检查各个字符,如果是数字,则总数加 1 for(int i=0;str[i]!=0x0;i++) if(str[i]<=’9’&&str[i]>=’0’) num_of_digital++; //返回数字字符个数 return num_of_digital; } 2. 程序为: long sum(int n) {
if(n==1) return 1 return n*n+sum(n-1) 问题1:答案为: (A) back( NULL) (B) front==NULL EX back=NULL C) pFront-front E) PNew->nextltem=NULL back=pNew 问题2: 答:不正确。因为在类 Queueltem模板类的定义中用到了模板类 Queue,而此时 Queue还没 有定义,所以要先声明一下,告诉编译程序 Queue是一个模板类,它将在程序的其它地方 定义。如果没有这个说明,编译程序就不知道标识符 Queue代表什么样的含义了。 问题3: 答:第22行的 const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所 对应的实际参数的值。 第23行的cons修饰的是模板类 Queue的成员函数 is empty,它表示在函数 is empty 的函数体中不能改变任何数据成员的值 问题4: 答:析构函数中主要是释放链表中存放的各个节点的空间。因为 Queue对象在其生存期间 可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉, 所以需要在析构函数中来解放这些空间。 问题5: 语句号 对/错 四 问题1: 答:输出结果为: class b. 1 class a : haha 问题 答:不正确 问题3:类A的定义如下: private static object count ∥1.其它成员 bli AOf obj AOf object count-;i static int GetObject Countof return object count; j ∥其它函数 virtual void func(int data)i cout<<class A: "<<data<<endl; i void func(char *str)( cout<<class A: <<str<<endl; i object count的初始化语句如下
if(n==1) return 1; else return n*n+sum(n-1); } 三、 问题 1:答案为: (A) back(NULL) (B) front==NULL 或 back==NULL (C) pFront=front (D) pNew->nextItem=NULL (E) back=pNew 问题 2: 答:不正确。因为在类 QueueItem 模板类的定义中用到了模板类 Queue,而此时 Queue 还没 有定义,所以要先声明一下,告诉编译程序 Queue 是一个模板类,它将在程序的其它地方 定义。如果没有这个说明,编译程序就不知道标识符 Queue 代表什么样的含义了。 问题 3: 答:第 22 行的 const 修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所 对应的实际参数的值。 第 23 行的 const 修饰的是模板类 Queue 的成员函数 is_empty(),它表示在函数 is_empty() 的函数体中不能改变任何数据成员的值。 问题 4: 答:析构函数中主要是释放链表中存放的各个节点的空间。因为 Queue 对象在其生存期间 可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉, 所以需要在析构函数中来解放这些空间。 问题 5: 语句号 1 2 3 4 5 对/错 错 对 错 对 对 四、 问题 1: 答:输出结果为: class B: 1 class A: haha 问题 2: 答:不正确。 问题 3:类 A 的定义如下: class A{ private: static object_count; //…其它成员 public: A(){ object_count++;} ~A(){ object_count—; } static int GetObjectCount(){ return object_count; } //其它函数 virtual void func(int data){cout<<”class A: “<<data<<endl; } void func(char *str){ cout<<”class A: “<<str<<endl; } }; object_count 的初始化语句如下: int A::object_count=0;
五 问题1 答:不能将插入运算符和抽取运算符定义为类的成员函数。 因为这两个运算符对第一个运算数有特殊的要求,即必须分别是 ostream和 Istream类的 对象,而不能是用户自己定义的其它类,而类的成员函数默认的第一个参数为指向该类对象 的指针类型,所以不符合插入和抽取运算符的要求。 问题 重载的运算符的实现如下 SmallInt &SmallInt: operator+=(const SmallInt &si) SmallInt tmp(val+si. val) val=tmp. val return *this 或 SmalliNt &smallInt: operator+=(const SmallInt &si) val+=si. val if(val>127) if(val<-128 val=256 eturn *this. 中央广播电视大学20002001学年度第一学期“开放教育(本科)”期末考试 (开)
五、 问题 1: 答:不能将插入运算符和抽取运算符定义为类的成员函数。 因为这两个运算符对第一个运算数有特殊的要求,即必须分别是 ostream 和 istream 类的 对象,而不能是用户自己定义的其它类,而类的成员函数默认的第一个参数为指向该类对象 的指针类型,所以不符合插入和抽取运算符的要求。 问题 2: 重载的运算符的实现如下: SmallInt &SmallInt::operator+=(const SmallInt &si) { SmallInt tmp(val+si.val); val=tmp.val; return *this; } 或 SmallInt &SmallInt::operator+=(const SmallInt &si) { val+=si.val; if(val>127) val-=256; if(val<-128 val=256; return *this; } 中央广播电视大学 2000-2001 学年度第一学期“开放教育(本科)”期末考试 (开)
计科技专业面向对象程序设计试题 2001年1月 对错题。判断以下说法的正确性,在下面表格中对应的编号下面写上“对”或“错” (20分,每个题目2分) 题号「12「345678910 对/错 1、变量必须先定义或说明,后说明。 2、常量不能作为左值使用 3、头文件中一般存放着变量和常量的定义、函数的原型以及类的定义 4、类的友元函数可以直接访问该类的所有成员 5、派生类的成员函数可以直接访问基类的所有成员 6、一个类可以作为另一个类的友元类。 7、函数的参数和返回值类型可以是简单数据类型,也可以是指什、引用、数组和类 8、在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态 的特征 9、下面两个语句是等价的 har str[ ]=hello, world char str[11]="hello, world 10、用new动态申请的内存是在堆中分配的,而不是在栈中分配的。 、简单编程题。根据程序要求,写出函数的完整定义。(共40分) 1、(本每小题15分)写一个函数,完成在链表末尾增加一个节点的操作。函数的原型为 Node AddNode(Node head, int newData 其中,链表节点的定义如下: struct Node f int data //存放数据
计科技专业面向对象程序设计试题 2001 年 1 月 一、对错题。判断以下说法的正确性,在下面表格中对应的编号下面写上“对”或“错”。 (20 分,每个题目 2 分) 题号 1 2 3 4 5 6 7 8 9 10 对/错 1、变量必须先定义或说明,后说明。 2、常量不能作为左值使用。 3、头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。 4、类的友元函数可以直接访问该类的所有成员。 5、派生类的成员函数可以直接访问基类的所有成员。 6、一个类可以作为另一个类的友元类。 7、函数的参数和返回值类型可以是简单数据类型,也可以是指什、引用、数组和类。 8、在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态 的特征。 9、下面两个语句是等价的: char str[ ]="hello,world"; char str[11]="hello,world"; 10、用 new 动态申请的内存是在堆中分配的,而不是在栈中分配的。 二、简单编程题。根据程序要求,写出函数的完整定义。(共 40 分) 1、(本每小题 15 分)写一个函数,完成在链表末尾增加一个节点的操作。函数的原型为: Node * AddNode(Node * head,int newData); 其中,链表节点的定义如下: struct Node{ int data: //存放数据
Node next //指向链表中的下一个节点 函数参数:函数的第一个参数head指向链表的第一个节点,如果链表为空,则head的值 为NULL。第二个参数 newData为要插入的新节点中存放的数据 函数返回值:当成功地插入新的节点进,函数返回指向新节点的指针,否则,如果不能申 请到内存空间,则返回NULL。 Node *k AddNode(Node * &head, int newData) //在下面写出函数的实现 2、(本每小题15分)写一个函数,找出给定字符串中具有最大 ASCII码的字符。如字符串 " world"中字符’w具有最大的 ASCII码。函数的原型为 char Max Character(char str) 函数参数:指向所要处理的字符串 函数返回值:如果不空,则返回具有最大 ASCII码的字符,否则返回空字符0x0或10 char MaxCharacter (char *k str)
Node * next: //指向链表中的下一个节点 }; 函数参数:函数的第一个参数 head 指向链表的第一个节点,如果链表为空,则 head 的值 为 NULL。第二个参数 newData 为要插入的新节点中存放的数据。 函数返回值:当成功地插入新的节点进,函数返回指向新节点的指针,否则,如果不能申 请到内存空间,则返回 NULL。 Node * AddNode(Node * &head,int newData) { //在下面写出函数的实现 2、(本每小题15分)写一个函数,找出给定字符串中具有最大 ASCII 码的字符。如字符串 "world"中字符'w'具有最大的 ASCII 码。函数的原型为: char MaxCharacter(char * str); 函数参数:指向所要处理的字符串; 函数返回值:如果不空,则返回具有最大 ASCII 码的字符,否则返回空字符 0x0 或'\0'。 char MaxCharacter (char * str) {