河北工业大学14年面向对象程序设计实验报告(内含完整程序)
更新时间:2024-07-05 06:41:01 阅读量: 综合文库 文档下载
C++面向对象程序设计实验报告
班级:计C122 姓名:张健 学号:126123
共29 页,第 1页
实验一 C++程序设计基础练习
参考程序1
#include
char name[20];
cout<<”Hello,your name:”;
//在下画线处填上语句,完成将字符串输入到数组name中 cin>>name;
//在下画线处填上语句,完成将name数组用cout输出 cout< 参考程序2 # include int x=25; 共29 页,第 2页 //在画线处填上语句,将变量x的值分别以十六进制、十进制、八进制输出 cout< 2、调试和运行参考程序3,理解内置函数与函数重载的概念与基本使用方法。 参考程序3 #include int mul(int x,int y) //mul函数1 { return x*y; } int mul(int x,int y,int z) //mul函数2 { return x*y*z; } void main() { int a=3,b=4,c=5; //在下画线处填上语句,用于调用mul函数1 cout< 3、调试和运行参考程序4,并观察输出结果,体会和理解作用域运算符的概念与基本使用方法。 共29 页,第 3页 参考程序4 #include int avar; avar=25; //将局部变量avar赋值25 ::avar=10; //将全局变量avar赋值10 cout<<\输出局部变量avar的值 cout<<\输出全局变量avar的值 return 0; } 4、调试和运行参考程序5,并观察输出结果,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。 参考程序5 #include int *p; //在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给 p p=new int; 共29 页,第 4页 if (!p) { cout<<\return 1; } //在下画线处填上语句,将p所指向的存储区赋值20 *p=20; cout<<*p; //在下画线处填上语句,用于撤销指针p,释放p指向的存储空间 delete p; return 0; } (二)程序设计题 1、输出1到100的偶数,一行5个。 #include for(i=1;i<=100;i++) { 共29 页,第 5页 if(i%2==0) { cout< cout< 2、打印一个三角形的1~9的乘法表。 #include for(i=1;i<=9;i++) { 共29 页,第 6页 for(j=1;j<=i;j++) { s=i*j; cout< cout< ??578?????4?23?????2?24?394??????111???8?12???????。 3、编程求矩阵的加法: #include int a[3][3]={5,7,8,2,-2,4,1,1,1},b[3][3]={4,-2,3,3,9,4,8,-1,2},c[3][3]; for(i=0;i<3;i++) 共29 页,第 7页 { for(j=0;j<3;j++) { c[i][j]=a[i][j]+b[i][j]; cout< cout< 4、编写一个程序,用来分别求2个整数、3个整数、2个双精度数和3个双精度数的最大值。要求使用重载函数来完成。 #include cout<<\个整数的最大值 \else cout<<\个整数的最大值\ 共29 页,第 8页 void max(int x,int y,int z) { int max; if (x>y) max=x; else max=y; if (z>max) cout<<\个整数的最大值\else cout<<\个整数的最大值\} void max(double x,double y) { if(x>y) cout<<\个双精度数的最大值\else cout<<\个双精度数的最大值\void max(double x,double y,double z) { int max; if (x>y) max=x; else max=y; if (z>max) cout<<\个双精度数的最大值\else cout<<\个双精度数的最大值\} int main() 共29 页,第 9页 { int a,b,c,d,e; float f,g,h,i,j; cout<<\请输入2个整数:\cin>>a>>b; max(a,b); cout< cout<<\请输入3个整数:\cin>>c>>d>>e; max(c,d,e); cout< cout<<\请输入2个双精度数的最大值:\cin>>f>>g; max(f,g); cout< cout<<\请输入3个双精度数的最大值:\cin>>h>>i>>j; max(h,i,j); cout< 共29 页,第 10页 实验二 类与对象 一、实验目的 1、学习类与对象的定义,掌握类与对象的使用方法。 2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。 3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。 4、掌握用指针和引用向函数传递参数。 5、掌握静态数据成员和静态成员函数的使用。 6、理解友元与友元函数的作用与使用方法。 二、实验内容 1、下面是一个计算器类的定义,请完成该类成员函数的实现。 #include Counter(int number); void increment(); //给原值加1 void decrement(); //给原值减1 int getValue(); //取得计数器值 共29 页,第 11页 int print(); //显示计数 private: int value; }; Counter::Counter(int number) //计数 { value=number; } void Counter::increment() //给原值加1 { value=value+1; } void Counter::decrement() //给原值减1 { value=value-1; } int Counter::getValue() //取得计数器值 { return value; } int Counter::print() //显示计数 { cout<<\计数器的值为\return 0; } int main(){ Counter a(100); a.increment(); a.decrement(); cout<<\a.print(); return 0; } 共29 页,第 12页 2、构建一个购书清单类booklist,其中含有私有数据成员bookname(书名)、price(单价)、sum(总价),建立一个有5个元素的对象数组,接受5个以内图书信息,并输出图书信息和总价格。 #include char bookname[20]; double price; static double sum; public: booklist(char *bn=0, double bp=0) { if(bn!=0) { strcpy(bookname,bn); price=bp; sum+=price; 共29 页,第 13页 } } void input() { cout <<\cin >>bookname; cout <<\cin >>price; sum+=price; } void output() { cout <<\} static void out_sum() { cout <<\} };double booklist::sum=0; int main() { int i; booklist bs[5]; for(i=0; i<5; i++) bs[i].input(); for(i=0; i<5; i++) bs[i].output(); booklist::out_sum(); return 0; } 共29 页,第 14页 3、参考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将新建的类命名为Rect。 class Rect { public: int Area_int(); double Area_double(); Rect(double length,double width); Rect(int length,int width); virtual ~Rect(); private: int nLength; int nWidth; double dLength; double dWidth; }; 【要求】 (1)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。如设计一个 共29 页,第 15页 Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。 (2)重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。 (3)体现对象的构造和析构过程。例如,在构造函数中用cout<<”I am the constructor!”< (4)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。 # include int Area_int(); double Area_double(); Rect(double l, double w); Rect(int l,int w); private: }; Rect::Rect(int l,int w){ } Rect::Rect(double l,double w){ dLength=l; 共29 页,第 16页 int nLength; int nWidth; double dLength; double dWidth; nLength=l; nWidth=w; } int Rect::Area_int(){ } double Rect::Area_double(){ } void main(){ Rect r1(20,8); return dLength*dWidth; return nLength*nWidth; dWidth=w; Rect r2(20.0,8.0); Rect r3(); Rect *pt; pt=new Rect(100,300); cout<<\面积三\cout< cout<<\面积一\ cout<<\面积二\ } cout< 共29 页,第 17页 4、声明一个Student,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。 #include void account(int x) { score=x; total_score+=score; count+=1; } static int sum() { return total_score; } 共29 页,第 18页 static int average() { return (double)total_score/count; } private: int score; static int total_score; static int count; }; int Student::total_score=0; int Student::count=0; int main() { Student a[5]; int i=0; int j; for(i=0;i<5;i++) { cout<<\输入第\个人的成绩:\cin>>j; a[i].account(j); cout< cout<<\总分为:\cout<<\平均分:\} 共29 页,第 19页 5、设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果: A(x1,y1),B(x2,y2) Distance=d 其中:x1、y1、x2、y2为指定的坐标值,d为两个坐标点之间的距离。 #include Location(double,double); double getx(); double gety(); double distance(Location &); friend double distance(Location & , Location &); private: double x,y; }; Location::Location(double r,double i) 共29 页,第 20页 { x=r; y=i; } double Location::getx() {return x; } double Location::gety() {return y; } double Location::distance(Location &t) { double dx=x-t.x; double dy=y-t.y; return sqrt(dx*dx+dy*dy); } double distance(Location &a , Location &b) { double dx=a.x-b.x; double dy=a.y-b.y; return (sqrt(dx*dx+dy*dy)); } int main() { Location A(-1,-1); Location B(-2,2); cout<<\l; double d=A.distance(B); cout<<\return 0; } 共29 页,第 21页 实验三 派生类与继承 一、实验目的 1、学习类的继承,能够定义和使用类的继承关系。 2、学习派生类的声明与定义方法。 3、掌握类的定义和对象的声明。 4、熟悉公有派生和私有派生的访问特性。 5、掌握派生类构造函数和析构函数的执行顺序。 6、掌握利用访问声明调整基类成员在派生类中的访问属性。 二、试验内容 1、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。 #include public: Time(int h,int m, int s) { hours=h; 共29 页,第 22页 minutes=m; seconds=s; } void display() { cout<<\出生时间:\时\分\秒\} protected: int hours,minutes,seconds; }; class Date { public: Date(int m,int d,int y) { month=m; day=d; year=y; } void display() { cout<<\出生年月:\年\月\日\} protected: int month,day,year; }; class Birthtime:public Date,public Time { public: Birthtime(string cn,int yy,int mm,int dd,int hh,int mint,int ss):Date(yy,mm,dd),Time(hh,mint,ss) { //strcpy(childname,cn); childname=cn; } void display() { cout<<\姓名:\Date::display(); Time::display(); } private: string childname; }; 共29 页,第 23页 int main() { Birthtime ys(\张健\ys.display(); return 0; } 2、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。 #include private: int no; string name; public: void input() { cout<<“请输入编号和姓名:”;cin>>no>>name;} void display() {cout<<“编号: ”< 共29 页,第 24页 cout<<“姓名: ”< class student: public person {private: int bh,score; public: void get() {input(); cout<< “请输入班号和成绩:”; cin>>bh>>score; } void show() {display(); cout<<“班号: ”< class teacher: public person { private: string zc,bm; public: void get() { input(); cout<< “请输入职称和部门:”; cin>>zc>>bm; } void show( ) { display(); cout<<“职称: ”< int main( ) { student s; teacher t; s.get( ); s.show( ); t.get( ); t.show( ); return 0; } 共29 页,第 25页 3、给出下面的基类: class area { protected: double height; double width; public: area(double h,double w) { height=h; width=w; } virtual double getarea()=0; }; 【要求】 (1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。 (2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。 (3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。 共29 页,第 26页 #include area_cl(double r, double s) {height=r;width=s;} virtual double area()=0; }; class rectangle:public area_cl{ public: rectangle(double r,double s):area_cl(r,s){}; double area() { return height*width/2;} }; class isosceles:public area_cl{ public: isosceles(double r,double s):area_cl(r,s){}; double area() { return height*width; } }; int main() { rectangle rec(10.0,5.0); isosceles iso(4.0,6.0); area_cl *area1=&rec; area_cl *area2=&iso; 共29 页,第 27页 cout<<\三角形面积是\矩形面积是\ return 0; } 实验报告要求 每人针对每个实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。 实验报告主要包括四方面内容: ⑴ 实验内容 实验题目与要求。 (2) 程序清单 实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。 (3)运行结果 原始数据,程序运行结果截图及说明。 (4) 实验总结 共29 页,第 28页 调试过程及调试中遇到的问题及解决办法;调试程序的收获心得与体会,分析不足之处。 共29 页,第 29页
正在阅读:
河北工业大学14年面向对象程序设计实验报告(内含完整程序)07-05
佛家思想08-18
第一次报检员资格全国统一考试试卷及答案11-28
一年级上册易错笔顺的字05-21
现场混装炸药车性能指标及考核标准(修改)03-14
成都德语寒假培训:德语初级详细笔记05-10
网上商城购物系统毕业设计论文05-28
我希望什么作文(精选8篇)03-10
333教育综合中国教育史背诵(打印版)10-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 河北
- 内含
- 工业大学
- 程序设计
- 面向
- 对象
- 完整
- 实验
- 程序
- 报告
- 安全检查制度
- 基层武装工作存在的问题和解决方案
- 2018年度增值企业年报 - 图文
- 2017年上海银行招聘考试计算机学:计算机基础考试题
- 全省卫生统计工作先进个人名单
- 钢结构课程设计30m跨度
- 学前教育专业学生专业面试准备的研究
- 2016-2017人教版六年级上册语文期中考试
- 2013一级建造师市政实务重点知识
- 天津大学党校考试题库及答案
- 特殊平行四边形拓展提高题
- 煤气净化系统
- 世界百年“货币战争”,中国终于宣布开战!
- 金台区中小学教师命题比赛参赛试五年级语文
- 苏教版四年级上册第二单元
- 2018年在开发区经济工作会议上的讲话
- 腾冲和顺
- 膜材料
- 网络时代大学生接受思想政治教育的障碍及其对策-2019年教育文档
- 《木兰诗》余映潮 教学实录