C++与数据结构 哈理工习题集_第1页
C++与数据结构 哈理工习题集_第2页
C++与数据结构 哈理工习题集_第3页
C++与数据结构 哈理工习题集_第4页
C++与数据结构 哈理工习题集_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、C+第一章整型int字符型char浮点型float double布尔型bool空类型void/取整取余&与|或+i前置自增i+后置自增-i前置自减i后置自减 el?e2:e3 el 为 1 时取 e2 , el 为 0 时取 e3练习1.开发一个C+程序需要哪几个阶段?编辑,编译,预处理,链接,装入,执行.关系运算符和赋值运算符哪个优先级高?关系运算符.选择题1 .设有定义:int x=0,y=5;表达式y+=x/5+4;的值是DA.O B.5 C.4 D.9.设有定义:int m=8,i,j;double x=1.42,y=5.2;以下符合C+语法的表达式是D A.x+y%=m B.(m-2

2、)+ C.i=j*5=3 D.m+=m-=2*(j=3).设有定义:inta=5,b=2;以下值为1的表达式是BA.!(b=a B.b!=a C.a!=b II a=b D.a0&b2.设有定义:int x=2,y=3,z=4;以下能正确表示1/xyz的表达式是CA.l/x*y*z B.l/(x*y*z) C.1.0/x/y/z D.l/x/y/(float)z.设有定义:int a,b;表达式(a=3,b=5,ab)?a+:b+,a+b 的值是 CA.3 B.8 C.9 D.10.设有定义:charcl=a,c2=A;表达式 clc2?cl:c2+32 的值是 CA.O B.l CH DJA

3、4 .写出下类程序运行结果3. #include using namespace std; int main() float x=12.345;int y=100;coutxyendl;y=x*y;coutyendl; return 0;)1234.5 1234#include using namespace std; void main() int m,n(2),k;k=+m;coutnk=nkendl;k=m+n+;coutmnkendl; k=n-m;coutmnkendl;k=(m=n); coutkendl;)k=2 234 220 1#include#include using n

4、amespace std;void main() int a(2),b(3);double c,d;c=-0.5;d=8.123456;coutsetw(3)a+bendl; coutsetw(10)setfill(*) abendl;coutsetprecision(5)d endl;coutsctprccision(4)c:lcd endl;5 *6 8.1235 -4.062coutvvcTvv是素数 vvendl;););void main()(Integer a(15); 类的实例化的名称不能是一样的。就像变量名,不同的变 量不能用相同的变量名a.lsOdd();coutendl;a

5、.lsPrime();coutendl;Integer b(31);b.lsOdd();coutendl;b.lsPrime();coutendl;第6章练习1 .以下表达中不正确的选项是BA.在公有继承这种,基类的public和protected成员的访问属性在派生类中不变,而基类的 private成员不可访问B.对于保护继承,基类的public,protec ted和private成员在派生类中的访问属性同AC.对于私有继承,基类的public,protected成员都以private成员的身份出现在派生类中,而 基类的private成员为不可访问成员D.对于保护继承,基类的public,

6、protected成员在类外通过派生类的对象都不能访问.如果一个函数说明为一个类的友元,那么DA.该类可以使用该函数的局部变量B.该函数可以使用该类中成员函数的局部变量C.该函数只能使用该类的数据成员D.该函数可以使用该类的任意成员.在派生类的构造函数的成员初始化列表中,不能包含BA.基类的构造函数B.派生类中子对象的初始化C.基类的子对象的初始化D.派生类中数据成员的初始化4,设类B是由类A继承的。当创立一个类B的对象时,构造函数的调用顺序是AA.先调用类A的构造函数,然后调用类B的构造函数B.先调用类B的构造函数,然后再调用类A的构造函数C不调用类A的构造函数D.是定义时类A和类B出现的位

7、置5如果某类是从另一个类继承来的,那么析构函数的调用顺序是DA.鱼类的继承关系无关B.先调用基类的析构函数,在调用本类的析构函数C.不调用基类的析构函数D.先调用本类的析构函数,在调用基类的析构函数2 ,写出程序运行结果1 .#includeclass Basepublic:void seti(int x)i=x;int geti()return i; protected:int i;class Derived:Basepublic:Base:seti;void setj(int x)j=x;int getij() retum(j)*(+i); protected:intj;);int mai

8、n() Derived obj;obj.seti(5);obj.setj(7);coutobj.getij()endl;return 1;423 .程序填空2.#includeclass Apublic:A(int i,int j)a=i,b=j;void Move(int x,int y)a+=x;b+=y; voidShow()coutv(avJb)n”; private:int a,b;);class B:public Apublic:B(int i,int j,int k,int l):A(i,j),x(k),y(l) void Show()coutxH,nyendl; void fu

9、n()Move(3,5);void fl() A:Show();private:int x,y;);void main()A e(l,2);e.Show();B d(3,4,5,6);d.fun();d.A:Show(); d.B:Show(); d.fl();)5,61 ,线面成包含一个人员类person(包括编号和姓名),由此派生出学生类student和教师类teacher。类student包括学号姓名班级和成绩,类teacher包括编号姓名部门和职责。 根据不同的对象显示不同的内容#include #includeclass person int no;char namc10;publi

