已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
. 程序设计与问题求解 ii 实验指导书实验指导书 程序设计与问题求解 ii教改项目组编 2011 年 3 月 2 目 录 实验一实验一 数组、结构体和函数综合编程数组、结构体和函数综合编程 .3 一、实验目的.3 二、实验内容.3 三、实验结果与分析.5 实验二实验二 递归程序设计递归程序设计 .6 一、实验目的.6 二、实验内容.6 三、实验结果与分析.7 实验三实验三 类与对象(一)类与对象(一) .8 一、实验目的.8 二、实验内容.8 三、实验结果与分析.11 实验四实验四 类与对象(二)类与对象(二) .12 一、实验目的.12 二、实验内容.12 三、实验结果与分析.14 实验五实验五 继承与多态继承与多态 .15 一、实验目的.15 二、实验内容.15 实例讲解:.18 三、实验结果与分析.20 实验六实验六 运算符重载和模板类运算符重载和模板类 .21 一、实验目的.21 二、实验内容.21 三、实验结果与分析.22 实验七实验七 流与文件操作编程流与文件操作编程 .23 一、实验目的:.23 二、实验内容:.23 三、实验结果与分析.23 实验八实验八 链表编程链表编程 .24 一、实验目的:.24 二、实验内容:.24 三、实验结果与分析.25 3 实验一实验一 数组、结构体和函数综合编程数组、结构体和函数综合编程 一、实验目的一、实验目的 1.复习数组,结构体和函数的相关知识; 2.掌握利用数组存储数据和进行编程的方法; 3.进一步掌握函数的编写。 二、实验内容二、实验内容 1学生成绩统计 从键盘输入一个班(全班最多不超过 30 人)学生某门课的成绩,当输入成绩为 负值时,输入结束,分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。 注:将成绩分为六个分数段,60 分以下为第 0 段,6069 为第 1 段,7079 为 第 2 段,8089 为第 3 段,9099 为第 4 段,100 分为第 5 段。 编程要求编程要求: 1.较好的用户输入输出提示信息 2.使用子函数来实现上述各个功能,并且要使用结构体数组来实现,该结构体 中包括学生学号和成绩 3.最好不要使用全局变量 提示提示: typedef tagstudent long num;/学生学号 float score;/学生分数 student; 供参考的函数原型如下:供参考的函数原型如下: /*函数功能:从键盘输入一个班学生某门课的成绩及其学号 当输入成绩为负值时,输入结束 函数参数: 存放学生信息的 student 结构体数组 函数返回值:学生总数 */ 4 int readscore(student stu); /*函数功能:统计不及格人数并打印不及格学生名单 函数参数:存放学生信息的 student 结构体数组 整型变量 n,存放学生总数 函数返回值:不及格人数 */ int getfail(student stu, int n); /*函数功能:计算全班平均分 函数参数:存放学生信息的 student 结构体数组,整型变量 n,存放学生总 数 函数返回值:平均分 */ float getaver(student stu, int n); /*函数功能:统计成绩在全班平均分及平均分之上的学生人数并打印其学生名 单 函数参数:存放学生信息的 student 结构体数组,整型变量 n,存放学生总 数 函数返回值:成绩在全班平均分及平均分之上的学生人数 */ int getaboveaver(student stu, int n); /*函数功能:统计各分数段的学生人数及所占的百分比 函数参数:存放学生信息的 student 结构体数组,整型变量 n,存放学生总 数 函数返回值:无 */ void getdetail(student stu, int n); 2成绩排名次 某班期末考试科目为数学(mt) 、英语(en)和物理(ph) ,有最多不超过 30 人 参加考试。要求: 5 (1)计算每个学生的总分和平均分; (2)按总分成绩由高到低排出成绩的名次; (3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数 编程要求编程要求: 1.较好的用户输入输出提示信息 2.使用子函数来实现上述各个功能 3.必须用结构体数组实现 提示提示: 设计好存放学生信息的结构体,方便编程。 用函数编程实现计算每个学生的总分; 用函数编程实现按总分由高到低对学生成绩排序 用函数编程实现查找学号为 k 的学生在班级中的排名名次及相关成绩等信息, 找不到时返回-1 值 三、实验结果与分析三、实验结果与分析 将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法, 写在实验报告上。 6 实验二实验二 递归程序设计递归程序设计 一、实验目的一、实验目的 1.学习递归程序的一般设计方法; 2.了解和熟练多参数的递归函数的使用; 3.掌握用递归程序设计方法解决实际问题。 二、实验内容二、实验内容 1.求游戏人员的年龄 有 5 个人围坐在一起,问第五个人多大年纪,他说比第 4 个人大 2 岁;问第 4 个人,他说比第 3 个人大 2 岁;问第 3 个人,他说比第 2 个人大 2 岁;问第 2 个人,他说比第 1 个人大 2 岁。第一个人说自己 10 岁,问第 5 个人多大年纪。 提示:此程序为递归问题,递归公式为: 10(1) ( ) (1)2(1) n age n age nn 2.计算最大公约数 利用计算最大公约数的三条性质,用递归方法计算两个整数的最大公约数。 性质 1:如果 xy,则 x 和 y 的最大公约数与 x-y 和 y 的最大公约数相同,即 gcd( , )gcd(, )x yxy yxy 性质 2:如果 yx,则 x 和 y 的最大公约数与 x 和 y-x 的最大公约数相同,即 gcd( , )gcd( ,)x yx yxxy 性质 3:如果 x=y,则 x 和 y 的最大公约数与 x 值和 y 值相同,即 gcd( , )x yxy 注意:上述两个代码的编写都非常简单,在代码编写成功后,需要自己再回忆 一下代码的编写过程,复习以前学过的内容,学习代码的调试。 3.整数划分问题 将正整数 n 表示成一系列正整数之和:n=n1+n2+nk,其中 n1n2nk1,k1。 正整数 n 的这种表示称为正整数 n 的划分。求正整数 n 的不同划分个数。 例如正整数 6 有如下 10 种不同的划分: 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1+1+1+1。 7 前面的几个例子中,问题本身都具有比较明显的递归关系,因而容易用递归函数直接求解。 在本例中,如果设 p(n)为正整数 n 的划分数,则难以找到递归关系,因此考虑增加一个自 变量:将最大加数 n1 不大于 m 的划分个数记作 q(n,m)。可以建立 q(n,m)的如下递归关系。 如要求解 6 的整数划分,即是求 q(6,5). 其中 n=6,m=5。 编程要求: (1)编程求出任意 10 以内的整数的所有可能划分总数。 (必做!) (2)选作部分:打印输出 6 的所有划分形式。 三、实验结果与分析三、实验结果与分析 将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法, 写在实验报告上。 1 1, 1 ),() 1,( ) 1,(1 ),( 1 ),( mn mn mn mn mmnqmnq nnq nnq mnq 8 实验三实验三 类与对象(一)类与对象(一) 一、实验目的一、实验目的 1. 初步掌握面向对象的思想,类的封装,多文件项目; 2. 掌握类的概念、类的成员的概念和类的封装性; 3掌握类对象的定义; 4理解类的成员的访问控制的含义,公有、私有和保护成员的区别; 5初步掌握用类和对象编制基于对象的编程; 6学习检查和调试基于对象的程序; 7. 掌握工程文件的编译方法; 8. 逐步从面向过程编程转到面向对象编程。 二、实验内容二、实验内容 1、验证题目 将下面的程序正确划分到不同的文件中,编译链接运行,观测运行结果与期望 是否相符。 时间类: /mytime.h #ifndef mytime_h_ #define mytime_h_ #include using namespace std; class time private: int hours; int minutes; public: time(); time(int h,int m=0); void addmin(int m); void addhr(int h); void reset(int h=0,int m=0); time sum(const time void show() const; ; 9 #endif /mytime.cpp #include “mytime.h“ time:time() hours=minutes=0; time:time(int h,int m) hours=h; minutes=m; void time:addmin(int m) minutes+=m; hours+=minutes/60; minutes%=60; void time:addhr(int h) hours+=h; void time:reset(int h,int m) hours=h; minutes=m; time time:sum(const time sum.minutes=minutes+t.minutes; sum.hours=hours+t.hours+sum.minutes/60; sum.minutes%=60; return sum; void time:show()const cout using namespace std; #include “mytime.h“ int main() time a; time b(5,40); time c(2,55); cout using namespace std; class time int hour; int minute; int sec; void set_time(); void show_time(); ; time t; int main( ) set_time(); show_time(); return 0; void set_time() 11 cint.hour; cint.minute; cint.sec; void show_time() cout using namespace std; class box public: box(int=10,int=10,int=10); box:box(box int volume( ); private: int height; int width; int length; ; 13 box:box(box width = b.width; length = b.length; cout #include using namespace std; class point double x; double y; public: point(double a,double b) x=a; y=b; friend double dist(point a,point b); ; double dist(point a,point b) return sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); void main() point p1(1,2); point p2(5,2); cout #include class shape public: virtual float area( void) =0;/虚函数 virtual void setdata(float ,float =0) =0;/虚函数 ; class triangle:public shape float w,h;/三角形边长为 w,高为 h public: triangle(float w=0,float h=0) w=w;h = h; float area( void) return w*h/2; /定义虚函数 void setdata(float w,float h=0) w=w; h = h; /定义虚函数 ; class rectangle:public shape float w,h;/矩形边长为 w,高为 h public: rectangle(float w=0,float h=0) w=w; h = h; float area( void)return w*h; /定义虚函数 17 void setdata(float w,float h=0)w=w; h = h; /定义虚函数 ; class square:public shape float s;/正方形边长 s public: square(float a=0) s=a; float area( void) return s*s/2; /定义虚函数 void setdata(float w,float h=0)s=w; /定义虚函数 ; class circle:public shape float r;/圆的半径为 r public: circle(float r=0) r=r; float area( void)return 3.1415926*r *r ; /定义虚函数 void setdata(float w,float h=0)r=w; /定义虚函数 ; class compute shape *s;/指向基类的指针数组 public: compute() s= new shape *4;/给几何图形设置参数 s0 = new triangle(3,4); s1 = new rectangle(6,8); s2 = new square(6.5); s3 = new circle(5.5); float sumarea(void ) ; compute(); void setdata(int n, float a,float b=0) /a sn-setdata(a,b); /b ; compute:compute()/释放动态分配的存储空间 18 for(int i= 0; iarea();/通过基类指针实现多态性 return sum; void main(void ) compute a; cout using std:cout; using std:endl; class baseclass public: /*virtual*/ void print() /请去掉注释后查看结果有何不同, 并思考 为什么? 19 /virtual 只能在声明时使用, 在定义时(cpp 中)不能有! coutprint(); /virtual: aaa; !virtual: aaa baseclass_p = /父类指针指向子类对象 baseclass_p-print(); /virtual: bbb; !virtual: aaa 解释: override 与 overload override 可以理解为 覆盖, 重定义, 重写, 是指子类可以写一个函数原型(包 括参数列表, 返回值类型) 与父类一模一样的成员方法, overload 可以理解为 重载, 它不涉及类的层次, 它是指可以通过参数列表的 不同同时写出多个 同名函数! 上述的 baseclass.print(); subclass.print(); 均可以属于 override; virtual 的含义: 20 不用 virtual 的话, 父类指针指向子类对象时, 它会根据指针的类型确 定调用父类还是子类的方法; 若用 virtual 的话, 父类指针指向子列对象时, 它会根据指针所指对象 的类型(而非指针的类型)来确定该调用子类还是父类的方法! 三、实验结果与分析三、实验结果与分析 将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法, 写在实验报告上。 21 实验六实验六 运算符重载和模板类运算符重载和模板类 一、实验目的一、实验目的 1 进一步了解运算符重载的概念和使用方法; 2 掌握几种常用的运算符重载的方法; 3 了解转换构造函数的使用方法; 4. 掌握模板的定义和应用方法 二、实验内容二、实验内容 1、模板类 将冒泡排序中的用于比较之后的交换部分(即数组 ai和 ai-1比较后,若后 继元素比前面的元素大,则它们要互换位置)用函数 swap(t,t)模板实现。并 写一个主函数分别进行字符数组、整形数组和浮点形数组的数据进行测试。 2、运算符重载 定义一个复数类,通过重载运算符: +,-,*,/,直接实现二个复数之间的乘 除运算。编写一个完整的程序,测试重载运算符的正确性。要求加法“+”用成 员函数实现重载,减法“-”用成员函数实现重载。乘法“*”用友元函数实现 重载,除法“/”用成员函数实现重载。 两复数相乘的计算公式为:(a+b i)*(c+d i)=(acbd )+(ad+bc) i 两复数 相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i 复数类及运算符重载函数可定义为: class complex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广东省深圳市南山区中考英语三模试卷
- 2 哪些领域对闪电定位仪的需求比较大
- 浙江省台州市台州十校联考2024-2025学年高一上学期期中考试生物试题含答案
- 人教版二年级上册美术教案
- 第三单元《珍爱我们的生命》-2024-2025学年七年级道德与法治上册单元测试卷(统编版2024新教材)
- 广东省珠海市第九中学2024-2025学年九年级上学期11月期中化学试题(含答案)
- 职业学院船舶工程技术专业人才培养方案
- 便携式遥控阻车器产业深度调研及未来发展现状趋势
- 手表自动上弦器产品供应链分析
- 医用人体成分分析仪产业运行及前景预测报告
- 设备包机到人管理制度
- 初中英语-现在进行时 过去进行时(含练习)
- 中小学校财务管理案例分析
- 《我们小点儿声》评课报告
- 人 大 代 表 履 职 档 案
- C25喷射混凝土配合比设计与使用
- 企业经营模拟实训知到章节答案智慧树2023年华南农业大学
- (完整版)全国各省份城市明细表
- 胆总管囊肿护理查房
- 《Matlab语言与及其应用》实验报告
- 俄罗斯地缘政治学
评论
0/150
提交评论