1《程序设计基础下》实验指导书编写人:张岚第一部分说明《程序设计基础下》的上机实习分为课内上机实习和课外上机实习两部分,课内上机实习学期内共安排36学时,每周安排2次,每次2小时,即学期内共安排36次课内上机实习,由机房统一安排,任课老师跟班辅导。学期内还安排18学时的课外上机实习,主要作为课内上机实习的补充,学2生用来完成在课内上机实习中没有作完的工作,由学生自己安排上机时间。第二部分实验要求及实验内容实验一类和对象实验目的:学习类的声明方法;掌握类成员函数的定义形式;掌握多文件结构C++程序的组织形式。实验内容:一、阅读下列程序,找出程序中的错误,修改错误并上机验证。#includeiostream.h#includemath.hclassPoint{public:voidSet(doubleix,doubleiy){x=ix;y=iy;}doublexOffset(){returnx;}doubleyOffset(){returny;}doubleangle(){return(180/3.14159)*atan2(y,x);}doubleradius(){returnsqrt(x*x+y*y);}protected:doublex;doubley;};voidmain(){Pointp;doublex,y;3coutEnterxandy:\n;cinxy;p.Set(x,y);p.x+=5;p.y+=6;coutangle=p.angle(),radius=p.radius(),xoffset=p.xOffset(),yoffset=p.yOffset()endl;}二、编程实现设计一个长方体类Box,它能计算并输出长方体的体积和表面积。三、请写出在实验过程中遇到的问题?你是如何解决的?目前仍存在什么问题?实验二类和构造函数和析构函数实验目的:理解对象的概念,掌握对象的定义和使用方法;学习构造函数和析构函数的作用、特点和使用方法。实验内容:一、写出下列程序的运行结果并上机验证。#includeiostream.hclassSample{public:Sample(){x=y=1;}Sample(inta,intb){x=a;y=b;}~Sample(){if(x==y)coutx=yendl;4elsecoutx!=yendl;}voiddisp(){coutx=x,y=yendl;}private:intx,y;};voidmain(){Samples1(2,3),s2;s2.disp();s1.disp();coutendl;}二、写出下列程序的运行结果并上机验证。#includeiostream.hclassA{inta,b;public:A(inti,intj);voidprintA();};classB{5Ac;intn;public:B(inti,intj,intk);voidprintB();};B::B(inti,intj,intk):c(i,j){n=k;}voidB::printB(){coutn=n,;c.printA();}A::A(inti,intj){a=i;b=j;}voidA::printA(){couta=a,b=bendl;}voidmain(){Bm(7,8,2);m.printB();}二、第7章.pdf中P8实践题二,含有分析;三、请写出在实验过程中遇到的问题?你是如何解决的?目前仍存在什么问题?6实验三类和拷贝构造函数实验目的:掌握拷贝构造函数的作用和使用方法,切实体会在什么情况下需要提供拷贝构造函数来实现深拷贝的功能。实验内容:一、写出下列程序的运行结果并上机验证#includeiostream.hclassSample{intx;public:Sample(){;}Sample(inta){x=a;}Sample(Sample&a){x=a.x+++10;}voiddisp(char*ob){coutobx=xendl;}};voidmain(){Samples1(2),s2(s1),s3;s3=s2;s1.disp(s1.);s2.disp(s2.);s3.disp(s3.);}二、写出下列程序的运行结果并上机验证,程序运行时会出现什么问题?请用增加拷贝构造函数的方法避免存在的问题。#includeiostream.h7#includestdlib.hclassVector{public:Vector(ints=100);Vector(Vector&);int&Elem(intndx);voidDisplay();voidSet();~Vector();protected:intsize;int*buffer;};Vector::Vector(ints){buffer=newint[size=s];for(inti=0;isize;i++)buffer[i]=i*i;}int&Vector::Elem(intndx){if(ndx0||ndx=size){couterrorinindexendl;exit(1);}returnbuffer[ndx];8}voidVector::Display(){for(intj=0;jsize;j++)coutbuffer[j];coutendl;}voidVector::Set(){for(intj=0;jsize;j++)buffer[j]=j+1;}Vector::~Vector(){delete[]buffer;}Vector::Vector(Vector&ss){buffer=newint[size=ss.size];for(inti=0;isize;i++)buffer[i]=ss.buffer[i];}voidmain(){Vectora(10);a.Display();Vectorb(a);9a.Set();a.Display();b.Display();}三、编程实现以下功能1.创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、ChangeName()、Display()的函数原型放在类定义中,构造函数初始化每个成员,Display()函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。2.修改上面的类,将姓名构成类Name,其名和姓在Name类中是保护数据成员,其构造函数为接收一个指向完整姓名字符串的指针,其Display()函数输出姓名。然后将Employee类中的姓名成员换成Name类的对象。3.根据上面的类定义,编制主函数如下,构成一个完整的多文件程序。voidmian(){Employeeem(“MarkBrooks”,”5WestSt.”,”Revere”,”CA”,”12290”);em.Display();em.ChangeName(“RichardVoss”);em.Display();}四、请写出在实验过程中遇到的问题?你是如何解决的?目前仍存在什么问题?实验四静态成员与友员实验目的:理解类的静态数据成员的特性及使用方法;类的静态成员函数与普通成员函数的不同点;掌握友元的定义和使用方法。实验内容:一、写出下列程序的运行结果并上机验证。10#includeiostream.hclassPoint{private:intX,Y;staticintcountP;public:Point(intxx=0,intyy=0){X=xx;Y=yy;countP++;}Point(Point&p);intGetX(){returnX;}intGetY(){returnY;}staticvoidGetC(){coutObjectid=countPendl;}};Point::Point(Point&p){X=p.X;Y=p.Y;countP++;}intPoint::countP=0;voidmain(){Point::GetC();PointA(4,5);coutPointA:(A.GetX(),A.GetY());A.GetC();PointB(A);coutPointB:(B.GetX(),B.GetY());Point::GetC();11}二、给出程序的运行结果#includeiostreamusingnamespacestd;intAverage(inti){staticintsum=0,count=0;sum=sum+i;count++;returnsum/count;}intmain(){intnum;//局部变量,具有动态生存期do{coutEnternumbers(-1toquit):;cinnum;if(num!=-1)coutRunningaverageis:Average(num);coutendl;}while(num-1);return0;}三、阅读下列程序,完成以下两项要求1.找出程序中的错误;2.使用增加公有成员函数和友元函数两种方法来改正错误。#includeiostream.hclassAnimal;voidSetValue(Animal&,int);voidSetValue(Animal&,int,int);classAnimal{12public:friendvoidSetValue(Animal&,int);voiddisp(){coutitsWeight=itsWeightitsAge=itsAgeendl;}protected:intitsWeight;intitsAge;};voidSetValue(Animal&ta,inttw){ta.itsWeight=tw;}voidSetValue(Animal&ta,inttw,inttn){itsWeight=tw;itsAge=tn;}voidmain(){Animalpeppy;SetValue(peppy,5);peppy.disp();peppy.SetValue(7,9);peppy.disp();}四、写程序实现输入4个学生的姓名,英语和计算机成绩,然后按总分从高到低排序输出的功能。(要求定义一个student类,用友元实现排序。)五、写出在实验过程中遇到的问题?你是如何解决的?目前仍存在什么问题?13实验五类的继承实验目的:学习使用继承方式派生新类的方法;掌握派生类构造函数和析构函数的调用次序;多态的需要及实现方法;抽象类的使用方法;进行类的分解的一般方法。实验内容:一、写出下列程序的运行结果并上机验证,然后回答下面的问题。1.问题:在程序中,语句表达式d_obj.sety(99);与d_obj.Gety()可否用p-Sety(99);和p-Gety()代替?#includeiostream.hclassbase{intx;public:voidSetx(inti){x=i;}intGetx(){returnx;}};classDerived:publicbase{inty;public:voidSety(inti){y=i;}intGety(){returny;}};voidmain(){base*p;baseb_obj;14Derivedd_obj;p=&b_obj;p-Setx(11);coutbaseobjectx:p-Getx()endl;p=&d_obj;p-Setx(55);coutDerivedobjectx:p-Getx()endl;d_obj.Sety(99);coutDerivedobjecty:d_obj.Gety()endl;}二、写出下列程序的运行结