int main() {Dog dog1,dog2,dog;
char Name1[20],Sex1,Name2[20],Sex2; int Age1,Age2;
double Weight1,Weight2;
cout<<\"请输入第一只小狗的名字、年龄、性别、体重:\\n\";//信息录入 cin>>Name1>>Age1>>Sex1>>Weight1;
dog1.Register(Name1,Age1,Sex1,Weight1);
cout<<\"请输入第二只小狗的名字、年龄、性别、体重:\\n\"; cin>>Name2>>Age2>>Sex2>>Weight2;
dog2.Register(Name2,Age2,Sex2,Weight2); cout<<\"第一条狗的信息如下:\\n\";//信息显示 dog1.print();
cout<<\"第二条狗的信息如下:\\n\"; dog2.print();
dog=dog1;//交换dog1和dog2的内容 dog1=dog2; dog2=dog;
cout<<\"二者交换以后信息为:\\n\";//通过输出交换结果检验类的定义有作用
cout<<\"第一条狗:\\n\"; dog1.print();
cout<<\"第二条狗:\\n\"; dog2.print(); return 0; }
2.实验结果:
精心整理 学习帮手
word完美格式
3.问题分析: 设计思路:
首先输入两个狗的信息,然后显示输入的信息,然后交换二者再次输出,通过再次输出的结果表明对其操作有效,从而表明类的定义是有效的。
(二)第二题:设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。 1.源程序代码:
#include #includeusing namespace std;
class Ellipse//定义椭圆类 {
private:
double x1,x2,y1,y2,S; public:
精心整理 学习帮手
word完美格式
void Register(double a,double b,double c,double d);//输入函数 double area();//面积计算函数 void feedback();//输出函数 };
void Ellipse::Register(double a,double b,double c,double d)//输入函数 {
x1=a; x2=c; y1=b; y2=d; }
double Ellipse::area()//面积计算函数,用公式:S=pi*a*b(a、b为半长轴、半短轴长) {
S=3.1415*fabs(x1-x2)*fabs(y1-y2)/4; return S;//返回面积值 }
void Ellipse::feedback()//输出函数,反馈输入值 {
cout<<\"您输入的点的坐标为:(\"<void main() {double a,b,c,d;
cout<<\"请依次输入外接矩形的两对角顶点的横纵坐标:\\n\"; cin>>a>>b>>c>>d; Ellipse ellipse;
ellipse.Register(a,b,c,d); ellipse.feedback();
cout<<\"椭圆面积为:\"<2.实验结果: (1)中心在原点:精心整理 学习帮手
word完美格式
(2)中心不在原点:
(三)第三题:仿照Date类设计一个Time类,按照各种可能的格式输出时间。 1.源程序代码:
#include using namespace std; class Time {int h,m,s; public:
void init(int,int,int);//输入函数 void print_hms();//时分秒 void print_hsm();//时秒分 void print_msh();//分秒时 void print_mhs();//分时秒 void print_shm();//秒时分 void print_smh();//秒分时
精心整理 学习帮手
word完美格式
};
void Time::init(int a,int b,int c) {
h=(a>=0&&a<24)?a:0; m=(b>=0&&b<60)?b:0; s=(c>=0&&c<60)?c:0; }
void Time::print_hms() {
cout<<\"时分秒:\"<void Time::print_hsm() {cout<<\"时秒分:\"<void Time::print_msh() {cout<<\"分秒时:\"<void Time::print_mhs() {cout<<\"分时秒:\"<void Time::print_shm() {cout<<\"秒时分:\"<void Time::print_smh() {
cout<<\"秒分时:\"<void main() {
int a,b,c;
cout<<\"请输入时间,按照时分秒格式:\"; cin>>a>>b>>c; Time time;
time.init(a,b,c); time.print_hms(); time.print_hsm(); time.print_mhs(); time.print_msh(); time.print_shm(); time.print_smh();
精心整理 学习帮手
word完美格式
}
2.实验结果:对多种超出范围的情况进行了检测: (1)正常输入:
(2)24点会被作为0点:
(3)分超过60:
精心整理 学习帮手
word完美格式
(4)秒超过60:
(5)时超过24:
精心整理 学习帮手
word完美格式
(四)实验题目四:(必做题)设计定义一个三角形类,成员函数应有输入三角形初始数据函数、求三角形面积函数、输出面积函数。并编写主函数加以测试。
1.程序源代码:
#include using namespace std; class triangle {double h,l,S; public:
void Register(double a,double b);//输入函数 int examine();//检验是否合理的函数 void area();//计算面积
void print();//输出计算结果函数 };
void triangle::Register(double a,double b) {
h=a; l=b; }
int triangle::examine() {
if(h<=0||l<=0) return 0; return 1; }
精心整理 学习帮手
word完美格式
void triangle::area() {
S=h*l/2; }
void triangle::print() {
cout<<\"面积为:\"<int main() {
triangle s; double a,b;
cout<<\"请输入三角形的长和高:\"; cin>>a>>b;
s.Register(a,b);
while(s.examine()==0) {
cout<<\"输入有误,重新输入!\\n\"; cin>>a>>b;
s.Register(a,b); }
s.area(); s.print(); return 0; }
2.实验结果: (1)输入有误时:
(2)输入合理:
精心整理 学习帮手
word完美格式
五、第五题: (必做题)定义一个二元一次方程组类,成员函数应有输入6个系数的函数、求二元一次方程组的根的函数,输出该方程组的函数,即输出格式如下: AX + BY = C DX + EY = F 并编写主函数加以测试。 1.源程序代码:
#include using namespace std;class equation//定义方程类 {
double a,b,c,d,e,f; double x,y; public:
void Register(double A,double B,double C,double D,double E,double F);//输入函数
int examine();//检验函数,检查系数是否能够确定唯一解 void result();//计算函数 void print();//输出函数 };
void equation::Register(double A,double B,double C,double D,double E,double F) {
精心整理 学习帮手
word完美格式
a=A; b=B; c=C; d=D; e=E; f=F; }
int equation::examine() {
if(a*e-b*d==0) return 0; return 1; }
void equation::result() {
x=(c*e-b*f)/(a*e-b*d); y=(a*f-c*d)/(a*e-b*d); }
void equation::print() {
cout<<\"计算结果为:x=\"<int main() {double A,B,C,D,E,F; equation test;
cout<<\"请输入系数A,B,C,D,E,F:\\n\"; cin>>A>>B>>C>>D>>E>>F;
test.Register(A,B,C,D,E,F);
while(test.examine()==0)//若系数不符合要求,提示重新输入 {
cout<<\"输入错误,请重新输入:\\n\"; cin>>A>>B>>C>>D>>E>>F;
test.Register(A,B,C,D,E,F); }
test.result(); test.print(); return 0; }
2.实验结果: (1)正常输入:
精心整理 学习帮手
word完美格式
(2)输入有误:
六、第六题:6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(double x)共5个功能性函数,当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。并编写主函数加以测试。 1.源程序代码:
//6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(double x)共个功能性函数,
//当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。并编写主函数加以测试。 #include #includeusing namespace std; class calculate {
private:
double a,b,s; public:
精心整理 学习帮手
word完美格式
void Register(double x,double y); void plus(); void minus(); void chufa(); void chengfa(); void SIN(); void print(); };
void calculate::Register(double x,double y) {
a=x; b=y; }
void calculate::plus() {
s=a+b; }
void calculate::minus() {
s=a-b; }
void calculate::chufa() {
s=a/b; }
void calculate::chengfa() {
s=a*b; }
void calculate::SIN() {
s=sin(a); }
void calculate::print() {
cout<int main() {
char m; double x,y;
cout<<\"输入x:\"; cin>>x;
cout<<\"输入y:\";
精心整理 学习帮手
word完美格式
}
cin>>y;
calculate cal; cal.Register(x,y);
cout<<\"请输入要进行的计算类型:\\n\"; cin>>m; switch(m) {
case '+':
cal.plus(); break; case '-':
cal.minus(); break; case '*':
cal.chengfa(); break; case'/':
cal.chufa(); break; case 's':
cal.SIN(); break; default:
cout<<\"ERROR!!\\n\"; break; }
cal.print(); return 0;
2.实验结果: (1)加法:
(2)减法:
精心整理 学习帮手
word完美格式
(3)乘法:
(4)除法:
(5)sin:
精心整理 学习帮手
word完美格式
(6)输入有误:
3.问题分析:
本程序的优点:①能够实现对计算类型的选择; ②对于输入不符合要求的能够输出error并结束程序;
③对sin的计算,能够实现与直接计算进行对比以检测是否正确。 七、第七题:(选做题)设计定义100位的十进制正整数类,成员函数至少应有输入初始数据函数、加法函数和输出函数,并编写主函数加以测试。(提示:在类中定义int num[100]。输入一个大正整数字符串,如\"231123332987876559998\",再将该字符串转换成大整数放入num数组中) 1.源程序代码:
精心整理 学习帮手
word完美格式
#include #includeusing namespace std;
class number//定义number类 {
int num[100];//私有成员整型数组
int l;//整型数l,为输入的字符的长度 public://公有成员
void Register(char a[100]);//用于将输入的字符转换为整型数组元素并储存的函数
void plus(char b[100]);//加法函数,将b所储存的数加到a上 void print();//输出函数 };
void number::Register(char a[100])//转换函数 {
int i;
l=strlen(a);
for(i=0;inum[l-i-1]=a[i]-'0'; } }void number::plus(char b[100])//加法函数 {
int i;
int numb[100]; int lb=strlen(b); for(i=0;inumb[lb-i-1]=b[i]-'0'; }if(l>lb) {
for(i=lb;iif(lfor(i=l;inum[l]=0; numb[lb]=0; int m=0;精心整理 学习帮手
word完美格式
for(i=0;i<=l||i<=lb;i++) {
num[i]=num[i]+numb[i]+m; m=num[i]/10;
num[i]=num[i]%10; }
num[i]=m; l++; }
void number::print()//输出函数 {
int i=l-1;
while(num[i]==0) i--;
for(;i>=0;i--) cout<int main() {number w;
char a[100],b[100];
cout<<\"输入正整数a:\\n\"; cin>>a;
w.Register(a);//检验程序具有输入功能 cout<<\"输入要加上的数b:\\n\"; cin>>b;
cout<<\"计算结果是:\\n\";
w.plus(b);//程序具有加法功能 w.print();//程序具有输出功能 cout<2.实验结果:(1)位数相同,不进位:
精心整理 学习帮手
word完美格式
(2)位数不同,无进位:
(3)进位:
精心整理 学习帮手
word完美格式
(4)开头含0:
(5)能处理长数字:
精心整理 学习帮手
word完美格式
3.问题分析:
(1)需要解决的主要问题:
①将字符转换为数组储存下来,在储存的时候,为了便于解决进位的问题,故将其个位为num[0],以便在最高位置后再加元素。 ②开头0的处理:输出的时候将开头的0避开。
③进位的处理:将低一位的两个对应数字以及上一个m加起来之后求其除以10的商,然后加到高位数字上;将所得的余数作为低位的结果。
④考虑到最高位位数会变化,所以将最高位之上的一位初始为0,若最后结果没有导致最高位进位,则由于是0,输出时被避开。 (2)不足:仍有一些问题没有完善,存在一些漏洞。
精心整理 学习帮手