1.7指针和引用55.已知intd=5,*pd=&d,b=3;求下列表达式的值。A.*pd*bB.++*pd-bC.*pd++D.++(*pd)答:15,3,5,656.选择填充。(1)选择正确的说明语句为()。A.intN['b'];B.intN[4,9];C.intN[][];D.int*N[10];答:B(2)若有定义:inta=100,*p=&a;则*p的值是()。A.变量p的地址B.变量a的地址值C.变量a的值D.无意义答:C.(3)下述程序的输出结果是()。#includeiostream.hvoidmain(){inta[5]={2,4,6,8,10};int*p=a,**q=&p;cout*(p++)','**q;}A.4,4B.2,2C.4,2D.4,5答:B(4)下述程序片段的输出是()。inta[3][4]={{1,2,3,4},{5,6,7,8}};intx,*p=a[0];x=(*p)*(*p+2)*(*p+4);coutxendl;A.15B.14C.16D.13答:A(5)若有以下定义,则下列对数组引用正确的是()。int(*q)[3]=newint[2][3];A.q[2][3]B.*qC.*(*q+2)D.*(*(q+2)+3)答:C(6)若要用如下程序片段使指针变量p指向一个存储动态分配的存储单元:float*p;p=(float*)newfloat;则空白处应填入:A.float*B.*floatC省略;D.(float)(7)下列表示引用的方法中,()是正确的。已知:intm=10;A.int&x=m;B.int&y=10;C.int&z;D.float&t=&m;答:A57.分析下列程序的结果。#includeiostream.hint&fun(intn,ints[]){int&m=s[n];returnm;}voidmain(){ints[]={15,4,3,2,1,0};fun(3,s)=10;coutfun(3,s)endl;}答:1058.用指针作为函数的参数,设计一个实现两个参数交换的函数。输入3个实数,按升序排序后输出。59.编写函数voidfun(int*a,int*n,intpos,intx);其功能是将x值插入到指针a所指的一维数组中,其中指针n所指存储单元中存放的是数组元素个数,pos为指定插入位置的下标。60.编写函数voidfun(char*s),其功能是将s所指的字符串逆序存放。61输入一个字符串,串内有数字和非数字字符,例如,abc2345345fdf678jdhfg945。将其中连续的数字作为一个整数,依次存放到另一个整型数组b中。如将2345存放到b[O]、345放入b[1]、678放入b[2]、……统计出字符串中的整数个数,并输出这些整数。要求在主函数中完成输入和输出工作。设计一个函数,把指向字符串的指针和指向整数的指针作为函数的参数,并完成从字符串中依次提取出整数的工作。62.有5个学生,每个学生的数据结构包括学号、姓名、年龄、C++成绩、数学成绩和英语成绩、总平均分,从键盘输入5个学生的学号、姓名、3门课的成绩,计算3门课的总平均分,最后将5个学生的数据输出。要求各个功能用函数来实现。第2章C++面向对象程序设计2.1类和对象1.什么是类?类的定义格式?类的成员一般分为哪两部分?它们的区别如何?⑴“类”是对具有共同的属性特征和行为特征的对象的概括和抽象。⑵类的定义格式:class类名{[private:]私有数据成员和成员函数public:公有数据成员和成员函数};⑶类的成员一般分为数据成员和成员函数两部分。⑷数据成员一般用来表示对象属性特征,而成员函数一般表示了对象的可以进行的操作,即行为特征。2.类与结构体有什么区别?类中可以包含两类成员――数据成员和成员函数;而标准C语言中的结构体只能包含数据成员;但是C++中的结构体对C语言中的结构体有扩展,C++中的结构体也可以两类成员――数据成员和成员函数;因此C++中的类和C++中的结构体出来在定义方式上不一样之外(class,struct),还有就是它们的缺省封装字是不一样的,一个是private,一个是public。3.什么是对象?如何定义一个对象?对象的成员如何表示?⑴对象是类的实例,是类的变量。⑵对象的定义:类名对象名称;或:类名*对象指针;⑶对象成员的表示:对象名称.成员名字;或:对象指针→成员名字;4.什么是构造函数?构造函数有哪些特点?构造函数是类的成员函数,它有以下特点:构造函数的名字必须与类名相同。构造函数可以有任意的形参,但不能具有返回值。定义对象时,编译系统会自动地调用构造函数。构造函数可以重载5.什么是析构函数?析构函数有哪些特点?析构函数也是类的成员函数,它有以下特点:析构函数名也应与类名相同,只是在函数名前面加一个波浪符~。析构函数不能带任何参数,也没有返回值。每个类有而且只能有一个析构函数。析构函数不能重载。6.什么是默认构造函数和默认析构函数?假如用户没有自己编写构造函数或析构函数,编译系统也会自动生成一个构造函数和析构函数,这就是默认的构造函数和析构函数,但是这两个函数没有任何参数,也不进行任何操作。7.什么是复制构造函数?它的功能和特点是什么?复制构造函数是一种特殊的构造函数,它用来在已存在的对象基础上建立一个新对象。复制构造函数的名称也和类名是一样的,但是它的形式参数,都是指向一个已经存在的对象,因此它的形式参数都是这种形式:“const类名&ob”,即是一个对象的引用。8.什么是静态成员?静态成员的作用是什么?9.如何对对象进行初始化?对象的初始化都是通过构造函数进行的,只要在声明对象时,逐个添好构造函数的实参。10.什么是友元?它的作用有哪些?什么是友元函数和友元类?11.什么是this指针?它有何作用?一个类可以同时有很多对象存在,许多不同的对象可以调用相同的成员函数,编译系统为了知道当前是那个对象在调用成员函数,因此定义了this指针,this指针其实就是指向当前对象的指针。12.什么是类的作用域?对象的生存期有何不同?类的作用域简称类域,它是指在类的定义中由一对花括号所括起来的部分,每一个类都具有相应的类域。类域中定义的变量不能使用auto,register和extern等修饰符,只能用static修饰符,函数也不能用extern修饰符。所谓对象的生存期是指对象从被创建开始到被释放为止的时间,按生存期的不同对象可分为如下三种:1、局部对象:当对象被定义时调用构造函数,该对象被创建,当程序退出定义该对象所在的函数体或程序块时,调用析构函数,释放该对象。2、静态对象:当程序第一次执行所定义的静态对象时,该对象被创建,当程序结束时,该对象被释放。3、全局对象:当程序开始时,调用构造函数创建该对象,当程序结束时调用析构函数释放该对象。13.分析下列程序的运行结果。程序1:#includeiostream.h#includemath.hclassCCounter{private:doublem_value;public:voidSetValue(doublev){m_value=v;}doubleGetValue();intGetNum();};doubleCCounter::GetValue(){returnsin(10.0*m_value);}intCCounter::GetNum(){return(int)m_value;}voidmain(){CCountersam;sam.SetValue(50.0);coutThevalueis:sam.GetValue()endl;coutThenumis:sam.GetNum()endl;}程序2:#includeiostream.h#includestring.hclassperson{intage;charname[10];public:voidinit(inti,char*str){age=i;strcpy(name,str);}voiddisplay(){coutnameisageyearsold;}};voidmain(){persondemo;demo.init(30,LiMing);demo.display();}程序3:#includeiostream.h#includestring.hclassperson{intage;char*name;public:voidinit(inti,char*str){intj;j=strlen(str)+1;name=newchar[j];strcpy(name,str);age=i;}~person(){deletename;coutdestructoriscalled...;}voiddisplay(){coutnameisageyearsold\n;}};voidmain(){persondemo;demo.init(30,LiMing);demo.display();}程序4:#includeiostream.hclassCSam{public:staticintm;CSam(){m++;}CSam(intn){m=n;}staticvoidtestm(){m++;}};intCSam::m=0;voidmain(){CSamA;CSamB(3);A.testm();CSam::testm();coutm=B.mendl;}14.定义一个描述学生基本情况的类,数据成员包括姓名、学号、C++、英语和数学成绩,成员函数包括输出数据、置姓名和学号、置3门课的成绩,求出总成绩和平均成绩。#includeiostream.h#includestring.hclassCStudentInfo{charstu_name[20];charstu_id[10];floatC_score;floatE_score;floatM_score;public:CStudentInfo(char*name,char*id){strcpy(stu_name,name);strcpy(stu_id,id);C_score=E_score=M_score=0.00;}voidInit(floatscore1,floatscore2,floatscore3){C_score=score1;E_score=score2;M_score=score3;}floatGetTotal(){return(C_score+E_score+M_score);}floatGetAvg(){return(C_score+E_score+M_score)/3;}voidDisplay(){coutName:stu_nameID:stu_idendl;coutCLanguage:C_scoreEnglish:E_scoreMathmetics:M_scoreendl;coutTotalis:this-GetTotal()Averageis:this-GetAvg()endl;}};voidmain(){CStudentInfostu(andrew,98041011);floatscore1,score2,score3;coutCLanguage:;cinscore1;coutEnglish:;cinscore2;coutMathmetics:;cinscore3;stu.Init(score1,score2,score3);stu.Display();}15.设有一个描述坐标点的CPoint类,其私有变量x和y代表一个点的x、y坐标值。编写程序实现以下功能:利用构造函数传递参数,并设其默认参数值为60和75,利用成员函数display()输出这