C++程序设计实验六_参考答案

更新时间:2024-06-27 23:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

广东金融学院实验报告

课程名称:C++程序设计

实验编号 及实验名称 姓 名 实验地点 指导教师 实验6 类和对象练习 系 别 班 级 实验时数 成 绩 参考答案 学 号 实验日期 同组其他成员 新电403 2011-10-27 6 曲政 无 一、 实验目的及要求 1. 学习面向对象设计的基本概念:模块分解的思路、类、函数、对象等的概念和编程。 2. 实践简单类的设计,包括数据抽象、成员函数的编写、封装、重载、静态成员等,并应用这些类完成给定的计算任务。 二、 实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio 2005 三、 实验内容及步骤(包含简要的实验步骤流程) 1. 关于控制结构的知识点和例题 (略) 2. 控制结构编程练习 ⑴ 设计一个圆(Circle)类,包含计算其周长(perimeter)和面积(area)两项功能。编写测试程序,输入半径(radius),打印出类似“半径为1的圆,周长为6.2832,面积为3.1416”的信息。 ⑵ 设计一个时间类MyTime,封装6个整型变量分别表示年(year)、月(month)、日(day)、时(hour)、分(minute)、秒(second)。仿照本课件例3.2取得当前系统时间,以1秒为间隔滚动显示。 ⑶ PointLine类 设计一个平面数据点类Point,封装double型坐标(x, y),并提供必要的入口和出口。 设计一个直线类Line,封装2个数据点对象,并提供必要的入口和出口。 设计主函数,从起点(0, 0)开始到终点(π, 0)结束,以横坐标π/20为步长,以端点坐标对形式输出一条正弦曲线(通过在格式符的字段序号后加“:fn”来控制小数位数,如{0:f4}): ⑷ Student类 设计一个学生类Student,包括学号ID、姓名name、平时成绩usual、考试成绩exam和总评成绩mark(以String保存学号和姓名、以double保存成绩数据),以及一个静态整型成员变量counter(保存学生人数)和一个静态浮点成员变量sum(保存总评成绩总和)。编写属性函数代替来入口和出口,并编写一个计算总评成绩的函数calcMark(按平时成绩占40%、考试成绩占60%的比例计算总评成绩)和一个分数累积函数sumMark。编写测试程序,仿照给定的演示程序StudentIO.cpp从给定的文本文件读入原始数据、计算总评成绩、以列表的方式输出原始数据和计算结果。最后计算总评平均成绩,并与学生人数一同输出到屏幕上。 第 1 页 共 10 页

四、 实验结果(源程序) (1) #include %using namespace System; ref class Circle { private: }; int main(array ^args) { double radius; Console::Write(\半径= \); radius = Convert::ToDouble(Console::ReadLine()); Circle circle(radius); Console::WriteLine(\半径为{0}的圆,周长为{1},面积为{2}。\, circle.getRadius(), circle.calcPerimeter(), double m_radius; Circle(double radius) { m_radius = radius; } double getRadius() { return m_radius; } double calcArea() { return Math::PI * m_radius * m_radius; } double calcPerimeter() { return 2 * Math::PI * m_radius; } public: circle.calcArea()); return 0; } 第 2 页 共 10 页

(2) #include %using namespace System; ref class MyDateTime { private: int m_year, m_month, m_day, m_hour, m_minute, m_second; public: MyDateTime(int year, int month, int day, int hour, int minute, int second) { }; } int getYear() { return m_year; } int getMonth() { return m_month; } int getDay() { return m_day; } int getHour() { return m_hour; } int getMinute() { return m_minute; } int getSecond() { return m_second; } bool Update() { } DateTime dt = DateTime::Now; if (dt.Second != m_second) { } return false; m_year = dt.Year; m_month = dt.Month; m_day = dt.Day; m_hour = dt.Hour; m_minute = dt.Minute; m_second = dt.Second; return true; m_year = year; m_month = month; m_day = day; m_hour = hour; m_minute = minute; m_second = second; 第 3 页 共 10 页

int main(array ^args) { } DateTime dt = DateTime::Now; MyDateTime^ time = gcnew MyDateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second); int i = 0; while (i < 60) { } if (time->Update()) { } Console::WriteLine(\, time->getYear(), time->getMonth(), i ++; time->getDay(), time->getHour(), time->getMinute(), time->getSecond()); return 0; 第 4 页 共 10 页

