数据结构设计性实验有理数四则运算.docx

上传人:b****7 文档编号:23626660 上传时间:2023-05-19 格式:DOCX 页数:21 大小:139.85KB
下载 相关 举报
数据结构设计性实验有理数四则运算.docx_第1页
第1页 / 共21页
数据结构设计性实验有理数四则运算.docx_第2页
第2页 / 共21页
数据结构设计性实验有理数四则运算.docx_第3页
第3页 / 共21页
数据结构设计性实验有理数四则运算.docx_第4页
第4页 / 共21页
数据结构设计性实验有理数四则运算.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构设计性实验有理数四则运算.docx

《数据结构设计性实验有理数四则运算.docx》由会员分享,可在线阅读,更多相关《数据结构设计性实验有理数四则运算.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构设计性实验有理数四则运算.docx

数据结构设计性实验有理数四则运算

 

<<数据结构>>

抽象数据类型实验报告

题目有理数四则运算

学院____计算机学院_____

专业_网络工程

年级班别____2007级三班___

学号3107007033

学生_____江振辉__

辅导教师_______小妹________

 

2009年6月25日

 

1、实验概要

实验项目名称:

抽象数据类型的实现

实验项目性质:

设计性实验

所属课程名称:

数据结构

实验计划学时:

6

2、实验目的

对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。

通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。

进而达到熟练地运用本课程中的基础知识及技术的目的。

实验要求如下:

1.参加实验的学生应首先了解设计的任务,然后根据自己的基础和能力从中选择一题。

一般来说,选择题目应以在规定的时间能完成,并能得到应有的锻炼为原则。

若学生对教材以外的相关题目较感兴趣,希望选作实验的题目时,应征得指导教师的认可,并写出明确的抽象数据类型定义及说明。

2.实验前要作好充分准备,包括:

理解实验要求,掌握辅助工具的使用,了解该抽象数据类型的定义及意义,以及其基本操作的算法并设计合理的存储结构。

3.实验时严肃认真,要严格按照要求独立进行设计,不能随意更改。

注意观察并记录各种错误现象,纠正错误,使程序满足预定的要求,实验记录应作为实验报告的一部分。

4.实验后要及时总结,写出实验报告,并附所打印的问题解答、程序清单,所输入的数据及相应的运行结果。

所用软件环境或工具:

Dev-C++

3.抽象数据类型

ADT抽象数据类型名{

数据对象:

<数据对象的定义>

数据关系:

<数据关系的定义>

基本操作:

<基本操作的定义>

}ADT抽象数据类型名

例:

线性表的表示

名称

线性表

数据对象