10、c:person(int n,char*p) no=n; strcpy(name,p); void display()coutnon nnameendl; );class student:public personchar depart10;int degree;public:student(int n,charts,charM,int c):person(n,s) strcpy(depart,d);degree=c; void displayO cout ”学号和姓名:;person: display。;coutv班级:departv成绩:vdegreeendl;);class teache

11、r:public person char depart10,prof10;public:teacher(int n,charts,chared,char*p):person(n,s) strcpy(depart,d);strcpy(prof,p);void displayO coutvv”编号和姓名:n ;person: :display();coutv部门:departvv 职称:vprofvvendl;);void main() student al(025J张三“,“电子技术班”,85);al.displayO;teachertl(316,“刘强,r计算机系教授)tl.displayO;

12、)person (n,s) person (n,s)2,下面的程序中包括一个圆类circle, 一个桌子类table和一个圆桌类roundtable的定义 其中,类roundtable继承了类circle和类table。该程序能输出一个圆桌的高度桌面面积和颜 色。#include#includeclass circle(double radius;public:circle(double r=0)radius=r;double gctarca()return radius*radius*3.14159;);class table double height;public:table(doubl

13、e h=O)height=h;double getheight()return height;);class roundtable:public table,public circle char *color;public:roundtable(double h=0,double r=O,char*c=O):table(h),circle(r)(color=new charstrlen(c)+l;strcpy (color,c);)char*getcolor()return color;);void main() (roundtable rt(l .25,2.3 J橙黄色”);coutv如圆桌

14、属性数据:“ vvendl;coutn 高度:n rt. getheight()n 米 nendl;coutvv面积:“vrt.getarea()vv平方米”vvendl;cout颜色:rt.getcolor()vendl;)cirde table char20 strcpy getheight getarea getcolor4.设id个father类,一个mother类和一个child类。其中child类继承father类和mother 类。Father类和mother类都包含星河明两个数据成员。Child类仅包含名数据成员。要求 一个child类的对象能够输出父母和自己的姓名#inclu

15、declass fatherchar a100;public:father()coutvv”输入父亲姓名:“vvendl;cina;void outputName()coutvv”父亲姓名:vvavvendl; ;class motherchar b100;public:mother()coutvv”输入母亲姓名:“ vvendl;cinb;void outputName()coutvv”母亲姓名:vvbvvendl;;class child:public father,public mother char c100;public:child()coutvv”输入孩子姓名:“vvendl;ci

16、nc;void outputName() father:outputName(); mother:outputName();coutvv孩子姓 名:“vvcvvendl;);void main()child d1;d1.outputName();第7章1.选择题1在以下运算符重载的描述中,D是正确的A.可改变操作个数B.可改变优先级C.可改变结合性D.不可改变语法结构2.o在以下纯虚函数和抽象类的描述中,C是错误的A.纯虚函数么有具体实现B.抽象类是具有纯虚函数的类C抽象类的派生类一定不再是抽象类 D.抽象类不能建立对象3.在以下动态联编的描述中,A是错误的A.动态联编是在编译时确定操作函数的

17、B.动态联编是以虚函数为基础的C.动态联编必须通过指针或引用来调用虚函数D.动态联编是在运行时确定操作函数的4.C是一个在积累中至少有一个纯虚函数,他在该基类中没有具体的实现,但要求派生类必 须有自己的版本A.虚构造函数B.虚析构函数C.纯虚函数D.静态成员函数5,假设在一个类中至少有一个纯虚函数,那么称该类为CA.虚基类B.多重派生类C抽象类D.友元类2 .写出程序运行结果1 .#includevirtual void fun(int x)coutnBaseclass Baseclass x=nxendl;public:;class subclass:public Basevirtualvo

