首页 三套期末考试题C 含解题答案

三套期末考试题C 含解题答案

举报
开通vip

三套期末考试题C 含解题答案->C++期末考试题(一)<-一、填空题(25小题,共50分)(以下每小题1分,共10分)1.在C++中,函数的参数有两种传递方式,它们是值传递和地址或指针或引用传递。2.当一个成员函数被调用时,该成员函数的this指针指向调用它的对象。3.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有作用于分隔限定符::,对此数据成员的访问将出现歧义。4.拷贝构造函数使用引用作为参数初始化创建中的对象。5.在公有继承的情况下,基类数据成员在派生类中的访问权限...

三套期末考试题C  含解题答案
->C++期末考试题(一)<-一、填空题(25小题,共50分)(以下每小题1分,共10分)1.在C++中,函数的参数有两种传递方式,它们是值传递和地址或指针或引用传递。2.当一个成员函数被调用时,该成员函数的this指针指向调用它的对象。3.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有作用于分隔限定符::,对此数据成员的访问将出现歧义。4.拷贝构造函数使用引用作为参数初始化创建中的对象。5.在公有继承的情况下,基类数据成员在派生类中的访问权限保持不变。6.描述命题"A小于B或小于C"的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式为A<B||A<C。7.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到没有形参的或者缺省参数的构造函数,否则应用程序会产生一个编译错误。8.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象共有。9.为了避免可能出现的歧义,C++对if…else语句配对 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 为:else总是与最近的if配对。10.设"inta=3,b=4,c=5;",表达式"(a+b)>c&&b==c"的值是0。(以下每小题2分,共20分)11.面向对象的程序设计有四大特征,它们是抽象、封装、继承、多态。12.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型不同;在基类和派生类中,成员函数的覆盖是指派生类成员函数与基类被覆盖的成员函数、参数个数、参数类型和返回值均相同。13.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、析构函数没有参数、可以为虚函数。14.动态联编要满足两个条件,它们是被调用的成员函数是虚函数、用指针或引用调用虚函数。15.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为抽象类,定义该类至少具有一个纯虚函数。16.在C++类中,const关键字可以修饰对象和成员函数,const对象不能被修改,const成员函数不能修改类数据成员。17.举出C++中两种用户自定义的数据类型:类、枚举。18.C++中没有字符串类型,字符串是通过字符数组来表示的,每一个字符串都有一个结尾字符\0。19.C++中没有输入输出语句,输入输出是通过输入输出库实现的,写出一条打印整型变量n的输出语句:cout<<n。20.举出C++中两种代码复用的方式:继承、复用。(以下每小题4分,共20分)21.下面程序的运行结果是3。#include<stdio.h>voidmain(){chara='a',b='j';floatx;x=(b-a)/('F'-'A');printf("%d\n",(int)(3.14*x));}22.下面程序的运行结果是2581114。#include"iostream.h"voidmain(){inti=1;while(i<=15){i++;if(i%3!=2)continue;elsecout<<"i="<<i<<endl;}}23.下面程序的运行结果是InitalizingdefaultInitalizingdefault00DesdtructorisactiveDesdtructorisactive。#include"iostream.h"classtest{private:intnum;floatfl;public:test();intgetint(){returnnum;}floatgetfloat(){returnfl;}~test();};test::test(){cout<<"Initalizingdefault"<<endl;num=0;fl=0.0;}test::~test(){cout<<"Desdtructorisactive"<<endl;}voidmain(){testarray[2];cout<<array[1].getint()<<""<<array[1].getfloat()<<endl;}24.下面程序的运行结果是。#include<iostream.h>classA{public:A(){cout<<"A::A()called.\n";}virtual~A(){cout<<"A::~A()called.\n";}};classB:publicA{public:B(inti){cout<<"B::B()called.\n";buf=newchar[i];}virtual~B(){delete[]buf;cout<<"B::~B()called.\n";}private:char*buf;};voidfun(A*a){deletea;}voidmain(){A*a=newB(15);fun(a);}A::A()called.B::B()called.B::~B()called.A::~A()called.25.下面程序的运行结果是。#include<stdio.h>inta[]={1,3,5,7,9};int*p[]={a,a+1,a+2,a+3,a+4};voidmain(){printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);}953847二、问答题(每小题5分,共20分)1.若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。2.简述成员函数、全局函数和友元函数的差别。成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。不是在类中定义的成员函数都是全局函数。如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用friend关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。3.简述结构化的程序设计、面向对象的程序设计的基本思想。结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。4.结构struct和类class有什么异同?struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。在C++中,struct可被class代替。三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题4分,共8分)(1)程序功能是倒序输出各给定的字符串。#include<stdio.h>voidmain(){charstr[5][]={"First","Second","Third","Forth","Fifth"};char*cp[]={str[4],str[3],str[2],str[1],str[0]};inti;while(i<=5){printf("%c",*(cp+i));i++;}}①"charstr[5][]={"First","Second","Third","Forth","Fifth"};"应为"charstr[5][10]={"First","Second","Third","Forth","Fifth"};"②"while(i<=5)"应为"while(i<5)"③"printf("%c",*(cp+i));"应为"printf("%s",*(cp+i));"④"inti;"应为"inti=0;"(2)程序功能是将各个平方根值放入数组中。#include<stdio.h>voidmain(){intmax,a,i;scanf("%d%d",max,a);doublex[max];for(i=0;i<max;i++)x[i]=sqrt(a*i);}①�增加"#include<math.h>"②"scanf("%d%d",max,a);"应为"scanf("%d%d",&max,&a);"③"doublex[max];"改为:"double*x=newdouble[max];"…"delete[]x;"四、(8分)下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数。classshape{public:virtualfloatarea()=0;};floattotal(shape*s[],intn){floatsum=0.0;for(inti=0;i<n;i++)sum+=s[i]->area();returnsum;}classTriangle:publicShape{public:Triangle(doubleh,doublew){H=h;W=w;}doubleArea()const{returnH*W*0.5;}private:doubleH,W;};classRectangle:publicShape{public:Rectangle(doubleh,doublew){H=h;W=w;}doubleArea()const{returnH*W;}private:doubleH,W;};五、(6分)完成顺序查找函数f_seq()。其过程是:从表头开始,根据给定的模式,逐项与表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查找整个表仍未找到所需对象,则查找失败#include<stdio.h>voidf_seq(char*list[],char*object,intlen)//list指针数组,指向字符串//object模式串//len表的长度{char**p;intstrcmp(char*s,char*t);p=list;while(p<list+len)if(strcmp(*p,object)==0)break;elsep++;if(p<list+len)printf("Success!**%d\n",p-list);elseprintf("Unsuccess!\n");}intstrcmp(char*s,char*t){for(;*s==*t;s++,t++)if(*s=='\0')return(0);return(s-t或*s-*t或1);}六、(8分)完成使链表逆置函数reverse,若有链表:逆置后则变为:链表结点的结构如下:structnode{intnum;structnode*next;}structnode*reverse(structnode*head)//head链表头结点{structnode*p,*temp1,*temp2;if(head==NULL||head->next==NULL)returnhead;p=head->next;head->next=NULL;while(p!=NULL或p){temp1=head;head=p;temp2=p;p=p->next;temp2->next=temp1;或head->next=temp1;}//Matchwhilestatenmentreturnhead;//返回逆置后的链表的头结点}->C++期末考试题(二)<-一、填空题(25小题,共50分)(以下每小题1分,共10分)1.在C++中,用数组、指针、和引用作为函数参数,能够将参数值带回。2.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的封装特性。3.在C++中,构造派生类对象时,总是先从基类的初始化开始的。4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是拷贝每一个数据成员。5.类是用户定义的类型,具有类类型的变量称作对象。6.在5个运算符"*(乘号)、<=、!=、!、&&"中,优先级由高到低的顺序是!、*(乘号)、<=、!=、&&。7.在C++中,类定义一般用class关键字,不过用struct关键字也可以定义类,它们定义类的区别在于在缺省访问权限时,struct类成员是公有的,而class类成员是私有的。8.静态的成员函数没有隐含的this指针,所以,它们只能访问静态的数据成员。9.与"(!a==0)"等价的C++表达式是(a>0||a<0)或(a)。10.若a=6,b=4,c=2,则表达式"!(a-b)+c-1&&b+c/2"的值是1。(以下每小题2分,共20分)11.在面向对象的程序设计中,通过封装实现数据隐藏;通过继承实现代码的复用。12.在下面的程序段中,语句"constint*c=&a;"和语句"int*constd=&b;"的含义分别是变量指针c指向整型常量a、常量指针d指向整型变量b。constinta=78;intb=28;constint*c=&a;int*constd=&b;13.用new申请有10个元素的指针数组str,假定数组元素是指向字符型数据的指针,该C++语句为char**str=newchar*[10];。14.在C++中构造一个对象时,其数据成员在构造函数中初始化。对于内嵌的对象、常量、引用数据成员需要在构造函数的成员初始化列表中初始化。15.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具有双重作用:对于其派生类而言是公有的;而对于其外部的程序而言是私有的。16.C++中有两种数据类型:整型和字符型可以使用signed修饰符。17.举出C++中两种 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 控制语句if语句、for循环语句。18.预编译指令由三种,它们是:文件包含、宏定义和条件编译。19.C++中,对象保存在内存中,栈内存是自动分配和释放的,而堆内存需要用户自己申请和释放。20.在C++函数中,可用return语句带回一个值。如果有多个返回值,可用指针、引用等带回。(以下每小题4分,共20分)21.下面程序的运行结果是6。#include<stdio.h>voidmain(){chara='0',b='9';floatx;x=(b-a)/('F'-'B');printf("%d\n",(int)(3.14*x));}22.以下程序的输出结果是**#**#**#$。#include<stdio.h>voidmain(){inti;for(i=0;i<=5;i++){if(i%2)printf("**");elsecontinue;printf("#");}printf("$\n");}23.下面程序的运行结果是Hello50OK!。#include<iostream.h>#defineN100classCStack{public:CStack(){top=0;cout<<"Hello";}~CStack(){cout<<"Bye";}voidpush(inti);intpop();private:intstack[N];inttop;};voidCStack::push(inti){if(top==N){cout<<"Overflow";return;}else{top++;stack[top]=i;}}intCStack::pop(){inttemp;if(top==0){cout<<"Underflow";return0;}else{temp=stack[top];top--;returntemp;}}voidmain(){CStack*ptr=newCStack;ptr->push(10);ptr->push(50);cout<<ptr->pop()<<"";cout<<"OK!"<<endl;}24.下面程序的运行结果是#include<iostream.h>classB{public:B(){cout<<"B::B()construction."<<endl;}virtual~B(){cout<<"B::~B()destruction."<<endl;}};classD:publicB{public:D(inti){cout<<"D::D()construction."<<endl;buf=newchar[i];}virtual~D(){delete[]buf;cout<<"D::~D()destruction."<<endl;}private:char*buf;};voidfun(B*a){deletea;}voidmain(){B*a=newD(25);fun(a);}B::B()construction.D::D()construction.D::~D()destruction.B::~B()destruction25.下面程序的运行结果是#include<stdio.h>inta[]={2,5,6,8,10};int*p[]={a,a+1,a+2,a+3,a+4};voidmain(){printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);}10651148二、问答题(每小题5分,共20分)1.在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符?拷贝构造函数是用一个对象初始化另一个对象时调用,定义了拷贝构造函数通常涉及到对象内有指针成员,需要定义拷贝构造函数复制指针所指向的内存单元。对象赋值也有同样的问题,如果要将对象指针所指向的内存单元也赋给另一个对象,就必须重载赋值运算符。2.简述局部作用域、全局作用域和类作用域的异同。局部作用域只在局部块内有效,如在一个函数内或在一个复合语句内,它的生存期也在该块内;全局作用域对整个应用程序都有效,它的生存期与应用程序一样长;类作用域在类内,类的成员函数可以访问类的所有成员,而在类外,只能访问类的共有成员,类成员定义的次序与其作用的范围没有关系。3.虚函数是否一定要有virtual关键字?什么叫纯虚函数和抽象类?多态调用需要满足怎样的条件?不一定,派生类覆盖基类的成员函数时,没有virtual关键字,也是虚函数;纯虚函数没有实现,它供派生类覆盖,纯虚函数的一般定义形式为:virtual返回类型函数名(参数表)=0;至少含有一个纯虚函数的类称为抽象类,抽象类不能定义对象,只能作为基类;多态调用需要满足的条件:被调用的成员函数是虚函数用指针或引用调用虚函数4.数组和链表是两种重要的线性数据结构,使用链表有什么优点?数组需要一个大的、连续的存储单元,而链表是由一个个结点的小存储单元组成的。链表便于数据的插入和删除。在数组中,要插入一个元素,需要将后面的元素往后移,要删除一个元素要将后面的元素往前移,效率很低,链表可以克服这个缺点。三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题4分,共8分)(1)程序功能是将某年某月的几号转换成这一年的第多少天。#include<stdio.h>structdate{inty;intm;intd;}intdaytab[2][]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};voidmain(){intn;structdated;intdays(structdate*pd);printf("Input:Year=?Mouth=?Day=?\n");scanf("%d%d%d",y,m,d);n=days(&d);printf("N=%ddays\n",n);}intdays(structdate*pd){inti,day,leap;day=pd.d;leap=pd.y%4==0&&pd.y%100!=0||pd.y%400==0;for(i=1;i<pd->m;++i)day+=daytab[leap][i];return(day);}(1)"structdate{inty;intm;intd;}"应为"structdate{inty;intm;intd;};"(2)"intdaytab[2][]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,30,31,30,31}};"应为"intdaytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,30,31,30,31}};"(3)"scanf("%d%d%d",y,m,d);"应为"scanf("%d%d%d",&d.y,&d.m,&d.d);"(4)"day=pd.d;"应为"day=pd->d;"(5)"leap=pd.y%4==0&&pd.y%100!=0||pd.y%400==0;"应为"leap=pd->y%4==0&&pd->y%100!=0||pd->y%400==0;"(2)程序功能是打印Object类型变量的分量a。#include<iostream.h>structObject{inta;intb;};voidmain(){Object&MyFunction(inta=20,intb);Object&rMyObj=MyFunction(,5);cout<<"rMyObj.a="<<rMyObj.a<<endl;delete&rMyObj;}Object&MyFunction(inta=20,intb){Object*o=newObject;o->a=a;o->b=b;returno;}(1)"Object&MyFunction(inta=20,intb);"应为"Object&MyFunction(inta=20,intb=25);"(2)"Object&MyFunction(inta=20,intb)"也应为"Object&MyFunction(inta=20,intb=25)"或"Object&MyFunction(inta,intb)"(3)"Object&rMyObj=MyFunction(,5);"应为"Object&rMyObj=MyFunction(5);"(4)"returno;"应为"return*o;"四、(8分)下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生梯形类(trapezoid)、圆形类(circle),并给出具体的求面积函数classshape{public:virtualfloatarea()=0};floattotal(shape*s[],intn){floatsum=0.0;for(inti=0;i<n;i++)sum+=s[i]->area();returnsum;}classshape{public:virtualfloatarea()=0};floattotal(shape*s[],intn){floatsum=0.0;for(inti=0;i<n;i++)sum+=s[i]->area();returnsum;}classCircle:publicShape{public:Circle(doubler){radius=r;}doubleArea()const{return3.1416*radius*radius;}private:doubleradius;};classTrapezoid:publicShape{public:Trapezoid(doubletop,doublebottom,doublehigh){T=top;B=bottom;H=high;}doubleArea()const{return(T+B)*H*0.5;}private:doubleT,B,H;};五、(6分)函数binary()实现折半查找,即查寻给定的单词word是否在关键字表tab中(关键字按字典顺序排列),折半查找每次把word与tab表中相应部分的位于中间位置的关键字进行比较,最终结果:或者与某个关键字相同,或者与所有关键字都不相同。#include<string.h>structkey{char*keyword;intcount;};structkey*binary(char*word,structkeytab[],intn)//word:asearchingword//tab:keywordtable//n:thesumofkeywords{intcond;structkey*low=tab;structkey*high=&tab[n-1];structkey*mid;while(low<=high){mid=low+(high-low)/2或(high+low)/2;if((cond=strcmp(word,mid->keyword))<0)high=mid-1;elseif(cond>0)low=mid+1;elsereturnmid;}return(NULL);}六、(8分)下面程序实现汉诺塔游戏。规则是:三个立柱(分别为A、B、C),开始A上串有n个(用户输入值)大小不等的圆盘,大的在下,小的在上。要求借助于B把它们从A移到C。每次只能移一个盘,而且三个柱上的盘总是大的在下,小的在上#include<stdio.h>inti=0;voidmain(){intn;voidmovetower(intm,charfrom,charto,charusg);for(;;){printf("inputthenumberofdisksofhanoitower:");scanf("%d",&n);if(n==0)break或return;printf("\n\n");printf("Themovingstepisasbelow:\n");movetower(n,'A','C','B');printf("\tTotal:%d\n",i);}}voidmovetower(intm,charfrom,charto,charusg){voidmovedisk(charsource,chardestination);if(m!=1或m>1){movetower(m-1,from,usg,to);movedisk(from,to);movetower(m-1,usg,to,from);}elsemovedisk(from,to);}voidmovedisk(charsource,chardestination){i++;printf("%c------->%c\n",source,destination);}->C++期末考试题(三)<-1、D2、A3、C4、C5、B、6、D7、A8、B9、A10、D11、A12、A13、C14、B15、C16、D17、C18、A19、C20、D一、选择填空题(共20小题,每小题2分,共40分)。1.关于C++与C语言关系的描述中,()是错误的。a.C语言是C++语言的一个子集b.C语言与C++语言是兼容的c.C++语言对C语言进行了一些改进d.C++语言和C语言都是面向对象的2.按照标识符的要求,()符号不能组成标识符。a.连接符b.下划线c.大小写字母d.数字字符3.为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。a.缩排位置相同的ifb.在其之前未配对的ifc.在其之前未配对的最近的ifd.同一行上的if4.在"inta[][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是()。a.1b.0c.6d.25.设"char**s;",以下正确的表达式是()。a.s="computer";b.*s="computer";c.**s="computer";d.*s='c';6.对于"int*pa[5];"的描述中,()是正确的。a.pa是一个指向数组的指针,所指向的数组是5个int型元素b.pa是一个指向某数组中第5个元素的指针,该元素是int型变量c.pa[5]表示某个元素的第5个元素的值d.pa是一个具有5个元素的指针数组,每个元素是一个int型指针7.在下列表示引用的方法中,()是正确的。已知:intm=10;a.int&x=m;b.int&y=10;c.int&z;d.float&t=&m;8.下列for循环的次数为()。for(i=0,x=0;!x&&i<=5;i++)a.5b.6c.1d.无限9.对于C/C++语言的函数,下列叙述中正确的是()。a.函数的定义不能嵌套,但函数调用可以嵌套b.函数的定义可以嵌套,但函数调用不能嵌套c.函数的定义和调用都不能嵌套d.函数的定义和调用都可以嵌套10.在一个被调用函数中,关于return语句使用的描述,()是错误的。a.被调用函数中可以不用return语句b.被调用函数中可以使用多个return语句c.被调用函数中,如果有返回值,就一定要有return语句d.被调用函数中,一个return语句可以返回多个值给调用函数11.在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用()。a.内联函数b.重载函数c.递归调用d.嵌套调用12.使用fseek函数可以实现的操作是()。a.改变文件指针的当前位置b.文件的顺序读写c.文件的随机读写d.以上都不对13.下列存储标识符中,()的可见性与存在性不一致。a.外部类b.自动类c.内部静态类d.寄存器类14.在如下结构定义中,不正确的是()。a.structstudent{intno;charname[10];floatscore;};b.structstud[20]{intno;charname[10];floatscore;};c.structstudent{intno;charname[10];floatscore;}stud[20];d.struct{intno;charname[10];floatscore;}stud[100];15.将两个字符串连接起来组成一个字符串时,选用()函数。a.strlen()b.strcpy()c.strcat()d.strcmp()16.()不是构造函数的特征a.构造函数的函数名与类名相同b.构造函数可以重载c.构造函数可以设置缺省参数d.构造函数必须指定类型说明17.已知:类A中一个成员函数说明如下:voidSet(A&a);其中,A&的含义是()。a.指向类A的指针为ab.将a的地址值赋给变量Setc.a是类A对象的引用,用来作函数Set()的参数d.变量A与a按位与作为函数Set()的参数18.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。a.voidprint()const;b.constvoidprint();c.voidconstprint();d.voidprint(const);19.关于虚函数的描述中,()是正确的。a.虚函数是一个static类型的成员函数b.虚函数是一个非成员函数c.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数d.派生类的虚函数与基类的虚函数具有不同的参数个数和类型20.关于new运算符的下列描述中,()是错的。a.它可以用来动态创建对象和对象数组b.使用它创建的对象和对象数组可以使用运算符delete删除c.使用它创建对象时要调用构造函数d.使用它创建对象数组时必须指定初始值二、问答题(15分)1、(3分)虚析构函数有什么作用?对象销毁时,需要调用析构函数。在多态调用时,是用基类的指针访问派生类的对象。如果析构函数是非虚函数,则基类指针只能访问基类的析构函数,而不能访问派生类的析构函数,导致派生类对象销毁时,没有调用派生类的析构函数,只是调用了基类的析构函数。如果把析构函数定义成虚函数,则可克服这个问题。2、(3分)拷贝构造函数在哪几种情况下调用?用一个对象初始化另一个对象时当用对象作为函数参数传递时当函数返回对象时3、(4分)函数重载与函数覆盖有什么不同,它们与多态有什么关系?函数重载是指函数名相同,而函数的参数个数或类型不同;覆盖是指在派生类中成员函数与基类成员函数的函数名、参数个数、类型与返回值均相同;C++中正是通过虚函数的覆盖,实现多态的功能。4、(3分)C++继承是如何工作的?继承使得派生类能够使用基类的公有和保护成员,从而实现代码的复用,派生类可以增加成员,也可以隐藏和覆盖基类的成员。对于公有继承,基类成员的访问权限在派生类保持不变。5、(2分)类与对象有什么区别?类是类型,是对象的抽象,对象是类的具体实例。一个类可以有多个对象,每个对象都有自己的存储单元,而类不占存储单元。三、(6分) 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 下面程序的运行结果#include<iostream.h>classB{public:B(){}B(inti){b=i;}virtualvoidvirfun(){cout<<"B::virfun()called.\n";}private:intb;};classD:publicB{public:D(){}D(inti,intj):B(i){d=j;}private:intd;voidvirfun(){cout<<"D::virfun()called.\n";}};voidfun(B*obj){obj->virfun();}voidmain(){D*pd=newD;fun(pd);}D::virfun()called.四、(9分)下面的程序可以统计命令行第一个参数中出现的字母个数,请填充下面空白,完成程序。#include<stdio.h>#include<ctype.h>voidmain(intargc,argv[];){char*str;intcount=0;if(argc<2)exit(1);str=;while(*str)if(isalpha())count++;printf("\n字母个数:%d\n",count);}提示:intisalpha(intch)函数功能是检查ch是否是字母①char*②argv[1]③*str++五、(8分)定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stck[]和一个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push()和Pop()。constintSIZE=27;classStack{public:Stack():tos(0){};voidPush(charch);charPop();private:charstck[SIZE];inttos;};voidStack::Push(charch){if(tos==SIZE)cout<<"\nStackisfull\n";else{stck[tos]=ch;tos++;}}charStack::Pop(){if(tos==0){cout<<"\nStackisempty\n";return0;}tos--;returnstck[tos];}六、(10分)完成下面的函数,对有n个元素的数组a,使数组元素按逆序排列。voidinverse(int*a,intn){}inti,*p;p=newint[n];for(i=0;i<=n-1;i++)p[i]=a[i];for(i=0;i<=n-1;i++)a[i]=p[n-i-1];delete[]p;七、(12分)下面的函数统计子字符串substr在字符串str中出现的次数,如果substr在str中不出现,则返回值0。请完成该函数。intstr_count(char*substr,char*str){intcount=0;char*pChar;if(substr==NULL||str==NULL)returncount;while(*str!='\0'){pChar=substr;while(*pChar==*str){pChar++;if(*pChar=='\0'){count++;break;}elsestr++;}//Matchwhile(*pCh...)statementstr++;}//Matchwhile(*str...)statementreturncount;}
本文档为【三套期末考试题C 含解题答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
奎林
人民老师
格式:pdf
大小:462KB
软件:PDF阅读器
页数:0
分类:高中语文
上传时间:2019-07-03
浏览量:0