C++程序设计基础课后答案--第五章(35页).doc
《C++程序设计基础课后答案--第五章(35页).doc》由会员分享,可在线阅读,更多相关《C++程序设计基础课后答案--第五章(35页).doc(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-C+程序设计基础课后答案-第五章-第 35 页5.1 阅读下列程序,写出执行结果1#include struct data int n ; float score ; ;void main() data a3 = 1001,87,1002,72,1003,90 , *p = a ; cout n endl ; cout n endl ; cout n+ endl ; cout (*p).n+ endl ; 2#include struct employee char name 20 ; char sex ; ; void fun( employee *p ) if( (*p).sex = m
2、 )cout (*p).name endl ; void main() employee emp5 = Liming, m, Wangxiaoping, f, Luwei, m ;int i ; for( i=0; i3; i+ ) fun( emp+i ) ; 3 #include struct node char * s ;node * q ; ; void main() node a = Mary, a+1 , Jack, a+2 , Jim, a ;node *p = a ;cout s endl ;cout q-s endl ;cout q-q-s endl ;cout q-q-q-
3、s endl ; 4#include class A public : int f1(); int f2(); void setx( int m ) x = m ; cout x endl; void sety( int n ) y = n ; cout y endl; int getx() return x ; int gety() return y ; private : int x, y ; ; int A:f1() return x + y ; int A:f2() return x - y ; void main() A a ; a.setx( 10 ) ; a.sety( 5 )
4、; cout a.getx() t a.gety() endl ; cout a.f1() t a.f2() endl ; 5 #include class T public :T( int x, int y ) a = x ; b = y ; cout 调用构造函数1. endl ; cout a t b endl ; T( T &d ) cout 调用构造函数2. endl ; cout d.a t d.b endl ; T() cout 调用析构函数.endl; int add( int x, int y = 10 ) return x + y ; private : int a, b
5、; ; void main() T d1( 4, 8 ) ;T d2( d1 ) ; cout d2.add( 10 ) endl ; 6 #include class T public: T(int x) a=x; b+=x; static void display(T c) couta=c.atb=c.bendl; private: int a; static int b; ; int T:b=5; void main() T A(3),B(5); T:display(A); T:display(B); 7 #include #include class point public : po
6、int( float x, float y ) a = x; b = y;? cout 点( a , b ) ; friend double d( point &A , point &B ) return sqrt(A.a-B.a) * (A.a-B.a) + (A.b-B.b) * (A.b-B.b) ; private: double a, b ; void main() point p1( 2, 3 ) ; cout 到 ; point p2( 4, 5 ) ; cout 的距离是: d( p1,p2 ) endl ; 8 #include class A public :A() a =
7、 5 ; void printa() cout A:a = a endl ; private : int a ; friend class B ; ; class B public: void display1( A t ) t.a + ; cout display1:a = t.a endl ; ; void display2( A t ) t.a - ; cout display2:a = t.a endl ; ; ; void main() A obj1 ; B obj2 ; obj1.printa() ; obj2.display1( obj1 ) ; obj2.display2( o
8、bj1 ) ; obj1.printa() ; 5.2 思考题1结构和类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材上的一个例程试一试,想一想做什么修改能使程序正确运行?2分析以下说明结构的语句 struct node int data; node error; /错误 node * ok; /正确 ;error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?3有说明 class A int a; double x;public: funMember(); A a1, a2, a3 ;编译器为对象a1,a2,a3开辟了什么
9、内存空间?它们有各自的funMember函数的副本吗?C+通过什么机制调用类的成员函数?4C+提供了默认版本的构造函数,为什么还需要用户自定义构造函数?编写一个验证程序,说明自定义构造函数的必要性。5试从定义方式、访问方式、存储性质和作用域分析类的一般数据成员和静态数据成员的区别,并编写一个简单程序验证之。6试从定义方式、调用方式分析静态成员函数和友员函数的区别。考察教材的例5-22,若class Goods的指针域Goods * next;被声明为私有(private)成员,程序会出现什么错误?做什么最小修改能使程序正确运行?请你试一试。1分析以下说明结构的语句struct Node int
10、 data;Node error; /错误Node * ok; /正确;error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?【答案】error是Node结构类型数据成员,错误。原因是结构定义的数据成员若为本身的结构类型,是一种无穷递归。ok是指向Node类型的指针,定义正确,占4字节。2本章例5-5中用辅助数组对结构数组做关键字排序,有定义person *index100;index数组存放结构数组元素的地址。如果把index定义改为int index100;用于存放结构数组元素的下标。可以实现对结构数组的索引排序吗?如何修改程序?请你试一试。【答案】可以。关键是
11、通过整型索引数组元素作为下标访问结构数组。表示为:allpii.name allpii.id allpii.salary有关程序如下:#includeusing namespace std;struct person /说明结构类型 char name10;unsigned int id; double salary; ;void Input( person, const int );void Sort( person, int,const int );void Output( const person, int,const int );int main() person allone100
12、; /说明结构数组int index100; /说明索引数组int total ; for(int i=0; i100; i+) /索引数组元素值初始化为结构数组元素下标indexi=i ;couttotal;cout输入职工信息:n;Input(allone,total);cout以工资做关键字排序n;Sort(allone,index, total);cout输出排序后信息:n;Output(allone,index,total);void Input( person all, const int n ) int i ; for( i=0; in; i+ ) / 输入数据 coutiall
13、i.name;cout alli.id;cout alli.salary ;void Sort(person all, int pi, const int n) int i,j; int t; /交换用中间变量for(i=1; in; i+) /以成员salary做关键字排序 for(j=0; jallpij+1.salary) /通过索引数组访问结构数组元素 t=pij; /交换索引数组元素值pij=pij+1;pij+1= t;void Output(const person all, int pi, const int n) for( int i=0; in; i+ ) / 输出排序后数
14、据coutallpii.nametallpii.idtallpii.salaryendl;3有以下结构说明和遍历单向链表的函数。函数内有错误吗?是什么性质的错误?请上机验证你的分析。struct Node int data; Node * next; ;void ShowList( Node *head ) while( head ) cout date next4结构和类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材上的一个例程试一试,想一想做什么修改能使程序正确运行?【答案】结构是数据的封装,类是数据和操作的封装。可以把结构看成是类的特例。结构
15、和类都可以用关键字struct或class定义。区别是,struct定义的结构或类的全部成员都是公有的,用class定义的结构或类不做声明的成员是私有的。若把struct改成class,只需要把全部成员定义为public就可以了。5有说明class A int a;double x;public:funMember();A a1, a2, a3 ;编译器为对象a1、a2和a3开辟了什么内存空间?它们有各自的funMember函数的副本吗?C+通过什么机制调用类的成员函数?【答案】开辟的存储空间有a1.a, a1.x, a2.a, a2.x, a3.a, a3.x。各对象没有funMember函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 基础 课后 答案 第五 35
限制150内