18、idfun(intx)coutHsubclass x=nxendl; ); void Test(Base *p)int a=2;p-fun(a); void main() Base objl;subclass obj2;Test(&obj l);Test(&obj2);)Base class x=2subclass x=22.#include#includeclass baseprotected:int a,n;public:virtual void setab(int i,int j=0)a=i;n=j;virtual void disp()=0;class subclass:public

19、Basevirtualvoidfun(intx)coutHsubclass x=nxendl; ); void Test(Base *p)int a=2;p-fun(a); void main() Base objl;subclass obj2;Test(&obj l);Test(&obj2);)Base class x=2subclass x=22.#include#includeclass baseprotected:int a,n;public:virtual void setab(int i,int j=0)a=i;n=j;virtual void disp()=0;;class pa

20、l:public basepublic:voiddisp()couta:icaendl;class pa2:public basepublic:voiddisp() couta*a*aendl;class pan:public basepublic:voiddisp() coutpow(double(a),double(n)end 1;void main() base *pa;pal obi; pa2 ob2;pan ob3;pa=&ob 1 ;pa-setab( 10);pa-disp();pa=&ob2;pa-setab(5);pa-disp();pa=&ob3;pa-setab(5,4)

21、;pa-disp();)100 125 625.程序填空以下程序对电雷用成员函数进行运算符“ + ”重载,用友元函数进行运算符重载,以 实现两点坐标的相加相减运算#includeclass pointprivate: int x,y;public:point(int i=0,int j=0) x=i;y=j;void display() coutn(,x,yn),endl;point operator+(point)return point(x+p.x,y+p.y);friend point operator-(point &,point &););point operator-(point

22、&q,point &p)return point(q.x-p.x,q.y-p.y);void main() point pl(4,5),p2(3,9),p3;p3=p 1 +p2; p3.display();p3=p l-p2; p3.display();)Point friend.用虚函数和抽象类的概念设计求正方体,圆柱体和球体体积的程序#include const double Pl=3.14159265;class circle public:circle(double r) radius = r;virtual double area() return 0.0;virtual doub

23、le volume() return 0.0;protected:double radius;class sphere:public circle public:sphere( double r ):circle( r)double area() return 4.0 * PI * radius * radius;double volume()return 4.0 * PI * radius * radius * radius / 3-0;class column:public circle public:column( double redouble h ):circle( r) heigh

24、t = h; double area()return 2.0 * PI * radius * ( height + radius ); double volume()return PI * radius * radius * height;private:double height;void main() circle *p;sphere sobj(2);p = &sobj;cout 球体: endl;cout 体积= p-volume() endl;cout 外表积= p-area() endl;column cobj( 3,5);p = &cobj;cout 圆柱体: endl;cout

25、体积= p-volume() endl;cout 外表积= p-area() endl;第9章1 .单项选择题1.A是数据的基本单位A.数据元素B.数据项C数据对象D.一个字母2,数据对象是具有相同性质的B的集合A.数据项B.数据元素C数据D.数据结构. D又合称为非线性结构A.集合结构和图形结构B.几何结构和树形结构C.集合结构和线性结构D.树形结构和图形结构.算法的有穷性是指CA.输出的数据是有限的B.描述算法的语句是有限的C.所需有的执行时间是有限的D.所需要的存储空间是有限的.一下关于线性表错误的说法是DA.线性表可以为空B.线性表长度可变C线性表中元素个数有限D.线性表中元素个数固定

26、.顺序表是线性表的BA.逻辑结构B.顺序存储结构C连接存储结构D.与线性表无关.设p指向单链表中的一个结点,如果要把有q指向的结点插入到p所指向的结点的后面, 需要的操作是DA.p-next=q;q-next=p-next;.q-next=p-next;p=q;C.q-next=p-next;p-next=q-next;D.q-next=p-next;p-next=q;.余单链表相比,双链表具有的优点是CA.可实现随机存取B.占用更少的存储空间C.访问某结点的前驱速度更快D.插入删除操作更方便.对于一个栈,设输入序列为123,4,5,那么B不可能是栈的输出序列A.2,3,4,1,5 B.5,4

