东南大学四系_C++上机练习.doc_第1页
东南大学四系_C++上机练习.doc_第2页
东南大学四系_C++上机练习.doc_第3页
东南大学四系_C++上机练习.doc_第4页
全文预览已结束

下载本文档

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

文档简介

上机练习题(时间:70分钟) (分数:100分卷折合总分30分)说明:首先在Z盘建立一个以自己的学号命名的文件夹,用于保存上交的考试文件。可以先在E盘对以下问题按要求编制程序,调试运行。然后将源程序文件和自定义的头文件(若存在)复制到Z盘自己的文件夹中。改错题(50分)【要求】请在错误行中直接修改。不允许修改没有错误的行,不允许删除有错误的行,不允许添加新的语句,不要删除任何注解。将修改后源程序以文件名MYF1_C.cpp存入Z盘自己的文件夹中,不要修改文件名。【题目】下面程序定义了圆类Circle及其两个派生类:球体类Sphere、圆柱体类Cylinder。修改程序中的错误,运行并输出正确的结果为:球体的表面积=1256析构球体。析构圆。圆柱体的表面积=1884圆柱体的底圆面积=314析构圆柱体。析构圆。【含有错误的源程序如下】# include# define 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 a=0 ) : Circle ( a ) ; Sphere ( ) cout “析构球体。n” ; double 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 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分)【要求】将源程序以文件名MYF2_C.cpp存入Z盘自己的文件夹中,不要修改文件名。若存在原始数据文件、结果输出文件,最后也复制到Z盘自己的文件夹中。【题目】编写面向对象的程序:若文本文件stu.txt中的n个学生资料已按成绩降序排列,现将从键盘输入的k个学生资料插入到文件stu.txt中,插入后文件stu.txt中的n+k个学生资料仍然保持按成绩降序排列。假设:文件stu.txt中的学生数目不祥,但总学生数(原有+新增)不超过100人。【提示】定义“学生类Student”:私有成员数据:int id ; /学号char name 10 ; /姓名int score ; /成绩公有成员函数:bool operator ( Student &s ) ; /成员重载关系运算符 ( istream &in , Student &s ) ;friend ostream & operator ( ostream &out , Student &s ) ;定义“插入排序类Sort”,实现插入排序工作:私有成员数据:Student s100 ; /存放已按成绩降序排列的n个学生资料int n ; /存放数组s中实际元素的个数fstream dfile ; /输入输出文件流公有成员函数:Sort ( ) ; /构造函数Sort ( ) ; /析构函数void insert ( Student &x ) ; /将x学生有序插入到数组s中void show ( ) ; /屏幕输出数组s中的学生资料,按每行1个学生的格式算法提示:在构造函数中:打开文本文件stu.txt,将其中的学生资料读入到成员数组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.txt中可能没有学生资料,导致数组s初始时没有元素),在插入第一个元素时,要作特殊处理。编写 main( ) 函数,实现对学生资料的插入排序:使用“插入排序类Sort”定义对象: Sort sss ;使用“学生类Student”定义对象: Student x ;从键盘输入若干个学生资料有序插入到对象sss的数组容器s中,每次输入一个学生资料x,调用一次函数sss. insert( x ),循环这个过程。关于程序的运行:第1次运行:在构造对象 sss 时,由于数据文件 stu.txt 原先不存在,会生成一个空的数据文件。然后使用键盘输入若干个学生资料,有序插入到 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 ; public: 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 = s i

温馨提示

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

评论

0/150

提交评论