东南大学 C++ 第二学期 期末复习二-含答案_第1页
东南大学 C++ 第二学期 期末复习二-含答案_第2页
东南大学 C++ 第二学期 期末复习二-含答案_第3页
东南大学 C++ 第二学期 期末复习二-含答案_第4页
东南大学 C++ 第二学期 期末复习二-含答案_第5页
免费预览已结束,剩余46页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东南大学C++第二学期期末复习二_含答案东南大学C++第二学期期末复习二_含答案东南大学C++第二学期期末复习二_含答案V:1.0精细整理,仅供参考东南大学C++第二学期期末复习二_含答案日期:20xx年X月选择题:(每题1分,共30分)以下程序的输出结果是CA)1B)7C)9#include<iostream.h>voidfut(int**s,intp[2][3]){**s=p[1][1];}voidmain(){staticinta[2][3]={1,3,5,7,9,11};int*p;p=newint;fut(&p,a);cout<<*p<<endl;}执行以下程序后,y的值是_(B)_A)17B)18C#include<iostream.h>voidmain(){staticinta[]={2,4,6,8,10};inty=0,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);cout<<y<<endl;}定义一下类:classX{inta;public:X(intx=0){a=x;}};classY:publicX{intb;public:Y(intx=0,inty=0):X(y){b=x;}};在下列选项的说明语句中,存在语法错误的是(C)。A.X*pa=newY(1,2)B.Xa1=Y(1,3);C.Xb2(2,3);Y&a2=b2;D.Yb3(10);Xa3(b3);下列关于虚函数描述中正确的是(B)。A.虚函数可以是一个static类型的静态成员B.虚函数可以是一个非静态成员C.虚函数实现静态多态性D.基类中采用virtual说明一个虚函数后,派生类中定义相同的原型的虚函数时,可不必加virtual说明若磁盘上已存在某个文本文件,其全路径文件名为:d:\dir\test.txt,下列语句中能以”读文本文件”的方式打开该文件的是(B)。A.ifstreamfile(“d:\dir\test.txt”);B.fstreamfile(“d:\\dir\\test.txt”);C.fstreamfile(ios::in);file.open(“d:\dir\test.txt”);D.ifstream*file=newifstream(“d:\\dir\\test.txt”);定义如下变量和数组:inti;intx[3][3]={1,2,3,4,5,6,7,8,9};则以下语句的输出结果是(C)。for(i=0;i<3;i++) cout<<x[i][2-i];A.159B.147C.357voidg((void*)(int,int,int),int,int)的参数个数是(A)。A.3个B.5个C.1个D.无法确定现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明(28)是正确的。A.list&list::operator==(constlist&a);B.listlist::operator==(constlist&a);C.bool&list::operator==(constlist&a);D.boollist::operator==(constlist&a);若有说明:intt[3][2],*p=t[0];能正确表示t[2][1]的一组表达式是_(D)_A)**(t+2)+1,*(p[0]+5),**t+3B)**(t+2+1),*p[2][1],**(t[2]+1)C)*(t+2)+1,*p[5],*(t[0]+2)+1D)*(*(t+2)+1),p[5],*(t[2]+1)若有说明:intt[3][2],*p=t[0];能正确表示t[0]的一组表达式是_(27)_A)*(t+0),pB)**t,*pC)p[0],**tD)**t+0,*p[0]若有说明:intt[3][2];则表达式:&t[0]+1表示_(B)_A)第1行的行指针,一级指针B)第1行的行指针,二级指针C)元素t[0][1]的地址D)元素t[1][0]的地址设有说明:int*p,*q,*t,x=5;运行以下程序段,输出结果是_(C)_A)5随机数B)随机数5C)出错D)p=newint;q=&x;t=p;p=q;q=t;deletep;cout<<*p<<'\t'<<*q<<endl;阅读程序题以下程序运行后,输出结果是(1)(2)(3)(4)。(8分)4*24*4*24*4*24*intf(inta,intb){ if(a>b)returnb+a;elsecout<<b*f(++a,--b)<<'*'<<'\n'; returna*f(a,b);}voidmain(){intn; n=f(1,3); cout<<n<<'\n';}程序#include"iostream.h"voidfun(int*s,intn){ intf=10;1515x=25 else{ fun(&f,n-2); *s=f*5; cout<<f<<'\n'; } }voidmain(){ intx=20; fun(&x,5); cout<<"x="<<x<<'\n';}程序输出的第一行是4,第二行是5,第三行是6。程序#include<iostream.h>#include<iomanip.h>Doublex,u,v,f(double),g(double),t(double,double(*)(double));voidmain(){ x=4.0; u=t(x,f); v=t(x,g); cout<<"u="<<setw(4)<<u<<endl; cout<<"v="<<setw(4)<<v<<endl;}doublet(doublea,double(*f)(double)){return(*f)(a*a);}doublef(doublex){returnx+2.0;}doubleg(doublex){returnx-2.0;}程序输出的前2行分别是:_7,8 u=18v=14程序#include"iostream.h"classbase{ inti;public: base(intI=0):i(I){} virtualintsum(){returni;}};classD:publicbase{ intj;public: D(intI=0,intJ=0):base(I),j(J){} intsum(){returnbase::sum()+j;}};voidcall(baseb){cout<<"sum="<<b.sum()<<endl;}voidmain()sum=10sum=10sum=10sum=10sum=10 Dd(10,47); pb=&d; call(b); call(d); call(*pb);}程度输出的第一行9,是第二行是10第三行是11。35357#include<iostream.h>intf(intx){ ints=0; for(intj=2;j<=x;j++) if(x%j==0){ x/=j; s+=j; } returns;}voidmain(void){ for(inti=3;i<10;i++) if(i==f(i)) cout<<i<<endl;}程序运行后输出的第一行是12第二行是13第三行是14。程度#include"iostream.h"voidf(intj){ if(!j){ cout<<j;return;} if(j%2){f(j/10);cout<<j%10;} else{cout<<j%10;f(j/10);}}voidmain(){ f(0);cout<<'\n'; f(1357);cout<<'\n'; f(2468);cout<<'\n';}程序运行后输出的第一行是第二行是第三行是程序#include<iostream.h>classX{public: voidvirtualf(){cout<<"X:11"<<endl;} voidvirtualg(){cout<<"X:22"<<endl;}};B::55B::55B::44X::22public: voidf(){cout<<"A::33"<<endl;}};classB:publicA{public: voidf(){cout<<"B:44"<<endl;} voidg(inti=10){cout<<"B:55"<<endl;}};voidmain(void){ Bb; X*px=&b;b.g() px->f();px->g();}程序输出的第一行是,第二行是,第三行是_。程序#include<iostream.h>classAx=1Ax=1A_1A_2A_22~AA_23~AA_24~A4~A3~Apublic:A(inta){x=a;cout<<"x="<<x<<'\t'<<"A_1"<<'\n';}A(A&s){x=s.x+1;cout<<"A_2"<<'\n';}~A(){cout<<x<<'\t'<<"~A"<<'\n';}};voidmain(void){Af1(1),f2(f1);f2=A(f1);f1=A(f2);f2=A(f1);}程序共输出行,第一行是,第四行是,第六行是。程序x=4,y=10x=4,y=16x=4,y=10x=4,y=16x=4,y=6i=34x=8,y=7classA{inty;staticintx;public: operatorint(){returnx+y;} Aoperator++(int){returnA(x++,y++);} A(intx=2,inty=3){A::x=x+x;A::y=y+y;} voidprint(){cout<<"x="<<x<<",\t"<<"y="<<y<<endl;}};intA::x=23;voidmain(void){Aa(30,5),b(10,8),c;a.print();b.print();c.print();inti=a+b;cout<<"i="<<i<<endl;c++;c.print();}程序输出的第一行是,第二行是,第三行是,第四行是,第五行是。#include<iostream.h>inti=1;intfac(intn){ staticintf=1;66,6 f=f*n;66,6}voidmain(){ inti,p=0; for(i=1;i<=3;i++)p=fac(i); cout<<p<<endl; p=0; for(i=1;i<=3;i++)p=p+::i++;//A cout<<p<<','; p=1; for(i=1;i<=3;i++)p=p*--::i;//B cout<<p<<endl;}问题1:该程序的第一行输出为(,第二行输出为下列程序的输出结果是。#include"iostream.h"inta=100;voidfun(inti,intj,int*k){ j+=i; *k=j-i;}voidmain(){ inta,b,c; fun(17,18,&a); fun(19,a,&b);18,18,18 fun(a,b,&c);18,18,18 cout<<a<<','<<b<<','<<c<<endl;}以下程序运行后,输出结果是。#include<iostream.h>classA{public: inti; voidprint(){cout<<i<<"insertA\n";}};classB:publicA{public: virtualvoidprint(){cout<<i<<"insertB\n";}};classC:publicB{3insertC3insertA::i3insertC3insertA::i3insertC3insertA::i10insertA C(){A::i=10;} inti; voidprint() { cout<<i<<"insertC\n"; cout<<i<<"insertA::i\n"; }};voidmain(){ Aa; A*pa; Bb,*pb; Cc,*pc; c.i=1+(b.i=1+(a.i=1)); pc=&c; pc->print(); pb=&c; pb->print(); pa=&c; pa->print();}完善程序下面程序的功能是:先输入一行字符串,并从输入的字符串中找到最小的字符(其ASCII值最小),用min保存该字符。然后将该字符前的所有字符顺序向后移动一个字符的位置。最后,将保存的字符放在该字符串的第0个位置上。例如:设输入的字符串为“bcdfae”,其中字母a为最小字符,经移动处理后,输出的字符串为“abcdfe”。#include<iostream.h>voidfun(){//char*strcharmun,*q,*p;;//p=q=strmin=*p++;while(*p!=0){if(){min=*p;q=p;}//*p<minp++;}p=q;While(){*p=*(p-1);;}//q>str//p--,q--*q=min;}voidmain(){charstr[80];cin.getline(str,80);fun(str);cout<<str<<’\n’;}本程序被完善后输出以下结果。C++langugeprogrammingTheendatthistimeofday!#include<iostream.h>#include<string.h>classA{public: staticinti; char*ps; A(char){//*s ps=newchar[strlen(s)+1]; strcpy(,s);//ps } ~A(){ if()cout<<"Theend";//i==0elsecout<<"atthistimeofday!\n"; if(ps)delete[]ps; i++; } A&operator=(A&b){ if(b.ps){ ps=newchar[strlen()+1];//b.ps strcpy(ps,b.ps); } elseps=0; return;//*this }};intA::i;voidmain(){ As1("programming"),s2("C++languge"); cout<<s2.ps<<'\t'; s2=s1; cout<<s2.ps<<'\n';}以下程序功能是:从一个字符串str中删除或添加一个指定的字符,若指定的字符c出现在str中,则从str中删除第一个值为c的字符;否则把字符c添加到str的尾部。在程序中,函数dele()从字符串中删除一个字符;函数add()添加一个字符到字符尾部;函数search()用于查找指定的字符是否在字符串中,若在,则返回所在位置,否则返回0。#include<iostream.h>#include<iostream.h>char*sercher(char*s,charch){ while(*s) if(*s++==ch)return;//s-1 return0;}voiddele(char*s,charch){ char*p1=search(s,ch),*p2=p1+1; while(*p2)*p1++=//*p2++ *p1='\0';}voidadd(char*s,charch){ while(*s)s++; =ch;*s='\0';//*s++}voidmain(){ charstr[80]="abc12123",c; cout<<str<<'\n';cout<<"输入一个字符"; cin>>c; void;if(search(str,c))fp=dele;//(*p)(char*,char) elsefp=add; fp();cout<<str<<'\n';//(str,c)}班主任根据全班n个学生某课程的考试成绩建立一个链表,每个节点包括学号、成绩和该成绩在全班的名次。最后按排名顺序输出学号和成绩。[程序10分]#include<iostream.h>structnode{intgrade,n;longnum;node*point;};node*trans(node*h,intn){//建立含报名者的档案链表node*p;p=newnode;cin>>p->num>>p->grade; p->n=0;;//node*h=pfor(inti=0;i<n-1;i++){ p->point=newnode;;//p=p->point; cin>>p->num>>p->grade; p->n=0;}p->point=NULL;returnh;}node*sort(node*head,intn){//按成绩排名次并输出node*p,*q;intt=0,k=1;p=head;while(k<=n){ p=head; while(p!=NULL) if(&&p->grade>t){//p->n==0 t=p->grade;q=p;p=p->point; } elsep=p->point; q->n=k; ;//k++; ;//t=0; cout<<q->num<<'\t'<<q->grade<<'\t'<<q->n<<'\n';}returnhead;}voidmain(){node*student;intn;student=NULL;cin>>n;student=trans(student,n);cout<<"\nnumber:"<<'\t'<<"grade:"<<'\t'<<"排名:\n";student=sort(student,n);}以下程序定义了一个二维坐标点类Point,派生矩形类Square。矩形左下角坐标从基类继承,矩形类只定义右上角坐标,还定义表示颜色的字符串。执行下面的主程序将得到结果:矩形s1:x=1y=3width=5,high=6,color=red矩形s2:x=1y=3width=5,high=6,color=redYellow[程序10分]#include<iostream.h>#include<string.h>classPoint{private:doublex,y;public: Point(doublexv=0,doubleyv=0){x=xv;y=yv;} doublegetx(){returnx;} doublegety(){returny;} voidShow(){cout<<"x="<<x<<"y="<<y;}//输出对象信息};classSquare:publicPoint{//带颜色的矩形(square)类 doublehx,hy; char*color;public: Square(){hx=0;hy=0;} Square(doublexv,doubleyv,doublehxv,doublehyv,char*s):(11){ hx=hxv;hy=hyv; color=newchar[9]; strcpy(color,s); } Square():Point(rr){//拷贝构造函数//Square&rr hx=rr.hx;hy=rr.hy; color=newchar[strlen()+6];//rr.color strcat(strcpy(),"");//color,rr.color//Yellow } voidShow();};voidSquare::Show(){//输出矩形的左下角坐标、宽度、高度和颜色 Point::;//Show() cout<<"\twidth="<<hx<<','<<"high="<<hy; cout<<",color="<<color<<'\n';}voidmain(){ Squares1(1,3,6,9,"red"),s2(s1); cout<<"矩形s1:"<<'\t'; s1.Show(); cout<<"矩形s2:"<<'\t'; s2.Show();}以下程序实现一个由动态数组构成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论