您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页西安交大C 程序设计第七章作业

西安交大C 程序设计第七章作业

来源:好走旅游网
word完美格式

西安交通大学实验报告

课程__计算机程序设计__实验名称_类与对象___第 1 页 共 18 页

系 别____ _____ __ 实 验 日 期 2014 年 5 月 2 日

专业班级__ ___组别_____________ 实 验 报 告 日 期 2014 年 5 月 2日 姓 名___ ______学号_2130405034_ 报 告 退 发 ( 订正 、 重做 ) 同 组 人_________________________________ 教 师 审 批 签 字

一、 实验目的

理解类与对象的概念,掌握类的定义方法和使用方法。 二、实验内容

(一)第一题:定义一个Dog类,包含name、age、sex、weight等属性以及对这些属性操作的方法。实现并测试这个类。 1.源程序代码:

#include using namespace std; class Dog//狗类 {

private://私有成员

char name[20];//字符型数组用于存储名字 int age;//年龄,整型数 char sex;//性别

double weight;//体重,定义为双精度型 public://公有成员

void Register(char *Name,int Age,char Sex,double Weight);//输入函数

void print();//输出函数 };

void Dog::Register(char *Name, int Age, char Sex, double Weight)//输入函数,将各个参数导入到定义的类中相应元素 {

strcpy(name,Name); age=Age;

精心整理 学习帮手

word完美格式

sex=(Sex=='m'?'m':'f'); weight=Weight; }

void Dog::print()//输出函数 {

cout<<\"名字:\"<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 #include

using 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 #include

using 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]。输入一个大正整数字符串,如\"23112333298789876559998\",再将该字符串转换成大整数放入num数组中) 1.源程序代码:

精心整理 学习帮手

word完美格式

#include #include

using 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)不足:仍有一些问题没有完善,存在一些漏洞。

精心整理 学习帮手

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务