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

上传人:b****3 文档编号:11211957 上传时间:2023-05-29 格式:DOCX 页数:27 大小:596.99KB
下载 相关 举报
西安交大C程序设计第七章作业.docx_第1页
第1页 / 共27页
西安交大C程序设计第七章作业.docx_第2页
第2页 / 共27页
西安交大C程序设计第七章作业.docx_第3页
第3页 / 共27页
西安交大C程序设计第七章作业.docx_第4页
第4页 / 共27页
西安交大C程序设计第七章作业.docx_第5页
第5页 / 共27页
西安交大C程序设计第七章作业.docx_第6页
第6页 / 共27页
西安交大C程序设计第七章作业.docx_第7页
第7页 / 共27页
西安交大C程序设计第七章作业.docx_第8页
第8页 / 共27页
西安交大C程序设计第七章作业.docx_第9页
第9页 / 共27页
西安交大C程序设计第七章作业.docx_第10页
第10页 / 共27页
西安交大C程序设计第七章作业.docx_第11页
第11页 / 共27页
西安交大C程序设计第七章作业.docx_第12页
第12页 / 共27页
西安交大C程序设计第七章作业.docx_第13页
第13页 / 共27页
西安交大C程序设计第七章作业.docx_第14页
第14页 / 共27页
西安交大C程序设计第七章作业.docx_第15页
第15页 / 共27页
西安交大C程序设计第七章作业.docx_第16页
第16页 / 共27页
西安交大C程序设计第七章作业.docx_第17页
第17页 / 共27页
西安交大C程序设计第七章作业.docx_第18页
第18页 / 共27页
西安交大C程序设计第七章作业.docx_第19页
第19页 / 共27页
西安交大C程序设计第七章作业.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《西安交大C程序设计第七章作业.docx》由会员分享,可在线阅读,更多相关《西安交大C程序设计第七章作业.docx(27页珍藏版)》请在冰点文库上搜索。

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

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

西安交通大学实验报告

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

系别___________实验日期2014年5月2日

专业班级_____组别_____________实验报告日期2014年5月2日

姓名_________学号_**********_报告退发(订正、重做)

同组人_________________________________教师审批签字

一、实验目的

理解类与对象的概念,掌握类的定义方法和使用方法。

二、实验内容

(一)第一题:

定义一个Dog类,包含name、age、sex、weight等属性以及对这些属性操作的方法。

实现并测试这个类。

1.源程序代码:

#include

usingnamespacestd;

classDog//狗类

{

private:

//私有成员

charname[20];//字符型数组用于存储名字

intage;//年龄,整型数

charsex;//性别

doubleweight;//体重,定义为双精度型

public:

//公有成员

voidRegister(char*Name,intAge,charSex,doubleWeight);//输入函数

voidprint();//输出函数

};

voidDog:

:

Register(char*Name,intAge,charSex,doubleWeight)//输入函数,将各个参数导入到定义的类中相应元素

{

strcpy(name,Name);

age=Age;

sex=(Sex=='m'?

'm':

'f');

weight=Weight;

}

voidDog:

:

print()//输出函数

{

cout<<"名字:

"<

"<

"<

"<

}

intmain()

{

Dogdog1,dog2,dog;

charName1[20],Sex1,Name2[20],Sex2;

intAge1,Age2;

doubleWeight1,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();

return0;

}

2.实验结果:

3.问题分析:

设计思路:

首先输入两个狗的信息,然后显示输入的信息,然后交换二者再次输出,通过再次输出的结果表明对其操作有效,从而表明类的定义是有效的。

(二)第二题:

设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。

1.源程序代码:

#include

#include

usingnamespacestd;

classEllipse//定义椭圆类

{

private:

doublex1,x2,y1,y2,S;

public:

voidRegister(doublea,doubleb,doublec,doubled);//输入函数

doublearea();//面积计算函数

voidfeedback();//输出函数

};

voidEllipse:

:

Register(doublea,doubleb,doublec,doubled)//输入函数

{

x1=a;

x2=c;

y1=b;

y2=d;

}

doubleEllipse:

:

area()//面积计算函数,用公式:

S=pi*a*b(a、b为半长轴、半短轴长)

{

S=3.1415*fabs(x1-x2)*fabs(y1-y2)/4;

returnS;//返回面积值

}