(3) #include %using namespace System; value class Point { private: }; ref class Line { private: }; Point m_p0, m_p1; Line(Point p0, Point p1): m_p0(p0), m_p1(p1) {} Line() {} ~Line() {} Line(Line% line) { m_p0 = line.m_p0; m_p1 = line.m_p1; } Line% operator=(Line% line) { m_p0 = line.m_p0; m_p1 = line.m_p1; return *this; } property Point P0 { } property Point P1 { } void setLine(Point p0, Point p1) { m_p0 = p0; m_p1 = p1; } Point getP0() { return m_p0; } Point getP1() { return m_p1; } void set(Point p1) { m_p1 = p1; } Point get() { return m_p1; } void set(Point p0) { m_p0 = p0; } Point get() { return m_p0; } public: double m_x, m_y; Point(double x, double y) { m_x = x; m_y = y; } property double X { } property double Y { } void setPoint(double x, double y) { m_x = x; m_y = y; } double getX() { return m_x; } double getY() { return m_y; } void set(double y) { m_y = y; } double get() { return m_y; } void set(double x) { m_x = x; } double get() { return m_x; } public: 第 5 页 共 10 页

int main(array ^args) { return 0; } p0.X = 0; p0.Y = Math::Sin(p0.X); while (p0.X < Math::PI) { } p1.X = p0.X + Math::PI / 20; p1.Y = Math::Sin(p1.X); Console::WriteLine(\, p0.X, p0.Y, p1.X, p1.Y); p0 = p1; Point p0, p1; 第 6 页 共 10 页

(4) #include \ using namespace System; using namespace System::IO; ref class Student { private: String^ m_id; String^ m_name; double m_usual; double m_exam; double m_mark; static int counter; static double sum, sqrsum; Student(String^ id, String^ name, double usual, double exam) { } Student() { counter ++; } ~Student() {} property String^ Id { } property String^ Name { } property double Usual { } property double Exam { } property double Mark { } double get() { return m_mark; } double get() { return m_exam; } void set(double exam) { m_exam = exam; } double get() { return m_usual; } void set(double usual) { m_usual = usual; } String^ get() { return m_name; } void set(String^ name) { m_name = name; } String^ get() { return m_id; } void set(String^ id) { m_id = id; } m_id = id; m_name = name; m_usual = usual; m_exam = exam; counter ++; public: 第 7 页 共 10 页

}; void calcMark() { } void sumMark() { } static int getCounter() { return counter; } static double getSum() { return sum; } static double getSqrsum() { return sqrsum; } sum += m_mark; sqrsum += m_mark * m_mark; m_mark = m_usual * 0.4 + m_exam * 0.6; 第 8 页 共 10 页

int main(array ^args) { return 0; } Console::WriteLine(\学生人数:{0}\, n); Console::WriteLine(\平均分数:{0:F1}\, average); Console::WriteLine(\标准偏差:{0:F2}\, stddev); int n = Student::getCounter(); sum = Student::getSum(); sqrsum = Student::getSqrsum(); average = sum / n; stddev = Math::Sqrt((n * sqrsum - sum * sum) / (n * (n - 1))); if (!File::Exists(filename)) { } FileStream fi(filename,FileMode::Open,FileAccess::Read);// 相当于:ifstream fi; StreamReader fr(%fi); { } fi.Close(); // 关闭文件 Student student; student.Id = str->Substring(0, 9); student.Name = str->Substring(10, 3); student.Usual = Convert::ToDouble(str->Substring(14, 3)); student.Exam = Convert::ToDouble(str->Substring(18, 3)); student.calcMark(); student.sumMark(); Console::WriteLine(\{1} {2} {3} {4:F1}\, student.Id, student.Name, student.Usual, // 相当于:fi.open(fn); while ((str = fr.ReadLine()) != nullptr) return -1; // 检测文件是否存在 // 如果文件不存在则打印错误信息 // 并退出程序 Console::WriteLine(\); Console::Write(L\班级:\); filename = Console::ReadLine() + L\; double sum, sqrsum, average, stddev; String^ filename; String^ str; student.Exam, student.Mark); 第 9 页 共 10 页

五、 实验总结(包括心得体会、问题回答及实验改进意见,可附页) 六、 教师评语 第 10 页 共 10 页

本文来源:https://www.bwwdw.com/article/mxr3.html

Top