C++程序设计与应用基础第二章 类和对象习题答案
- 格式:doc
- 大小:34.00 KB
- 文档页数:16
C++程序设计与应用基础第二章类和对象习题答案1、请完成下列填空题1)在C语言中,编程的单位是___函数__:在C++语言中,编程的单位是____类__。
2)在下面程序的横线处填上适当的语句,使类型该程序执行结果为10。
#include <iostream.h>class MyClass{pub1ic:——MyClass(int a){x=a;}//为x置值——int GetNum(){return x;} //取x值private:int x;};void main(){Myclass my(10);Cout<<my.GetNum()<<end;}3)在类中定义和实现的函数称为__内联函数_______。
4)对类中的成员函数和属性的访问是通过___public___、___protected___和___private___这3个关键字来控制的。
5) ___new___运算符对指定类型对象动态分配内存并返回该类型的__指针___。
6)假定用户没有给一个名为MyClass的类定义构造函数,则系统对其定义的默认构造函数形式为___MyClass()_____。
2、编程题1)定义一个复数类imaginary。
用友元函数实现该类的加、减、乘和除运算。
答案:class Imaginary{public:Imaginary(float a,float b);friend Imaginary Add(Imaginary& img1,Imaginary& img2);friend Imaginary Sub(Imaginary& img1,Imaginary& img2);friend Imaginary Mul(Imaginary& img1,Imaginary& img2);friend Imaginary Div(Imaginary& img1,Imaginary& img2);private:float x,y;};Imaginary::Imaginary(float a,float b){x=a;y=b;}Imaginary Add(Imaginary& img1,Imaginary& img2) {float a,b;a=img1.x+img2.x;b=img1.y+img2.y;return Imaginary(a,b);}Imaginary Sub(Imaginary& img1,Imaginary& img2) {float a,b;a=img1.x-img2.x;b=img1.y-img2.y;return Imaginary(a,b);}Imaginary Mul(Imaginary& img1,Imaginary& img2) {float a,b;a=img1.x*img2.x-img1.y*img2.y;b=img1.x*img2.y+img1.y*img2.x;return Imaginary(a,b);}Imaginary Div(Imaginary& img1,Imaginary& img2) {float a,b;if((img2.x*img2.x+img2.y*img2.y)!=0){a=(img1.x*img2.x+img1.y*img2.y)/(img2.x*img2.x+img2.y*img2.y); b=(img1.y*img2.x-img1.x*img2.y)/(img2.x*img2.x+img2.y*img2.y); return Imaginary(a,b);}elsereturn Imaginary(0.0,0.0);}2)定义类Rational。
该类存放分数形式的有理数。
要求如下所述。
(1)定义带默认参数值的构造函数,默认分数为1。
(2)定义私有变量X和Y分别存放分子和分母。
同时分子分母要以最简形式存放。
例如:分数3/9应该以1/3形式存放。
(3)定义成员函数Add、sub、Mul和Div。
计算结果仍然以最简形式存放。
(4)以X/Y的形式打印分数。
(5)以浮点数形式打印分数。
3)定义整数集合intset,该类包括以下函数成员答案:#include <iostream.h>#include <stdlib.h>class Rational{public:Rational(int a=1,int b=1){int c;c=Common_Divisor(a,b);X=a/c;Y=b/c;}Rational Add(Rational& r);Rational Sub(Rational& r);Rational Mul(Rational& r);Rational Div(Rational& r);void Print(){cout<<"X/Y="<<X<<"/"<<Y<<endl;}void PrintPoint(){if(Y==0) exit(0);cout<<"X/Y="<<double(X)/Y<<endl;} int Common_Divisor(int a,int b); private:int X,Y;};Rational Rational::Add(Rational& r) {int a,b,c;a=X*r.Y +Y*r.X;b=Y*r.Y;c=Common_Divisor(a,b);return Rational(a/c,b/c);}Rational Rational::Sub(Rational& r) {int a,b,c;a=X*r.Y-Y*r.X;b=Y*r.Y;c=Common_Divisor(a,b);return Rational(a/c,b/c);}Rational Rational::Mul(Rational& r){int a,b,c;a=X*r.X;b=Y*r.Y;c=Common_Divisor(a,b);return Rational(a/c,b/c); }Rational Rational::Div(Rational& r){int a,b,c;a=X*r.Y;b=Y*r.X;c=Common_Divisor(a,b);return Rational(a/c,b/c);}int Rational::Common_Divisor(int a,int b) {int t,c;if(a<b){t=a;a=b;b=t;}do{c=a%b;a=b;b=c;}while (c!=0);return a;}#include <iostream.h> class intSet {public:intSet();intSet(int a[],int size);void Empty();bool IsEmpty();bool IsMemberOf(int a);bool Add(int a);bool Sub(int a);bool IsEqual(intSet& Set);intSet Intersection(intSet& Set); intSet Merge(intSet& set);void Copy(intSet& Set);void Print();private:int element[100];public:int EndPosition;};intSet::intSet(){//初始化整数集合元素for (int I=0;I<100;I++)element[I]=0;EndPosition=-1;}intSet::intSet(int a[],int size) { if (size>=100)EndPosition=99;elseEndPosition=size-1;for(int I=0;I<=EndPosition;I++) element[I]=a[I];for(I=size;I<100;I++)element[I]=0;}void intSet::Empty(){//清空整数集合元素for(int I=0;I<100;I++)element[I]=0;EndPosition=-1;}bool intSet::IsEmpty() {//判断整数集合是否为空if(EndPosition==-1)return true;elsereturn false;}bool intSet::IsMemberOf(int a) {for(int I=0;I<=EndPosition;I++)if(element[I]==a)return true;return false;}bool intSet::Add(int a) {//能否增加一个元素,需要知道:1.该元素是否已经存在:2.整数集合是否已经存满if(IsMemberOf(a))return true;elseif(EndPosition=99)return false;else{EndPosition++;element[EndPosition]=a;return true;}}bool intSet::Sub(int a) {//能否删除一个元素,需要知道整数集合是否已存在该元素int pos;if(!IsMemberOf(a))return false;for (int I=0;I<=EndPosition;I++)if(element[I]==a){pos=1;break;}for (I=pos;I<EndPosition;I++)element[I]=element[I+1];EndPosition--;return true;}bool intSet::IsEqual(intSet& set){//判断两个整数集合是否相等bool Equal;if(EndPosition!=set.EndPosition)return false;for (int I=0;I<=EndPosition;I++){Equal =false;for (int j=0;j<=set.EndPosition;j++)if(element[I]==set.element[j]){Equal=true;break;}if(!Equal)return false;}return true;}intSet intSet::Intersection(intSet& set) {//求两个整数集合的交集int a[100],size =0;for (int I=0;I<=EndPosition;I++)for (int j=0;j<=set.EndPosition;j++) if(element[I]=set.element[j]){a[size]=element[I];size++;break;}return intSet(a,size);}intSet intSet::Merge(intSet& set) { //求两个整数集合的并集int a[100],size;for (int I=0;I<=EndPosition;I++)a[I]=element[I];size=EndPosition+1;for (I=0;I<=set.EndPosition;I++)if(IsMemberOf(set.element[I])) continue;else{if (size==99)break;a[size]=set.element[I];size++;}return intSet(a,size); }void intSet::Copy(intSet& set) {for (int I=0;I<=set.EndPosition;I++)element[I]=set.element[I];EndPosition=set.EndPosition; }void intSet::Print(){for (int I=0;I<=EndPosition;I++)cout<<"element["<<I<<"]="<<element[I]<<endl;}4)定义和实现栈类stack,栈的数据数据结果如图所示。