当前位置:文档之家› 面向对象实验题及答案(全)

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


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";
1B:格式化输出实数
从键盘读取本金和年利率,求 20 年中每年末本息合计有多少钱。 输入:用空格分隔的两个数,都可以带小数点 输出:以“钱数(?年后)”的方式显示,以“2 格、右对齐”的方式显示年,以“共 10 格、 小数点后取 2 位、右对齐”的方式显示本息合计的钱数,见示例 示例:本金 973.45 元、年利率 2%的显示结果如下
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)); }
cout<<"Max="<<max<<endl;
cout<<"Min="<<min<<endl;
cout<<"Avg="<<avg<<endl;
}
2B:返回引用的函数
下面的主函数需要调用函数 Ref_Max,其返回值是 int 型数组前 n 个元素的最大值的引 用,主函数的功能是每次把最大值置为-1,并显示当前数组的值。编写 Ref_Max 函数,使 得程序可以正确运行。 #include <iostream> using namespace std; #define N 10 //此处编写 Ref_Max 函数的代码 void main() {
//此处编写 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 个数的最大值、最小值、平均值
实验 1 cin、cout 及面向过程的编程
1A:显示某个日期是星期几
(1) 输入、输出要求: 输入:3 个正整数,依次为年、月、日,比如 2049 10 1 输出:按类似“[2049-10-5] is Friday.”的形式输出 示例:
(2) 处理方法 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式,
下面的程序只写出了主函数 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
void Set(int y,int m,int d); void Display();
//用参数更改日期 //显示日期及星期几
private:
// void SetWeek();
//由当前日期计算是星期几,设置 week
int m_year,m_month,m_day,m_week; //数据成员,存放年月日和星期几
预期的运行结果如下: 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).
实验 3 答案 3A:类声明及函数成员的代码如下:
3B:多文件编程
View: CMyDate.h: CMyDate.cpp:
Main:
实验 4 静态成员与对象参数
4A:关于平面上的点
定义一个类 CMyPoint,其中含有 2 个私有数据成员 m_x 和 m_y 分别记载平面直角坐标
系中一个点的 x 坐标和 y 坐标,另有 3 个静态数据成员:m_count 记载现有点数,m_sumX
实验 2 答案 2A:引用作为函数的参数
2B:返回引用的函数
2C:不同类型的数组排序
实验 3 类与对象
下面是关于 CMyDate 类的声明和主函数 main:
class CMyDate
{
public:
CMyDate(int y,int m,int d); ~CMyDate(){};
//构造函数,以参数设置日期 //析构函数,无操作
1D:验证常变量
设计一个完整程序验证“常变量形参的值不得更改”,其中包含 main 及一个函数,该函 数以常变量作为形参,在函数中试图修改该形参变量的值(这是违反规则的),该代码在编译 时应见到如下错误提示:
实验 1 答案 1A:显示某个日期是星期几
1B:格式化输出实数
1C:格式化输出素数表 1D:验证常变量
1C:格式化输出素数表
从键盘读取两个正整数,记作 a、b,显示 a、b 之间(含 a、b)的所有素数。 每行 10 个,每个数用 6 格,右对齐。 输入:用空格分隔的两个正整数 输出:每行 10 个素数,每个数用 6 格,右对齐,在素数表的下方显示“共有?个素数” 示例:在 a=1,b=100 时,输出应为:
}
完成以上各项要求,使得程序可以正确运行。
4B:求两点间距离
在前述代码的基础上,添加函数成员 Distance,以一个点为参数,求该点到本点的距离。然 后在主函数原代码的后面添加如下代码,使得程序能够正确运行。
double d1=A.Distance(B); double d2=B.Distance(A); cout<<"\nA B ="<<d1<<endl; cout<<"\nB A ="<<d2<<endl;
其中最著名的是蔡勒(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。
(2) 设计成员函数 SetData,用于设定两个数据成员的值,并检测坐标的绝对值必须不超过
100,对于试图超过 100 的情况都予以拒绝(即不更改数据成员的当前值);
(3) 设计成员函数 Display,显示平面上一个点的坐标,希望的显示形式为(x,y),小数点后取
3 位;
(4) 设计静态函数成员 ShowAvg,功能是显示当前各点坐标的平均值;
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:不同类型的数组排序
};
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; }
3A:单文件编程
了解基于类的编程的基本框架。完成以下操作: (1) 启动 VC,新建操作台工程及源程序文件 (2) 将上述代码粘贴到该文件内。 (3) 查看“类视图”和“文件视图”中有哪些内容,查看相应文件夹中的文件名称 (4) 在类声明与 main 之间编写 CMyDate 的各个方法成员的代码 (5) 在类声明的前面添加#include 等项 (6) 运行程序,观察结果 (7) 为程序添加“星期几”的功能,相应地修改相关函数成员 (8) 运行程序,观察结果
相关主题