D={ai|ai(-ElemSet,i=1,2,...,n,n>=0}

任意数据元素的集合

数据关系

R1={|ai-1,ai(-D,i=2,...,n}

除第一个和最后一个外,每个元素有唯一的直接前趋和唯一的直接后继

基本操作

ListInsert(&L,i,e)

L为线性表,i为位置,e为数据元素。

ListDelete(&L,i,e)

...

二、类C语言语法

类C语言语法示例

1、预定义常量和类型

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefinStatus;//Status是函数的类型,其值是函数结果状态代码。

2、数据结构的存储结构

typedefElemTypefirst;

3、基本操作的算法

函数类型函数名(函数参数表){

//算法说明

语句序列

}//函数名

4、赋值语句

简单赋值:

变量名=表达式;

串联赋值:

变量名1=变量名2=...=变量名k=表达式;

成组赋值:

(变量名1,...,变量名k)=(表达式1,...,表达式k);

结构名=结构名;

结构名=(值1,...,值k);

变量名[]=表达式;

变量名[起始下标..终止下标]=变量名[起始下标..终止下标];

交换赋值:

变量名<-->变量名;

条件赋值:

变量名=条件表达式?

表达式?

表达式T:

表达式F

5、选择语句

1、if(表达式)语句;

2、if(表达式)语句;

else语句;

3、switch(表达式){

case值1:

语句序列1;break;

...

case值n:

语句序列n;break;

default:

语句序列n+1;break;

}

4、switch{

case条件1:

语句序列1;break;

...

case条件n:

语句序列n;break;

default:

语句序列n+1;break;

}

6、循环语句

for(赋初值表达式;条件;修改表达式序列)语句;

while(条件)语句;

do{语句序列}while(条件);

7、结束语句

return[表达式];

return;//函数结束语句

break;//case结束语句

exit(异常代码);//异常结束语句

8、输入和输出语句

scanf([格式串],变量1,...,变量n);

9、注释

//文字序列

10、基本函数

max(表达式1,...,表达式n)

min,abs,floor,ceil,eof,eoln

11、逻辑运算

&&与运算;||或运算

5.课程算法设计

#include

#include

#include

intGONGYUESHU(intm,intn)//*求最大公约数*//

{

intx,y,z;

if(m

{z=m;m=n;n=z;}

x=m;y=n;

while(y!

=0)

{

z=x%y;

x=y;

y=z;

}

return(x);

}

Exit()//*退出*//

{

printf("\n使用!

制作者:

计算机学院07级网络工程3班江振辉学号:

3107007033");

getchar();

getchar();

}

intfen_Add(intq,intw,intv,inth)//*分数加法*//

{

into,i,l,k,j;

o=w*h;

i=q*h+w*v;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之和为%d/%d\n",j,k);

}

floatAdd(floata,floatb)///*有理数加法*/

{

floatsum;

intq,w,v,h,j,x;

charm;

loop1:

printf("*******************************加法运算************************************\n");

printf("1、整数、小数加法2、分数加法3、退出\n");

printf("********************************************************************************\n");

printf("请选择1、2或3:

");

scanf("%d",&x);

if(x!

=1&&x!

=2&&x!

=3)printf("非法输入,请重新输入!

");

switch(x)

{

case1:

{

printf("请输入第一个数据:

");

scanf("%f",&a);

printf("请输入第二个数据:

");

scanf("%f",&b);

sum=a+b;

printf("a+b=%f",sum);

getchar();

getchar();

break;

}

case2:

{

printf("输入第一个数的分子:

");

scanf("%d",&q);

printf("输入第一个数的分母:

");

scanf("%d",&w);

printf("输入第二个数的分子:

");

scanf("%d",&v);

printf("输入第二个数的分母:

");

scanf("%d",&h);

fen_Add(q,w,v,h);

break;

}

case3:

{

Exit();

break;

}

default:

{

printf("输入有误!

\n");

gotoloop1;

break;

}

}

if(x!

=3)gotoloop1;

}

intfen_Sub(intq,intw,intv,inth)///*分数减法*/

{

into,i,l,k,j;

o=w*h;

i=q*h-w*v;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之差为%d/%d\n",j,k);

}

floatSub(floata,floatb)//*有理数减法*//

{

floatresult;

intq,w,v,h,j,x;

charm;

loop1:

printf("*******************************减法运算************************************\n");

printf("1、整数、小数减法2、分数减法3、退出\n");

printf("********************************************************************************\n");

printf("请选择1、2或3:

");

scanf("%d",&x);

if(x!

=1&&x!

=2&&x!

=3)printf("非法输入,请重新输入!

");

switch(x)

{

case1:

{

printf("请输入第一个数据:

");

scanf("%f",&a);

printf("请输入第二个数据:

");

scanf("%f",&b);

result=a-b;

printf("a-b=%f",result);

getchar();

getchar();

break;

}

case2:

{

printf("输入第一个数的分子:

");

scanf("%d",&q);

printf("输入第一个数的分母:

");

scanf("%d",&w);

printf("输入第二个数的分子:

");

scanf("%d",&v);

printf("输入第二个数的分母:

");

scanf("%d",&h);

fen_Sub(q,w,v,h);

break;

}

case3:

{

Exit();

break;

}

default:

{

printf("输入有误!

\n");

gotoloop1;

break;

}

}

if(x!

=3)gotoloop1;

}

intfen_Mul(intq,intw,intv,inth)//*分数乘法*//

{

into,i,l,k,j;

o=w*h;

i=q*v;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之积为%d/%d\n",j,k);

}

floatMul(floata,floatb)//*有理数乘法*//

{

floatresult;

intq,w,v,h,j,x;

charm;

loop1:

printf("*******************************乘法运算************************************\n");

printf("1、整数/小数乘法2、分数乘法3、退出\n");

printf("********************************************************************************\n");

printf("请选择1、2或3:

");

scanf("%d",&x);

if(x!

=1&&x!

=2&&x!

=3)printf("非法输入,请重新输入!

");

switch(x)

{

case1:

{

printf("请输入第一个数据:

");

scanf("%f",&a);

printf("请输入第二个数据:

");

scanf("%f",&b);

result=a*b;

printf("a*b=%f",result);

getchar();

getchar();

break;

}

case2:

{

printf("输入第一个数的分子:

");

scanf("%d",&q);

printf("输入第一个数的分母:

");

scanf("%d",&w);

printf("输入第二个数的分子:

");

scanf("%d",&v);

printf("输入第二个数的分母:

");

scanf("%d",&h);

fen_Mul(q,w,v,h);

break;

}

case3:

{

Exit();

break;

}

default:

{

printf("输入有误!

\n");

gotoloop1;

break;

}

}

if(x!

=3)gotoloop1;

}

intfen_Div(intq,intw,intv,inth)//*分数除法*//

{

into,i,l,k,j;

o=w*v;

i=q*h;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之积为%d/%d\n",j,k);

}

floatDiv(floata,floatb)///*有理数除法*/

{

floatresult;

intq,w,v,h,j,x;

charm;

loop1:

printf("*******************************除法运算************************************\n");

printf("1、整数/小数除法2、分数除法3、退出\n");

printf("********************************************************************************\n");

printf("请选择1、2或3:

");

scanf("%d",&x);

if(x!

=1&&x!

=2&&x!

=3)printf("非法输入,请重新输入!

");

switch(x)

{

case1:

{

printf("请输入第一个数据:

");

scanf("%f",&a);

printf("请输入第二个数据:

");

scanf("%f",&b);

result=a/b;

printf("a/b=%f",result);

getchar();

getchar();

break;

}

case2:

{

printf("输入第一个数的分子:

");

scanf("%d",&q);

printf("输入第一个数的分母:

");

scanf("%d",&w);

printf("输入第二个数的分子:

");

scanf("%d",&v);

printf("输入第二个数的分母:

");

scanf("%d",&h);

fen_Div(q,w,v,h);

break;

}

case3:

{

Exit();

break;

}

default:

{

printf("输入有误!

\n");

gotoloop1;

break;

}

}

if(x!

=3)gotoloop1;

}

 

floatfeng(floatz)//*求分子分母运算*//

{

intf,k,j,x;

floatelem=1000000;

loop1:

printf("*****************************求分子分母运算*****************************\n");

printf("1、输入数据2、退出\n");

printf("********************************************************************************\n");

printf("请选择1或2:

");

scanf("%d",&x);

if(x!

=1&&x!

=2)printf("非法输入,请重新输入!

");

if(x==1)

{

printf("请输入一个有理数:

");

scanf("%f",&z);

z=z*elem;

f=GONGYUESHU(z,elem);

j=elem/f;

k=(int)z/f;

printf("分子是%d,分母是%d\n",k,j);

gotoloop1;

}

if(x==2)Exit();

}

 

main()//*主程序*//

{

intx;

floata,b,z;

printf("\n****************************有理数四则运算******************************\n");

printf("1、加法运算2、减法运算\n");

printf("3、乘法运算4、除法运算\n");

printf("5、求分子分母运算6、退出\n");

printf("********************************************************************************\n");

loop3:

printf("请选择运算类型:

");

scanf("%d",&x);

printf("\n");

switch(x)

{

case1:

{

Add(a,b);

break;

}

case2:

{

Sub(a,b);

break;

}

case3:

{

Mul(a,b);

break;

}

case4:

{

Div(a,b);

break;

}

case5:

{

feng(z);

break;

}

case6:

{

Exit();

break;

}

default:

{

printf("输入有误!

请重新选择:

\n");

gotoloop3;

break;

}

}

}

 

5.测试及调试

主函数调用图解:

6.执行过程:

测试两个有理数相除的运算,实现10除以5

主菜单显示:

做除法运算,选择4,ENTER。

由于现在实现整数的除法,所以选择1,ENTER。

然后分别输入数据分子10,ENTER,和分母5,ENTER

测试成功通过。

7.实验总结

通过这次课程设计我意识到数据类型的多样性与灵活性。

通过如此简单的组合使用边可以实现丰富而实用的功能。

但同时,不同的数据类型之间的差异也十分的大,是用时必须小心谨慎,注意区分。

有的功能只需要简单的赋值然后和选择语句结合使用便能实现,有的却要使用多种语句才能实现。

通过本设计,使我对多种数据类型的使用有了一个更深刻的认识。

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1