C++实验指导书(2017年修改版)(1)
更新时间:2024-05-18 03:40:01 阅读量: 综合文库 文档下载
- 单片机实验指导书推荐度:
- 相关推荐
暹 王晓东 2017.8
编 审
苗《面向对象程序设计》实验指导书
目 录
实验一 函数设计实验 实验二实验三实验四实验五实验六
类程序设计实验 数组与指针实验 类的继承与多态实验 输入、输出流程序设计实验 综合程序设计实验
1
《面向对象程序设计》实验指导书
实验一 函数设计实验
【实验目的】
1.掌握函数的定义及其调用。
2.掌握函数参数的传递方式,按值传递、按址传递和按引用传递。 3.掌握函数重载概念与使用方法。 4.学习函数模板的使用。
【实验内容】
1. 运行参考程序,理解按值传递、按地址传递和按引用传递不同之处。 //参考程序1
#include< iostream.h >
//使用按值传递的方法将两变量值对换 void swapbyValue(int a,int b) { int t; t=a; a=b; b=t; }
//使用按地址传递的方法将两变量值对换 void swapbyAddress(int *a,int *b) { int t; t=*a; *a=*b; *b=t; }
//使用按引用传递的方法将两变量值对换 void swapbyQuote(int &a,int &b) { int t; //这里访问与修改的是实际参数本身,而不是实际参数的一个副本 t=a; a=b; b=t; }
int main() { int x,y; x=66; y=98; swapbyValue(x,y); cout<<\ swapbyAddress(&x,&y); cout<<\ swapbyQuote(x,y); cout<<\ return(0); }
2
《面向对象程序设计》实验指导书
2.运行参考程序,理解带缺省形参值函数的用法。
//参考程序2
#include
const double PI=3.14159;
float area(float a=3,double b=4,double c=5); int main() { double s; s=area(); cout<<\ s=area(6); cout<<\ s=area(2,4); cout<<\ s=area(5,6,7); cout<<\ return 0; }
float area(float a,double b,double c) { float s,S; s=1/2.0*(a+b+c); S=sqrt(s*(s-a)*(s-b)*(s-c)); return S; }
3.运行参考程序,理解函数重载概念与基本使用方法。 //参考程序3
#include
int min(int a,int b,int c) { int k; k=(a
int min(int a,int b) { int k; k=(a
int main() { int x,y,z,m; cout<<\请输入三个整数:\ cin>>x>>y>>z; m=min(x,y,z); cout<<\最小的数是:\ cout<<\请输入两个整数:\ cin>>x>>y; m=min(x,y); cout<<\最小的数是:\ return(0); }
3
《面向对象程序设计》实验指导书
4.运行参考程序,理解函数模板概念与基本使用方法。
//参考程序4
#include int main() { int x,y; cout<<\请输入两个整数:\ cin>>x>>y; cout<<\最小的整数是:\ float x1,y1; cout<<\请输入两个实数:\ cin>>x1>>y1; cout<<\最小的实数是:\ return(0); } 5.编程计算圆台体积(要求上底和下底半径带默认形参值)。 (提示:体积公式为 13?H(R21?R22?R1R2) 4 可附加页 《面向对象程序设计》实验指导书 6.用函数重载方法编写求面积程序,要求能计算圆、矩形、三角形面积。 5 可附加页 《面向对象程序设计》实验指导书 7.应用函数模板求数组中的最大数,要求分别处理整型、浮点型数据。 8.建立一个简单的银行账户系统。关于账户的信息有:户名、账号、余额。对账户的管理有:开户、存款、取款、查询余额等功能。用结构化程序设计方法设计一个程序,使该程序能对银行账户的信息进行上述操作管理。 参考程序框架(为简单起见,只考虑对一个账户信息进行管理): 6 《面向对象程序设计》实验指导书 #include #include #include { char mName[10]; long mSN; float mBalance; }; //开户 void getAcc(struct Account *p) { cout<<\请输入姓名、帐号、存入钱数:\ cout<<\姓名:\ cin>>p->mName; cout<<\帐号:\ cin>>p->mSN; cout<<\存入钱数:\ cin>>p->mBalance; } //往账户中存款,存款金额为amount void deposit(struct Account *p) { float amount; cout<<\存款金额:\ cin>>amount; p->mBalance=p->mBalance+amount; } //从账户中取款,取款金额为amount(请考虑透支情况) void withdraw(struct Account *p) { } 7 《面向对象程序设计》实验指导书 //*****查询帐户当前余额***** void getBalance(struct Account *p) { } //主菜单 void menu(void) { system(\清屏 cout<<\ cout<<\ cout<<\简易银行帐户系统\ cout<<\开户\ cout<<\存款 \ cout<<\取款\ cout<<\查询余额 \ cout<<\退出 \ cout<<\ cout<<\ cout< //主函数 int main() { int cho; struct Account p; //定义一个银行账户结构体变量 while(1) { menu(); do { cout<<\ cin>>cho; }while(cho<1||cho>5); switch(cho) { case 1: getAcc(&p); break; case 2: deposit(&p); break; case 3: withdraw(&p); break; case 4: getBalance(&p); break; case 5: return 0 ; } } return(0); } 8 《面向对象程序设计》实验指导书 【思考题】 1.回答按值传递、按地址传递和按引用传递有何不同? 2.重载函数和函数模板有何区别?什么情况下使用重载函数?什么情况下使用函数模板? 9 《面向对象程序设计》实验指导书 实验二 类程序设计实验 【实验目的】 1.掌握类和对象的概念、定义和使用方法。 2.学习数据成员与成员函数的访问方式。 3.掌握构造函数、拷贝构造函数和析构函数的使用方法。 4.掌握类的组合使用方法。 5.熟悉类模板的定义和使用方法。 【实验内容】 1.阅读下列程序,写出执行结果: (1) #include class Circle { public: Circle(float radius) { Radius=radius; cout<<\构造函数被调用\ } ~Circle() { cout<<\析构函数被调用!\ float GetArea(){return 3.14*Radius*Radius;} private: float Radius; }; int main() { float radius; cout<<\请输入圆的半径:\ cin>>radius; Circle obj(radius); cout<<\半径为\圆的面积为:\ return(0); } (2) #include class Circle { public: Circle(float radius) { Radius=radius; cout<<\构造函数被调用\ } Circle(Circle& p) { Radius=p.Radius; cout<<\拷贝构造函数被调用\ } 10 《面向对象程序设计》实验指导书 ~Circle() { cout<<\析构函数被调用!\ float GetArea(){return 3.14*Radius*Radius;} private: float Radius; }; int main() { float radius; cout<<\请输入圆的半径:\ cin>>radius; Circle obj1(radius); Circle obj2(obj1); cout<<\对象1的面积为:\ cout<<\对象2的面积为:\ return(0); } (3) #include using namespace std; class Student { public: Student(int num, char *n); //构造函数 ~Student(); //析构函数 void display( ); private: int number; //学号 char *name; //姓名 }; Student::Student(int num, char *n) { number=num; name=new char[strlen(n)+1]; //用new为name分配堆内存 strcpy(name,n); cout<<\执行Student类构造函数\} Student::~Student() { delete name; cout<<\执行Student类析构函数\} void Student::display( ) { cout<<\学号: \ cout<<\姓名: \} int main() { Student stud1(2017001,\ stud1.display(); return 0; } 11 《面向对象程序设计》实验指导书 2.设计一个银行账户(Account)类,包含户名、帐号以及当前余额属性,可完成开户、存款、取款和查询余额等行为。银行账户类的定义如下: class Account { public: Account(char name[],long num,float amount); //类的有参构造函数 Account(); //类的无参构造函数 void deposit(float amount); //往账户中存款 int withdraw(float amount); //从账户中取款 float getBalance(); //查询余额 private: char mName[20]; //银行账户的户名 long mSN; //本账户的帐号 float mBalance; //本账户当前的余额 }; 请根据上述给定的类,完善其相应的构造函数及成员函数的定义,并执行主函数实现测试。 参考程序框架: #include public: Account(char name[],long num,float amount); //类的有参构造函数 Account(); //类的无参构造函数 void deposit(float amount); //往账户中存款 int withdraw(float amount); //从账户中取款 float getBalance(); //查询余额 private: char mName[20]; //银行账户的户名 long mSN; //本账户的帐号 float mBalance; //本账户当前的余额 }; //有参构造函数的实现 Account::Account(char name[],long num,float amount) { strcpy(mName,name); mSN=num; mBalance=amount; } //类的无参构造函数 Account::Account() { } //存款 12 《面向对象程序设计》实验指导书 void Account::deposit(float amount) { mBalance=mBalance+amount; } //取款,考虑透支情况 int Account::withdraw(float amount) { } //查询余额 float Account::getBalance() { } //主菜单 void menu(void) { system(\清屏 cout<<\ cout<<\ cout<<\简单银行帐户系统\ cout<<\存款 \ cout<<\取款\ cout<<\查询余额 \ cout<<\退出 \ cout<<\ cout<<\ cout< int main() { int cho,m; char name[20]; long num; float amount; cout<<\请输入开户信息:\ cout<<\姓名:\ cin>>name; cout<<\帐号:\ cin>>num; cout<<\存款金额:\ cin>>amount; Account p(name,num,amount); //定义银行账户类对象 while(1) { menu(); 13 《面向对象程序设计》实验指导书 } do { cout<<\请输入选择:\ cin>>cho; }while(cho<1||cho>4); switch(cho) { case 1: cout<<\存款金额:\ cin>>amount; p.deposit(amount); break; case 2: cout<<\取款金额:\ cin>>amount; m=p.withdraw(amount); if(m==0) cout<<\透支!\ else cout<<\取款成功!\ break; case 3: cout<<\余额为:\ break; case 4: return 0; } cout< 3.设计一个股票(Stock)类,包含股票名称、股票代码、股票的数量、每股的价格、股票的总值等属性,可完成获得股票(用构造函数完成)、增持、卖出股票、更新股票价格、显示所持股票的信息等行为。 14 《面向对象程序设计》实验指导书 15 可附加页 《面向对象程序设计》实验指导书 4.设计一个用于学生管理的Student类,属性有:学号、年龄、性别、出生日期、身份证号等。其中“出生日期”声明为一个“日期”类的内嵌子对象。用成员函数实现对学生信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、组合。 16 可附加页 《面向对象程序设计》实验指导书 *、/运算。(附加题) 17 可附加页5.设计复数类,实现复数的+、-、 《面向对象程序设计》实验指导书 【思考题】 1.C++语言中类和结构体类型有何异同?2.什么时候程序会调用其构造函数? 3.什么时候程序会自动调用析构函数? 4.类的组合在什么情况下使用? 18 《面向对象程序设计》实验指导书 实验三 数组与指针实验 【实验目的】 1.学习使用数组数据对象。 2.掌握指针的使用方法。 3.学习通过动态内存分配实现动态数组的定义和使用,并体会指针在其中的作用。 4.掌握静态成员的使用方法。 5.练习通过Debug观察指针的内容及其所指对象的内容。 【实验内容】 1.运行下列程序,观察运行结果。 (1)#include class ArrayElem { int x; public: ArrayElem(int i){x=i;} //带参数的构造函数 int getx(){return x;} }; int main() { ArrayElem obs[4] ={-1,-2,-3,-4}; //创建对象数组并初始化 for(int i=0;i<4;i++) cout<<\访问数组元素的成员 return(0); } (2)#include class NumClass { int num; public: void set_num(int val){num=val;} void show_num(){cout<<\}; int main() { NumClass ob,*p; //声明一个对象和指向对象的指针 ob.set_num(10); ob.show_num(); //通过对象ob直接调用成员函数 p=&ob; //使对象指针p指向对象ob p->set_num(20);p->show_num(); //通过指针调用成员函数 return(0); } (3)#include class NumClass { int num; public: void set_num(int val){num=val;} void show_num(){cout<<\}; 19 《面向对象程序设计》实验指导书 int main() { NumClass ob[2],*p; //声明一个对象数组和对象指针 ob[0].set_num(10); ob[1].set_num(20); //通过对象数组名和下标来访问 p=&ob[0]; //将对象数组的首元素地址赋给指针 p->show_num(); //通过指针显示数组元素 p++; p->show_num(); return(0); } (4)#include class NumClass { int num; public: void set_num(int val){num=val;} void show_num(){cout<<\}; int main() { NumClass *p=new NumClass[2]; //动态创建一个对象数组 p[0].set_num(10); p[1].set_num(20); //通过指针访问数组元素的成员 p[0].show_num(); p[1].show_num(); //通过指针显示数组元素 delete[] p; //删除整个对象数组 return(0); } 2.用对象数组实现一个简单的银行账户管理系统,完成多个用户的开户、存款、取款和查询余额等行为。 #include #include private: char mName[10]; //银行账户的户名 long mSN; //本账户的帐号 float mBalance; //本账户当前的余额 public: Account(); //无参构造函数 void deposit(); //往账户中存款 int withdraw(); //从账户中取款 void getBalance(); //查询余额 long getmSN(){return mSN;} //取得客户的帐号 }; Account::Account() //无参构造函数,从键盘输入信息进行初始化 { 20 《面向对象程序设计》实验指导书 } //往账户中存款,存款金额为amount void Account::deposit() { } //从账户中取款,取款金额为amount int Account::withdraw() { } //查询帐户当前余额 void Account::getBalance() { } 21 《面向对象程序设计》实验指导书 //菜单函数 void menu(void) { } //主函数 int main() { int cho,n,r,i,flag=0; long aNo; cout<<\要开的账户数目为:\ cin>>n; Account *p; //定义对象指针 p=new Account[n]; //动态创建对象数组 while(1) { menu(); do { cout<<\请根据菜单进行操作选择:\ cin>>cho; // getch(); //清除键盘缓冲区内容,为下一次正确读入做准备。 }while(cho<1||cho>4); switch(cho) { case 1://存款 cout<<\请输入帐号:\ cin>>aNo; for(i=0;i 22 《面向对象程序设计》实验指导书 break; case 2://取款 case 3://查询 case 4://退出 return 0; } } delete[] p; //释放空间 return 0; } 23 《面向对象程序设计》实验指导书 3. N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。设计一个学生类,包括学号、姓名和成绩数据成员外,还有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。 24 可附加页 《面向对象程序设计》实验指导书 ,添加利息计算。(附加题) 25 可附加页4.改进实验内容2 《面向对象程序设计》实验指导书 【思考题】 1.数组之间如何赋值? 2.引用和指针有何区别? 3.对那些类型的数据不能使用引用?26 《面向对象程序设计》实验指导书 实验四 类的继承与多态实验 【实验目的】 1.理解软件重用性的一种形式——继承。 2.能够通过继承已有的类创建新类。 3.理解基类和派生类的概念。 4.能够在派生类中使用构造函数和析构函数 5.学习虚基类在解决二义性问题中的作用。 6.熟悉多态分类,理解静态联编和动态联编概念。 7.掌握运算符重载方法。 【实验内容】 1.分析程序,写出下列程序的运行结果: (1) #include class Base { private: int base_priv_dat; protected: int base_prot_dat; public: void base_show(); }; class Derived:public Base { private: int derived_priv_dat; public: void derived_show(); }; void Base::base_show() { base_priv_dat=1; //基类函数可以操纵私有和保护型基类数据 base_prot_dat=2; cout<<\ <<\} void Derived::derived_show() { derived_priv_dat=3; base_prot_dat=4; //派生函数可以处理保护型基类数据,但不能处理私有基类数据 cout<<\ <<\ base_show(); //派生函数可以调用公有基类函数 } int main() { Derived d_obj; d_obj.base_show(); //可用派生对象调用基类函数 27 《面向对象程序设计》实验指导书 } d_obj.derived_show(); return(0); (2) #include #include public: Person(const char* s) //带参数的构造函数 { name=new char[strlen(s)+1]; strcpy(name,s); } ~Person(){delete []name;} //析构函数做清理工作 char *GetName(){return name;} protected: char *name; }; class Student:public Person { char *major; public: Student(const char * s,const char *m):Person(s) //派生类构造函数 {major=new char[strlen(m)+1];strcpy(major,m);} ~Student(){delete[] major;} //派生类析构函数 char *GetMajor(){return major;} }; int main() { Student stu(\ cout<<\ < 2.编译运行下列程序,分析出现编译错误的原因,并给出解决办法。 #include using namespace std; class Person { public: Person(string the_name,string the_gender,string the_id) { name=the_name; gender=the_gender; id_number=the_id; cout<<\类构造函数被调用!\ } void show() 28 《面向对象程序设计》实验指导书 { cout<<\姓名:\ cout<<\性别:\ cout<<\身份证号码:\ } protected: string name; //姓名 string gender; //性别 string id_number; //身份证号码 }; class Student: public Person { public: Student(string n,string g,string i,string c):Person(n,g,i) { classname=c; cout<<\类构造函数被调用!\ } protected: string classname; //学生所在班级 }; class Teacher: public Person { public: Teacher(string n,string g,string i,string d):Person(n,g,i) { department=d; cout<<\类构造函数被调用!\ } protected: string department; //教师所在单位 }; class Assistant:public Student,public Teacher { public: Assistant(string n,string g,string i,string d):Student(n,g,i,c),Teacher(n,g,i,d) {} void disp() { show(); cout<<\班级:\ cout<<\系部:\ } }; int main() { Assistant a(\李玮\男\软件141\电信系\ a.disp(); return 0; } 29 c,string 《面向对象程序设计》实验指导书 (通过作用域符号来唯一标识) 30 可附加页解决方法一: 《面向对象程序设计》实验指导书 31 可附加页 解决方法二:(虚基类技术) 《面向对象程序设计》实验指导书 4.开发一个简单的大学人员管理程序,该程序可以管理大学的一些基本人员:学生(student)、教师(teacher)。首先设计一个虚基类person。通过该类保存人员的最基本信息:姓名(name)、年龄(age)、性别(sex)和身份证号码。然后使用该类派生出学生类student、教师类teacher,在其中添加各自的特性,如在student类中添加如下信息:专业(speciality),在teacher类中添加院系(department)等。还有部分教师在工作的同时在职修读学位,因此同时具有教师和学生双重身份,所以由student类和teacher类再次派生出stuTeacher类。为每个类定义一个输出函数print(),输出该类相关信息。 32 可附加页 《面向对象程序设计》实验指导书 用运算符重载设计复数类,实现复数的+、-、*、/运算。 33 可附加页5. 《面向对象程序设计》实验指导书 【思考题】 1.组合与继承的区别是什么? 2.公有继承、保护继承和私有继承分别在什么情况下使用? 3.什么是虚基类?有何作用? 4.静态联编和动态联编有什么区别? 5.简述空的虚函数与纯虚函数的区别? 6.简述抽象类和具体类的区别? 34 《面向对象程序设计》实验指导书 实验五 输入、输出流程序设计实验 【实验目的】 1.理解输入/输出流相关概念 2.掌握输入/输出流的常用操作 3.理解文件概念 4.掌握文件流的常用操作 【实验内容】 1.分析程序,写出下列程序的运行结果: (1)#include (2)#include (3)#include 35 《面向对象程序设计》实验指导书 cout<<\ return 0; } (4)#include (5)#include (6)include 36 《面向对象程序设计》实验指导书 } cout< 2.按一行一行的方法将一个文本文件复制到另一个文件中。 37 《面向对象程序设计》实验指导书 3.打开指定的一个文本文件,在每一行前面加上行号。 4.编写程序,从键盘输入5个学生的学生信息,包括学号、姓名、3门课程的成绩,计算3门课的平均成绩,将全部信息以二进制方式保存到文件中。 可附加页 38 《面向对象程序设计》实验指导书 【思考题】 1. 什么叫流?流的提取和插入指的是什么? 2.C++有哪4个预定义的流?它们分别与什么具体设备相关联? 3.标准输出与标准错误在输出方面有那些异同? 4.为什么在不为每个类型提供明确指示的情况下,cout仍能够显示不同的C++类型? 5.C++进行文件输入/输出的基本过程是什么? 6.C++中顺序文件和随机文件有什么区别? 39 《面向对象程序设计》实验指导书 实验六 综合程序设计实验 【实验目的】 本实验运用面向对象程序设计思想和方法,综合使用C++语言的类、对象、继承、多态性、文件流、泛型程序设计等理论知识,编写C++程序。 【实验内容】 1.某学校对教师每月工资的计算规定如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元。副教授的固定工资为3000元,每个课时补贴30元。讲师的固定工资为2000元,每个课时补贴20元。定义教师抽象类,派生不同职称的教师类,编写程序求若干个教师的月工资。 R1=6 R2=8 2. 编写一个程序,计算由3个并联的子电路组成的电路的总电阻。子R1=7 电路由两个串联或并联的电阻器组成(如图3-11 )。首先创建一个纯虚类Resistance,含有CalcRes()纯虚函数,由Resistance派生出串联类Series-R2=9 Res和并联类ParallelRes,两个类都包含同名的CalcRes()函数计算子电路的电阻值。输入电阻值,输出总电阻值,所有子电路使用一个循环计算总电R1=4 R2=5 阻。(选做) 提示: 图3-11 电路图 串联电阻方程为:Rtot=R1+R2 并联电阻的方程为:Rtot=1/(1/R1+1/R2) 其中,R1和R2是单个电阻器的电阻。 在主函数中定义一个基类指针数组,用于存放子电路对象的地址,通过循环来遍历数组,使用地址来调用每个子电路对象的函数,从而实现多态性。 3. 编程实现一个简单的大学人员管理程序,该程序可以管理大学的一些基本人员:学生、教师、职工。首先设计一个抽象类person。通过该类保存人员的最基本信息:姓名(name)、年龄(age)和性别(sex),同时定义一个静态数据成员用来统计人数(sum)。然后使用该类派生出学生类、教师类和职工类,在其中添加各自的特性,如在学生类中添加如下信息:专业(speciality),在教师类中添加院系(department),在职工类中添加部门和职务等信息。为每个类定义一个输出函数print(),输出该类相关信;定义一个保存函数保存相关信息到文件。 40
正在阅读:
参考范文:清明节短信祝福语贺卡祝福12-23
学生的评语【精选5篇】03-25
值得珍藏的宝藏作文800字06-20
大学生网站编辑暑期社会实践报告-精选word文档(2页)06-29
水利专业知识01-01
宏观习题及答案11-09
野炊作文06-19
初中物理电学公式大全新课标05-25
企业全面风险管理知识问答第一讲-012608-19
- 必修一物理寒假作业
- 2019-201X年5月大学生入党积极分子思想汇报-word范文模板(3页)
- 药物分析习题五
- 重拾应用意识 体会数学价值(沈建军)
- 2017全国高校辅导员结构化面试题集及参考答案
- 广东徐闻县实验中学2014届高三第二次月测地理试题
- 今天你共鸣了么?
- 2018-2019正能量读后感1000字-推荐word版(6页)
- 2018年中国截切型盖板针布行业专题研究分析报告目录
- 中国移动业务处理流程大全
- 公文写作常用词汇和句子集锦2016
- ARM课程设计说明书
- 教师资格证教育学论文
- 中考试卷分析
- 环境监测试卷(五)
- 党风廉政建设广播稿1
- 快速制作香香宫煮麻辣烫教程
- 《国际金融学》习题
- 文明施工保障措施方案
- 春兰维修资料故障代码
- C++
- 指导书
- 改版
- 实验
- 2017
- 点评2000年热点民事案件(杨立新)
- 案例:嘉农网络超市的存货难题
- 液压气缸的设计
- 澧县张公庙中学 七年级地理上册第5章世界的发展差异单元检测与解
- 病程记录书写要求
- c语言二级试题5
- 2015年上半年四川省施工员《专业实务》:砌体工程施工技术模拟试
- 2018初级会计职称《经济法基础》预习考点(112)
- 紫微斗数 夫妻 忌入十二宫的象义解释
- 论钢结构工程施工质量的监理控制2018-2019年度精心整编后首发
- 金属学及热处理习题参考答案(1-9章)
- 教师假期读书心得体会
- 农村单亲家庭儿童的教育研究
- 开阳二小五年级第三单元导学案
- 2017年最新修订人教版一年级语文下册全册教案
- 临床输血管理规范
- 沪教版数学二年级上册期末综合测试卷
- AQ3035-2010危险化学品重大危险源安全监控通用技术规范解读
- 天才知道题库(南开大学)
- Creator基本入门