27、,1,3,2 C.2,3,145 D.l ,5,4,3,2.程序设计中“函数的调用与返回” 一般通过B数据结构形式实现A.链表B.栈C.队列D.顺序表.在完成出队或读队头元素操作时,AA.必须判断队是否为空B.必须判断队是否为满C.要判别队列元素的类型D.不必做任何判断.“假溢出”现象会在C中发生A.顺序栈B.链式队列C顺序队列D.顺序表.多维数组各维的CA.上界固定,下界不固定B.上下界都是固定的C.上界不固定下界固定D.上下界都不固定 14.将二维数组A1020种元素按列优先顺序存储到一维数组B时Z 数组元素A49在B 中对应的元素是A.B36 B.B13 C.B89 D.B942 简答设

28、有编号为1, 2, 3的三辆列车,顺序开进一个展示结构的展台,请写出这三辆车开出车站 的顺序123 132 213 231 3215 种无 312第十章先序遍历 访问根节点,先序遍历左子树,先序遍历右子树 中序遍历中序遍历左子树,访问根节点,中序遍历右子树 后序遍历后序遍历左子树,后序遍历右子树,访问根节点 层次遍历 按层数由小到大,同一层从左到右顺序依次访问Eg:先序遍历ABDGECF中序遍历DGBEAFC后序遍历GDEBFCA后序遍历GDEBFCA层次遍历 ABCDEFG一个结点,子女个数称为其度数1 ,单项选择题.如果结点B有三个兄弟,其双亲结点为A,那么A的度是CA.2 B.3 C.4

29、 D.5.当以连接方式存储一个有n个结点的二叉树时,其二叉连接表中有 A个指针域为空A.O B.n-1 C.n+1 D.n.在一颗有18个结点的完全二叉树中,编号为7的结点的右子女的编号为 AA.15 B.16 C.17 D.无右子女.如下图的二叉树,分别写出其先序中序后序和层次遍历序列先序遍历 ABDGCEHIF中序遍历 DGBAHEICF 后序遍历GDBHIEFCA 层次遍历 ABCDEFGHI.一棵二叉树的终须序列和后续序列分别为BDCEAFHG和DECBHGFA请画出二叉树BDCE/A/FHGDECB/ HGF/ A. #includeusing namespace std;void

30、main() int a,b,c,sum;cinabc;int &resum=sum;resum=a+b+c;coutsumendl;)18.编写程序将输入的一个三维正整数的各位数字分3行输出。Eg:输入456输出65 4第2章for(el;e2;e3)先计算el,判断e2的值e2为1,执行循环进行e3再判断e2 while先判断再执行do-while先执行再判断练习2写出运行结果1 .#include using namespace std; void main() int a=2,b=-3,c=3;if(a=b+c)coutH#nendl;else cout”*vendl;)“*”4. #

31、include using namespace std; void main() int i=0,s=0;for(;) i+=2;if(i8) coutsendl; break;if(i=6) continue;s+=i;)142. #include using namespace std; void main() int a=5;if(a+5) coutaendl; else coutaendl;)65. #include using namespace std; void main() int n,sum;do cinn; sum=0;for(int i=0;i5;i+)sum+=n%10

32、; n=n/10;if(i=4)|(n=0)break;)coutHsum=nsumendl;if(sum=0) break;while(l);)输入5238 316 24 0输出 sum=18 sum=10 sum=6sum=03. #include using namespace std; void main() for(int k=l,int s=0;k=10;k+);s+=k;cout,s=,sendl;)s=ll2,编写程序,用公式兀/4=1-1/3+1/5-1/7+.求n的近似值,直到最后一项的绝对值小于10八-6 为止第3章字符型数组定义长度有、0,要比字符个数多1Eg:输入一个

33、字符串存入数组a中,对该字符串中的每个字符用+3的方法进行加密后送入 数组am输出加密后结果#include void main() char a80,am80;int i=0;cout输入一串字符:;cina;while(ai!=,0,)ami=ai4-3;i+;cout 力口 密后结果:namendl;输入一串字符:string加密后结果:vwulqj 练习3.指针的两个运算符&和*的作用&取变量地址*指针变量所指向的对象的内容,写出运行结果1. #includevoid main() int a10=2,5,8,3,-6,9/2,10;int i=l;while(i9)coutai-ln

