东南大学四系_C上机练习_第1页
东南大学四系_C上机练习_第2页
东南大学四系_C上机练习_第3页
东南大学四系_C上机练习_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上机练习题(时间:70分钟)(分数:100分卷折合总分30分)说明:首先在Z盘建立一个以自己的学号命名的文件夹,用于保存上交的考试文件。 可 以先在E盘对以下问题按要求编制程序,调试运行。然后将源程序文件和自定义的头文 件(若存在)复制到Z盘自己的文件夹中。改错题(50分)【要求】请在错误行中直接修改。不允许.修改没有错误的行,不允许.删除有错误的行,不允许. 添加新的语句,不要删除 任何注解。将修改后源程序以文件名MYF1_C.cpp存入Z盘自己的文件夹中,不要修改文件名【题目】下面程序定义了圆类Circle及其两个派生类:球体类 Sphere、圆柱体类Cylinder修改程序中的错误,运行

2、并输出正确的结果为:球体的表面积=1256 析构球体。析构圆。圆柱体的表面积=1884 圆柱体的底圆面积=314 析构圆柱体。析构圆。【含有错误的源程序如下】# in clude# defi ne PI = 3.14class Circle/ 圆类 private: float r;public:Circle ( float a=0 ) : r( a ) Circle ( ) cout 析构圆。n ”;double area( ) return ( PI * r * r ) ; ;class Sphere :public Circle/求圆面积球体类 public:Sphere ( float

3、 a=0 ) : Circle ( a );Sphere ( ) cout 析构球体。ndouble area( ) return ( 4 * PI * r * r ) ; /求球体表面积;class Cylinder :public Circle/ 圆柱体类 float h ;public:Cylinder ( float a=0, float b=0 ) : Circle ( a ) h = b ; Cylinder ( ) cout “析构圆柱体。 n ”; double area( ) return ( 2 * PI * r * ( h + r ) ) ; / 求圆柱体表面积;void

4、 main( ) Circle *p = new Sphere ( 10 ) ;cout 球“体的表面积 =” area( ) endl ; delete p ;Cylinder c( 10, 20 ) ;Circle *p = &c ;cout 圆“柱体的表面积 =” area( ) endl ;cout 圆“柱体的底圆面积 =” c.area( ) endl ;编程题(50分)【要求】 将源程序以文件名 MYF 2_C.cpp 存入 Z 盘自己的文件夹中,不要修改文件名。 若存在原始数据文件、结果输出文件,最后也复制到Z盘自己的文件夹中。【题目】编写面向对象的程序: 若文本文件 stu.t

5、xt 中的 n 个学生资料已按成绩降序排列, 现将从 键盘输入的 k 个学生资料插入到文件 stu.txt 中,插入后文件 stu.txt 中的 n+k 个学生资 料仍然保持按成绩降序排列。假设: 文件 stu.txt 中的学生数目不祥,但总学生数(原有+新增)不超过 100 人。【提示】 定义“学生类 Student ”: 私有成员数据:int id ;/学号char name 10 ;/ 姓名int score ;/ 成绩公有成员函数:/ 成员重载关系运算符 bool operator (istreamfriend ostream & operator ( ostream 定义“插入排序类

6、 Sort ”,实现插入排序工作: 私有成员数据:&in , Student &s ) &out , Student &sStudent s100 ;/存放已按成绩降序排列的n 个学生资料int n ;/存放数组 s 中实际元素的个数fstream dfile ;/输入输出文件流公有成员函数:Sort ( ) ;/ 构造函数Sort ( ) ;/ 析构函数void insert ( Student &x ) ;/ 将 x 学生有序插入到数组 s 中void show ( ) ;/屏幕输出数组 s 中的学生资料,按每行 1 个学生的格式算法提示: 在构造函数中: 打开文本文件 stu.txt ,

7、将其中的学生资料读入到成员数组 s 中,统 计出数组s中实际元素的个数,并赋给成员n。关闭文件stu.txt。 在析构函数中: 将数组 s 中的学生资料依次写入到文本文件 stu.txt 中,按每行 1 个学生的格式写入,但学号、姓名、成绩之间要有若干空格间隔。关闭文件stu.txt。 有序插入算法:将x学生有序插入到数组s中,可从数组s的最后一个实际元素开始,依次向前扫描数组元素,若s i 小于x,则将s i 放入s i+1 (即后移一个位置),并继续向前扫描,直到找到某个s i 大于或等于X,将x放入s i+1 元素中。注意:插入时, 要考虑初始时数组 s 可能是空数组 (即文件 stu.

8、txt 中可能没有学生资料, 导致 数组 s 初始时没有元素) ,在插入第一个元素时,要作特殊处理。编写 main( ) 函数,实现对学生资料的插入排序: 使用“插入排序类 Sort ”定义对象: Sort sss ; 使用“学生类 Student ”定义对象: Student x ; 从键盘输入若干个学生资料有序插入到对象sss的数组容器s中,每次输入一个学生资料x,调用一次函数sss. insert( x ),循环这个过程。关于程序的运行: 第 1 次运行: 在构造对象 sss 时,由于数据文件 stu.txt 原先不存在, 会生成一个空 的数据文件。然后使用键盘输入若干个学生资料,有序插

9、入到 sss 中。而运行结束前, 在析构 sss 时,会自动将 sss 中的学生资料写入文件 stu.txt 中。 第 2 次运行: 在构造对象 sss 时,由于数据文件 stu.txt 已存在, 且存有若干个学生 资料,会自动插入到 sss 中。然后使用键盘再输入若干个学生资料,有序插入到 sss 中。而运行结束前, 在析构 sss 时, 会自动将 sss 中的学生资料写入文件 stu.txt 中。 第3次运行:【参考答案】# include# includeclass Student/“学生类 Student ”的声明 int id ;char name 10 ;int score ;pu

10、blic:bool operator ( Student &s ) if ( score ( istream &in , Student &s ) if ( in = cin ) cout s. id s. name s. score ;friend ostream & operator ( ostream &out , Student &s ) out setw(12) s.id setw(14) setw(10) s.score temp ;if ( dfile. eof( ) = 0 ) s n+ = temp ; / 若读到数据,则放入数组中 dfile. clear( ) ;/ 跳出 while 循环时,流为 false ,需恢复,析构时还要用dfile. close( ) ;/ 关闭输入文件Sort:Sort( )/ 析构函数 dfile. open ( “stu.txt ”, ios:out ) ; / 打开输出文件for ( int i=0 ; in ; i+ ) dfile =0 ; i- )/寻找插入点、腾空位置if ( s i x ) s i+1 =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论