面向对象实验题及答案(全)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(5) 主函数如下(可复制粘贴):
void main( )
{
CMyPoint A(2,4),B;
cout<<"\nP1=";
A.Display( );
//显示 A 点
B.SetData(5,3);
cout<<"\nP2=";
B.Display( );
//显示 B 点
cout<<endl;
CMyPoint::ShowAvg( ); //显示当前各点的坐标均值
预期的运行结果如下: P1=(2,4) P2=(5,3) (3.5,3.5) A B =3.16228 B A =3.16228 A is nearer to O(0,0).
//此处编写 setdata 函数的代码
void main()
{
int max,min; //用于存放最大值和最小值
double avg;
//用于存放平均值
int x[N]={29,78,0,24,80,12,2,86,21,73}; setdata(x,10, ?????); //求前 10 个数的最大值、最小值、平均值
3B:多文件编程
在指导教师带领下完成以下操作: (1) 启动 VC,新建操作台工程及关于主函数的源程序文件,仅将上述主函数 main 粘贴到该
文件内。 (2) 查看“类视图”和“文件视图”中有哪些内容,查看相应文件夹中的文件名称 (3) 新建 CMyDate 类,查看文件夹中添加了哪些文件,以及“类视图”和“文件视图”中
实验 3 答案 3A:类声明及函数成员的代码如下:
3B:多文件编程
View: CMyDate.h: CMyDate.cpp:
Main:
实验 4 静态成员与对象参数
4A:关于平面上的点
定义一个类 CMyPoint,其中含有 2 个私有数据成员 m_x 和 m_y 分别记载平面直角坐标
系中一个点的 x 坐标和 y 坐标,另有 3 个静态数据成员:m_count 记载现有点数,m_sumX
添加了哪些内容。检查目前 CMyDate 类中有哪些成员。 (4) 以集成环境辅助方式为 CMyDate 类添加数据成员 m_year,观察“类视图”的变化。 (5) 以手工方式为 CMyDate 类添加数据成员 m_month,观察“类视图”的变化。 (6) 添加数据成员 m_day 和 m_week,方式自选。 (7) 以集成环境辅助方式添加公共的 Set 函数成员及 Display 函数成员,观察“类视图”以
(2) 设计成员函数 SetData,用于设定两个数据成员的值,并检测坐标的绝对值必须不超过
100,对于试图超过 100 的情况都予以拒绝(即不更改数据成员的当前值);
(3) 设计成员函数 Display,显示平面上一个点的坐标,希望的显示形式为(x,y),小数点后取
3 位;
(4) 设计静态函数成员 ShowAvg,功能是显示当前各点坐标的平均值;
4C:判断“点的远近”
在 4B 前述代码的基础上,添加全局函数 Near,入口参数是两个点,功能是判断“前一个点 比后一个点距离原点更近”,出口参数是 Yes(1)或者 No(0)。然后在 4B 基础上主函数原代码 的后面添加如下代码,使得程序能够正确运行。
char cc; cc=Near(A,B)?'A':'B'; cout<<cc<<" is nearer to O(0,0).\n";
cout<<"Max="<<max<<endl;
cout<<"Min="<<min<<endl;
cБайду номын сангаасut<<"Avg="<<avg<<endl;
}
2B:返回引用的函数
下面的主函数需要调用函数 Ref_Max,其返回值是 int 型数组前 n 个元素的最大值的引 用,主函数的功能是每次把最大值置为-1,并显示当前数组的值。编写 Ref_Max 函数,使 得程序可以正确运行。 #include <iostream> using namespace std; #define N 10 //此处编写 Ref_Max 函数的代码 void main() {
实验 1 cin、cout 及面向过程的编程
1A:显示某个日期是星期几
(1) 输入、输出要求: 输入:3 个正整数,依次为年、月、日,比如 2049 10 1 输出:按类似“[2049-10-5] is Friday.”的形式输出 示例:
(2) 处理方法 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式,
及.h 文件和.cpp 文件的变化。 (8) 编写构造函数、Set、Display 的代码,然后运行程序 (9) 以手工方式添加私有 SetWeek 函数成员(为什么设定为私有?),并用实验 1 的方法解决
当前日期是星期几的问题,编写代码 (10) 修改 Display,添加关于星期几的显示 (11) 在 Set 和构造函数中添加对 SetWeek 函数的调用命令 (12) 在运行程序,查看结果
1C:格式化输出素数表
从键盘读取两个正整数,记作 a、b,显示 a、b 之间(含 a、b)的所有素数。 每行 10 个,每个数用 6 格,右对齐。 输入:用空格分隔的两个正整数 输出:每行 10 个素数,每个数用 6 格,右对齐,在素数表的下方显示“共有?个素数” 示例:在 a=1,b=100 时,输出应为:
};
void main() {
CMyDate d1(2049,10,1),d2(2001,1,1); d1.Display(); cout <<endl; d2.Display(); cout<<endl; d2.Set(2001,1,1); d2.Display(); cout<<endl; d2=d1; d2.Display(); cout<< endl; }
1B:格式化输出实数
从键盘读取本金和年利率,求 20 年中每年末本息合计有多少钱。 输入:用空格分隔的两个数,都可以带小数点 输出:以“钱数(?年后)”的方式显示,以“2 格、右对齐”的方式显示年,以“共 10 格、 小数点后取 2 位、右对齐”的方式显示本息合计的钱数,见示例 示例:本金 973.45 元、年利率 2%的显示结果如下
实验 2 答案 2A:引用作为函数的参数
2B:返回引用的函数
2C:不同类型的数组排序
实验 3 类与对象
下面是关于 CMyDate 类的声明和主函数 main:
class CMyDate
{
public:
CMyDate(int y,int m,int d); ~CMyDate(){};
//构造函数,以参数设置日期 //析构函数,无操作
下面的程序只写出了主函数 main,其中包含对名为 sort 的函数及名为 display 的函数多 次调用。sort 函数用于将一个数组排序,display 函数用于显示数组中的各个元素。试编写相 应的函数。 #include <iostream> using namespace std; //此处根据需要编写函数 void main() {
实验 2 引用与函数重载
2A:引用作为函数的参数
下面的主函数需要调用函数 setdata,用于求 x 数组前 n 个元素的最大值、最小值、平均 值,编写函数 setdata,使得程序可以正确运行。
#include <iostream>
using namespace std;
#define N 20
1D:验证常变量
设计一个完整程序验证“常变量形参的值不得更改”,其中包含 main 及一个函数,该函 数以常变量作为形参,在函数中试图修改该形参变量的值(这是违反规则的),该代码在编译 时应见到如下错误提示:
实验 1 答案 1A:显示某个日期是星期几
1B:格式化输出实数
1C:格式化输出素数表 1D:验证常变量
int m1,m2,m3; int x1[]={29,78,0,24,80,12,2,86,21,73}; float x2[]={31.91,22.71,58.72,25.67,77.67,25.61,5.31,40.62,92.43,9.15,56.33,28.64}; double x3[]={1.548,1.884,2.476,1.761,9.689,0.591,4.325,0.196,1.973}; sort(x1,sizeof(x1)/sizeof(int)); display(x1,sizeof(x1)/sizeof(int)); sort(x2,sizeof(x2)/sizeof(float)); display(x2,sizeof(x2)/sizeof(float)); sort(x3,sizeof(x3)/sizeof(double)); display(x3,sizeof(x3)/sizeof(double)); }
int i,j; //用于存放最大值和最小值 int x[N]={29,78,0,24,80,12,2,86,21,73}; for(i=0;i<N;i++) {
Ref_Max(x,N)=-1; for(j=0;j<N;j++)
printf("%5d",x[j]); cout<<endl; } }
2C:不同类型的数组排序
3A:单文件编程
了解基于类的编程的基本框架。完成以下操作: (1) 启动 VC,新建操作台工程及源程序文件 (2) 将上述代码粘贴到该文件内。 (3) 查看“类视图”和“文件视图”中有哪些内容,查看相应文件夹中的文件名称 (4) 在类声明与 main 之间编写 CMyDate 的各个方法成员的代码 (5) 在类声明的前面添加#include 等项 (6) 运行程序,观察结果 (7) 为程序添加“星期几”的功能,相应地修改相关函数成员 (8) 运行程序,观察结果
}
完成以上各项要求,使得程序可以正确运行。
4B:求两点间距离
在前述代码的基础上,添加函数成员 Distance,以一个点为参数,求该点到本点的距离。然 后在主函数原代码的后面添加如下代码,使得程序能够正确运行。
double d1=A.Distance(B); double d2=B.Distance(A); cout<<"\nA B ="<<d1<<endl; cout<<"\nB A ="<<d2<<endl;
记载各点 x 坐标之和,m_sumY 记载各点 y 坐标之和。
(1) 设计构造函数、析构函数,构造函数允许是无参函数或者带双参数两种情况,无参构造
函数的功能是把点的坐标值设为(0,0),带双参数的构造函数则相应地设置私有成员的值,但
不允许参数绝对值超过 100,只要有任何一个参数绝对值超过 100 则将私有成员值置为(0,0);
void Set(int y,int m,int d); void Display();
//用参数更改日期 //显示日期及星期几
private:
// void SetWeek();
//由当前日期计算是星期几,设置 week
int m_year,m_month,m_day,m_week; //数据成员,存放年月日和星期几
其中最著名的是蔡勒(Zeller)公式。即
w
(
y
y 4
c 4
2c
26(m 1) 10
d
1)%7
公式中的符号含义: w——星期几 c——年份的前两位 y——年份的后两位 m——月,3≤m≤14,某年的 1、2 月视为上一年的 13、14 月,比如 2003 年 1 月 1 日要看 作 2002 年的 13 月 1 日 d——日
——代表取整,即只要整数部分
%——除法求余数 例如:对于 2049 年 10 月 1 日,计算过程如下:
w
(49
49 4
20 4
2
20
26(10 10
1)
1
1)%7
(49 12 5 40 28)%7
54%7
5
即 2049 年 10 月 1 日是星期 5。如果计算结果是负数,则加 7。
实验 1 cin、cout 及面向过程的编程 实验 2 引用与函数重载 实验 3 类与对象 实验 4 静态成员与对象参数 实验 5 拷贝构造函数与内存分配 实验 6 对象数组与子对象 实验 7 含有数组成员的对象与深拷贝 实验 8 运算符重载(1) 实验 9 运算符重载(2) 实验 10 继承与派生 实验 11 虚函数与类族 实验 12 STL
相关文档
最新文档