voidEllipse:

:

feedback()//输出函数,反馈输入值

{

cout<<"您输入的点的坐标为:

("<

}

voidmain()

{

doublea,b,c,d;

cout<<"请依次输入外接矩形的两对角顶点的横纵坐标:

\n";

cin>>a>>b>>c>>d;

Ellipseellipse;

ellipse.Register(a,b,c,d);

ellipse.feedback();

cout<<"椭圆面积为:

"<

}

2.实验结果:

(1)中心在原点:

(2)中心不在原点:

(三)第三题:

仿照Date类设计一个Time类,按照各种可能的格式输出时间。

1.源程序代码:

#include

usingnamespacestd;

classTime

{

inth,m,s;

public:

voidinit(int,int,int);//输入函数

voidprint_hms();//时分秒

voidprint_hsm();//时秒分

voidprint_msh();//分秒时

voidprint_mhs();//分时秒

voidprint_shm();//秒时分

voidprint_smh();//秒分时

};

voidTime:

:

init(inta,intb,intc)

{

h=(a>=0&&a<24)?

a:

0;

m=(b>=0&&b<60)?

b:

0;

s=(c>=0&&c<60)?

c:

0;

}

voidTime:

:

print_hms()

{

cout<<"时分秒:

"<

}

voidTime:

:

print_hsm()

{

cout<<"时秒分:

"<

}

voidTime:

:

print_msh()

{

cout<<"分秒时:

"<

}

voidTime:

:

print_mhs()

{

cout<<"分时秒:

"<

}

voidTime:

:

print_shm()

{

cout<<"秒时分:

"<

}

voidTime:

:

print_smh()

{

cout<<"秒分时:

"<

}

voidmain()

{

inta,b,c;

cout<<"请输入时间,按照时分秒格式:

";

cin>>a>>b>>c;

Timetime;

time.init(a,b,c);

time.print_hms();

time.print_hsm();

time.print_mhs();

time.print_msh();

time.print_shm();

time.print_smh();

}

2.实验结果:

对多种超出范围的情况进行了检测:

(1)正常输入:

(2)24点会被作为0点:

(3)分超过60:

(4)秒超过60:

(5)时超过24:

(四)实验题目四:

(必做题)设计定义一个三角形类,成员函数应有输入三角形初始数据函数、求三角形面积函数、输出面积函数。

并编写主函数加以测试。

1.程序源代码:

#include

usingnamespacestd;

classtriangle

{

doubleh,l,S;

public:

voidRegister(doublea,doubleb);//输入函数

intexamine();//检验是否合理的函数

voidarea();//计算面积

voidprint();//输出计算结果函数

};

voidtriangle:

:

Register(doublea,doubleb)

{

h=a;

l=b;

}

inttriangle:

:

examine()

{

if(h<=0||l<=0)

return0;

return1;

}

voidtriangle:

:

area()

{

S=h*l/2;

}

voidtriangle:

:

print()

{

cout<<"面积为:

"<

}

intmain()

{

triangles;

doublea,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();

return0;

}

2.实验结果:

(1)输入有误时:

(2)输入合理:

五、第五题:

(必做题)定义一个二元一次方程组类,成员函数应有输入6个系数的函数、求二元一次方程组的根的函数,输出该方程组的函数,即输出格式如下:

      AX+BY=C

      DX+EY=F

并编写主函数加以测试。

1.源程序代码:

#include

usingnamespacestd;

classequation//定义方程类

{

doublea,b,c,d,e,f;

doublex,y;

public:

voidRegister(doubleA,doubleB,doubleC,doubleD,doubleE,doubleF);//输入函数

intexamine();//检验函数,检查系数是否能够确定唯一解

voidresult();//计算函数

voidprint();//输出函数

};

voidequation:

:

Register(doubleA,doubleB,doubleC,doubleD,doubleE,doubleF)

{

a=A;

b=B;

c=C;

d=D;

e=E;

f=F;

}

intequation:

:

examine()

{

if(a*e-b*d==0)

return0;

return1;

}

voidequation:

:

result()

{

x=(c*e-b*f)/(a*e-b*d);

y=(a*f-c*d)/(a*e-b*d);

}

voidequation:

:

print()

{

cout<<"计算结果为:

x="<

}

intmain()

{

doubleA,B,C,D,E,F;

equationtest;

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();

return0;

}

2.实验结果:

(1)正常输入:

(2)输入有误:

六、第六题:

6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(doublex)共5个功能性函数,当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。

并编写主函数加以测试。

1.源程序代码:

//6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(doublex)共个功能性函数,

//当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。

并编写主函数加以测试。

#include

#include

usingnamespacestd;

classcalculate

{

private:

doublea,b,s;

public:

voidRegister(doublex,doubley);

voidplus();

voidminus();

voidchufa();

voidchengfa();

voidSIN();

voidprint();

};

voidcalculate:

:

Register(doublex,doubley)

{

a=x;

b=y;

}

voidcalculate:

:

plus()

{

s=a+b;

}

voidcalculate:

:

minus()

{

s=a-b;

}

voidcalculate:

:

chufa()

{

s=a/b;

}

voidcalculate:

:

chengfa()

{

s=a*b;

}

voidcalculate:

:

SIN()

{

s=sin(a);

}

voidcalculate:

:

print()

{

cout<

}

intmain()

{

charm;

doublex,y;

cout<<"输入x:

";

cin>>x;

cout<<"输入y:

";

cin>>y;

calculatecal;

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();

return0;

}

2.实验结果:

(1)加法:

(2)减法:

(3)乘法:

(4)除法:

(5)sin:

(6)输入有误:

3.问题分析:

本程序的优点:

①能够实现对计算类型的选择;

②对于输入不符合要求的能够输出error并结束程序;

③对sin的计算,能够实现与直接计算进行对比以检测是否正确。

七、第七题:

(选做题)设计定义100位的十进制正整数类,成员函数至少应有输入初始数据函数、加法函数和输出函数,并编写主函数加以测试。

(提示:

在类中定义int num[100]。

输入一个大正整数字符串,如"23112333298789876559998",再将该字符串转换成大整数放入num数组中)

1.源程序代码:

#include

#include

usingnamespacestd;

classnumber//定义number类

{

intnum[100];//私有成员整型数组

intl;//整型数l,为输入的字符的长度

public:

//公有成员

voidRegister(chara[100]);//用于将输入的字符转换为整型数组元素并储存的函数

voidplus(charb[100]);//加法函数,将b所储存的数加到a上

voidprint();//输出函数

};

voidnumber:

:

Register(chara[100])//转换函数

{

inti;

l=strlen(a);

for(i=0;i

{

num[l-i-1]=a[i]-'0';

}

}

voidnumber:

:

plus(charb[100])//加法函数

{

inti;

intnumb[100];

intlb=strlen(b);

for(i=0;i

{

numb[lb-i-1]=b[i]-'0';

}

if(l>lb)

{

for(i=lb;i

numb[i]=0;

}

if(l

{

for(i=l;i

num[i]=0;

}

num[l]=0;

numb[lb]=0;

intm=0;

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++;

}

voidnumber:

:

print()//输出函数

{

inti=l-1;

while(num[i]==0)

i--;

for(;i>=0;i--)

cout<

}

intmain()

{

numberw;

chara[100],b[100];

cout<<"输入正整数a:

\n";

cin>>a;

w.Register(a);//检验程序具有输入功能

cout<<"输入要加上的数b:

\n";

cin>>b;

cout<<"计算结果是:

\n";

w.plus(b);//程序具有加法功能

w.print();//程序具有输出功能

cout<

return0;

}

2.实验结果:

(1)位数相同,不进位:

(2)位数不同,无进位:

(3)进位:

(4)开头含0:

(5)能处理长数字:

3.问题分析:

(1)需要解决的主要问题:

①将字符转换为数组储存下来,在储存的时候,为了便于解决进位的问题,故将其个位为num[0],以便在最高位置后再加元素。

②开头0的处理:

输出的时候将开头的0避开。

③进位的处理:

将低一位的两个对应数字以及上一个m加起来之后求其除以10的商,然后加到高位数字上;将所得的余数作为低位的结果。

④考虑到最高位位数会变化,所以将最高位之上的一位初始为0,若最后结果没有导致最高位进位,则由于是0,输出时被避开。

(2)不足:

仍有一些问题没有完善,存在一些漏洞。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2