34、 ,ai+ lendl;i+=2;coutiendl;)#includeint main() char str| =nabcdefghijklmnopqrstuvwxyzH; char *ps=*”for(int i=l;i3;i+)coutpspsendl;for(int j=0;j26;j+)coutv*(str+j)v coutendl;)return 1;)G,7* 7* 7*, 卜 .、,卜 卜卜卜卜abcdefghijklmnopqrstuvwxyz2 8 8 -6-6 12 12 0 92. #includevoid main() intbx= 1,3,5,7,9,11,13,1

35、5);for(int*pb=&bx7;pb=bx;pb-)cout*pb”; coutendl;)15 13 11 97 5 3 1abcdefghijklmnopqrstuvwxyz#includevoid main() int *pl;double *p2;pl=new int(4);p2二new double3|;p20=1.5;p2l=2.5;p22=3.5;for(int n=0;n3;n+)coutp2n*(*p l)endl;)6 10 14.编写程序1 .输入10个学生一门课的成绩,分别统计大于平均值的人数和小于60分的人数。2,任意输入一个字符串,统计其中英文字母“a”和“i

36、”的个数,并将该字符串输出。 第4章字符串长度函数strlen()字符串拷贝函数strcpy。字符串连接函数strcat()第5章面向对象程序设计方法的基本特征抽象性封装性继承性多态性 构造函数可以重载,析构函数不能重载Eg:.日期类的定义实例#includeclass Date ( public:void SetDate(int y=2006,int m= 1 ,int d= 1)year=y;month=m0&m 13?m:l ;day=d;int IsleapYear()return(year%400=0)11(year%4=0&year% 100! =0);int GetYear()

37、return year;int GetMonth()return month;int GetDay()return day;void Print()coutyear,.,month7dayendl; private:int year,month,day;);.学生成绩类的定义实例#include#include#include class Student int examstaken;float *marks;public:char *name;void SetStudent(int e,float *m)examstaken=e;marks=m;float averagemark();voi

38、d format();void Print(););float Student: :averagemark() foat total=0;for(int i=0;iexamstaken;i+4-)total-F=marksi; return total/examstaken;void Student: :format() coutvsetw(10)vname,平均成绩:setprecision(4)setw(6)averagemark(); void Student:Print() cout学生:“;format();coutendl;练习1 ,单项选择.以下表达中不正确的选项是AA.类中的数

39、据成员可以是私有或公有的,而类中的成员函数必须是共有的B.拷贝构造函数的作用是使用一个已经存在的对象去初始化一个新的同类的对象C.类中的构造函数可以重载,而析构函数不能重载D.构造函数和析构函数都应是类的共有成员函数.以下关于类和对象的表达正确的选项是AA.一般只有通过具体的对象才能访问类的成员函数.类和对象之间没有联系C.对象是抽象的,而类是具体实现D.一个类的成员函数可以任意被调用.D不是构造函数的特征A.构造函数的函数名与类名相同构造函数可以重载C.构造函数可以设置缺省函数D.构造函数必须指定类型说明下类函数中C不能重载A.成员函数B.非成员函数C.析构函数D.构造函数下类函数中,A不是

40、类的成员函数A.有原函数B.拷贝构造函数C.析构函数D.构造函数类A的成员函数为void Set(A&a),其中A&a含义为AA.a是类A的对象引用,用作函数Set()的形参B.将a的函数地址赋给函数Set()C.变量A与a按位相“与”作为函数Set(的形参)D.指向类A的指针为a,写出一下程序的输出结果1. #include class AA public:void main()AA(int i,int j) A=i;B=j; AA *al,*a2;al=new AA(1,2);a2=new AA(5,6);al -print();a2-print();delete al;delete a2

41、;-AA()cout,Dcstructcd(nAn,Bvoid print()coutAn,nBendl;coutnConstructing(,A,V,BH).nn;Constructing v 1,2Constructing1,25,6DestructedDestructedint A:count=0; void main()2. #include2. #includeclass Astatic int count;public:A()+count;-A()-count;static int f()return count; coutA:f(),7,;A a;A *p=new A;coutA:f()V,; delete p;coutA:f();021.程序填空1.下面的程序输出小于2000的素数,且每行最多输出10个素数 #include#includeclass Primeint p;public:Prime(int n)if(n3)p=3;else p=n; void Run(););void Prime:Run() int k,j,flag,line=O;for(j=2J

温馨提示

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

评论

0/150

提交评论