《C程序设计试题(下)样卷.pdf》由会员分享,可在线阅读,更多相关《C程序设计试题(下)样卷.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序设计试题(下)样卷(卷面 50 分)(考试用时 100 分钟)一、选择题(每题 1 分,共 5 分)1设计一个自定义类时,需要在屏幕上显示或向文件写入类对象的数据,最佳选择方法是 。A为屏幕显示和文件写入各自设计一个成员函数。B为屏幕显示和文件写入统一设计一个成员函数。C重载插入运算符()。2关于异常处理,那些说法是错误的 。A在 C+程序中,由 throw 表达式抛出异常,而该表达式应直接或间接地被包含在 try 块中。B当抛出异常后,寻找匹配的 catch 子句有固定的过程:逆着程序函数的调用链返回,称为栈展开(Stack Unwinding)。C当某条语句抛出异常时,跟在其后的语
2、句将被跳过,但析构函数仍然执行,所以应该在析构函数中释放资源。Dcatch 子句实际是一个特殊的函数。3下列关于动态资源分配的说法中错误的是 。A动态分配的资源不仅包括内存,还包括文件。B动态内存分配的优点在于可以随时给数组分配所需的内存而不会失败。C动态分配的资源通常要求在析构函数中释放。D对含有动态分配的数据成员的类对象应该采用深复制。4下列有关模板的描述那些是错误的 。A模板把数据类型作为一个设计参数,称为参数化程序设计。B模板参数除模板类型参数外,还有非类型参数。C类模板与模板类是同一概念。D使用时,模板参数与函数参数相同,是按位置而不是名称对应的。5关于多态,下面那些说法是正确的 。
3、A多态分静态的(编译时)和动态的(运行时)。B运行时的多态与类的层次结构有关。C在基类定义了虚函数后,在派生类中重新定义时可以不加关键字virtual。D仅使用虚函数并不能实现运行时的多态性,还必须采用指针或引用来调用才能真正实现运行时的多态性。二、填空题(每空 0.5 分,共 5 分)1有标准字符串类 string 对象 str,str1,str2。对其字符元素的访问可用两种方式:stri和 str.at(i)。两者的区别是 (1)。str1+=str2 实现的运算是 (2)。str.substr(pos,length1)实现的运算是 (3)。2C/C+中的多维数组用的是一个(4)的定义,即
4、多维数组的基本定义是 (5)构成的数组,三维数组的元素是 (6)。3单链表的结点包含两个域:(7)和(8)。使用链表的最大的优点是(9),即使是动态数组也做不到这一点。4纯虚函数定义时在函数参数表后加=0,它表明程序员对函数体不定义,其本质是将指向函数体的指针定为(10)。三、阅读程序段(每题 4 分,共 16 分)1写出下面的程序输出的数据,这是什么图形?int main()int a1011=0,1,i,j;for(i=1;i10;i+)for(j=1;j=i+1;j+)aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=1;j=i+1;j+)coutaijt;c
5、outendl;return 0;2写出下列程序的输出结果,并做简单的说明。class Student string coursename;/课程名 int classhour;/学时 int credit;/学分 public:Student()coursename=#;classhour=0;credit=0;virtual void Calculate()credit=classhour/16;void SetCourse(string str,int hour)coursename=str;classhour=hour;int GetHour()return classhour;voi
6、d Print()coutcoursenametclasshour学时tcredit 学分Calculate();ps-Print();ps=&g;ps-Calculate();ps-Print();return 0;3写出该程序的输出结果,并说明该类的定义中 top 和 maxSize 的意义。templateclass Stack int top;T*elements;int maxSize;public:Stack(int=30);Stack()delete elements;void Push(const T&data);T Pop();template Stack:Stack(int
7、 maxs)maxSize=maxs;top=-1;elements=new T maxSize;template void Stack:Push(const T&data)elements+top=data;template T Stack:Pop()return elementstop-;int main()int i;char a5=k,c,a,t,s;Stackcstack();for(i=0;i5;i+)cstack.Push(ai);for(i=0;i5;i+)cstack.Pop();return 0;4写出下列程序的输出结果,指出错误所在;将 A 的析构函数改为虚函数结果又如何
8、?class A int*p;public:A()p=new int3;cout”A().”;A()deletep;cout”A().n”;class B:public A int*q;public:B()q=new int256;cout”B().”;B()deleteq;cout”B().”;int main()int i;for(i=0;i3;i+)A*r=new B;/重复创建动态对象 delete r;/重复释放动态对象 四、填空,完善程序(每空 1.5 分,共 24 分)1对半查找递归算法,x 为定值,算法作为升序有序表(ordered list)模板类的成员函数。其中 T 为模板
9、类型参数,sixe 代表有序表中数组 slist 元素的个数。小于比较运算符()在具体的类中重载。template int Orderedlist:Binarysearch(T&x,const int low,const int high)int mid=-1;if(low=high)mid=(low+high)/2;if(slistmidx)mid=Binarysearch(x,(1);else if(xslistmid)mid=Binarysearch(x,(2);return (3);2冒泡排序算法,作为 Orderedlist类的成员函数。last 是有序表元素个数。template
10、void Orderedlist:BubbleSort()bool noswap;/交换标志 int i,j;T temp;for(i=0;ilast;i+)noswap=(4);for(j=(5);(6);(7)/从下往上冒泡 if(slistjslistj-1)temp=slistj;slistj=slistj-1;slistj-1=temp;noswap=(8);if(noswap)break;3用虚函数来实现辛普生法求函数的定积分。在梯形法中是用直线来代替曲边梯形的曲边,在辛普生法中是用抛物线来代替,得出的公式为(区间必须为偶数n 个相等区间)。class Simpson double
11、 Intevalue,a,b;/Intevalue 积分值,a 积分下限,b 积分上限 public:virtual double fun(double x)=0;/被积函数声明为纯虚函数 Simpson(double ra=0,double rb=0)a=ra;b=rb;Intevalue=0;void Integrate()double dx;int i;dx=(b-a)/2000;Intevalue=(9);for(i=1;i2000;i+=2)Intevalue+=4*fun(10);for(i=2;i2000;i+=2)Intevalue+=2*fun(10);Intevalue*=
12、dx/3;void Print()cout积分值=IntevalueIntegrate();/动态 s-Print();return 0;4单链表的结点采用类 Node,以链表类 List 为友元类,List 可直接访问Node 的私有成员。对链表整体的操作则作为链表类的成员函数,这里列出向前生成链表、向后生成链表、创建结点等等。templateclass Node T info;/数据域 Node*link;/指针域 public:friend class List;templateclass List Node*head,*tail;/链表头指针和尾指针 public:void Inser
13、tFront(Node*p);/可用来向前生成链表,在表头插入一个结点 void InsertRear(Node*p);/可用来向后生成链表,在表尾添加一个结点 Node*CreatNode(T data);/创建一个结点(孤立结点);templatevoid List:InsertFront(Node*p)/链头插入 p-link=(12);(13)=p;if(tail=head)tail=p;templatevoid List:InsertRear(Node*p)/链尾插入 p-link=(14);(15)=p;tail=p;templateNode*List:CreatNode(T da
14、ta)/建立新节点 Node*tempP=new Node(data);return tempP;5为学生类重载插入、提取和小于运算符。class student int key;string name;public:bool operator(student);friend ostream&operator(istream&s,student&k);ostream&operator(istream&s,student&k)(17);return s;bool student:operatori (7)j-(8)false 3(9)fun(a)+fun(b)(10)a+i*dx (11)return sin(x)4(12)head-link (13)head-link (14)tail-link (15)tail-link 5(16)sk.key k.namek.keyk.name;(18)keyst.key;