任意长整数的四则运算.docx

上传人:b****0 文档编号:318227 上传时间:2022-10-08 格式:DOCX 页数:38 大小:84.96KB
下载 相关 举报
任意长整数的四则运算.docx_第1页
第1页 / 共38页
任意长整数的四则运算.docx_第2页
第2页 / 共38页
任意长整数的四则运算.docx_第3页
第3页 / 共38页
任意长整数的四则运算.docx_第4页
第4页 / 共38页
任意长整数的四则运算.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

任意长整数的四则运算.docx

《任意长整数的四则运算.docx》由会员分享,可在线阅读,更多相关《任意长整数的四则运算.docx(38页珍藏版)》请在冰豆网上搜索。

任意长整数的四则运算.docx

任意长整数的四则运算

1题目介绍和功能要求

1.1课程设计题目要求

【问题描述】:

设计一个实现任意长的整数进行加法运算的演示程序。

【题目容】:

利用双向循环链表实现长整数的存储,每个结点含一个整形变量。

任何整形变量的围是-(

-1)~(

-1)。

输入和输出形式:

按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。

【基本要求】:

(1)利用所学知识,设计相应的数据结构;

(2)熟练运用开发环境;

(3)完成软件的设计与编码;

(4)熟练地掌握基本的调试方法。

1.2题目分析

【需求分析】:

(1)本程序实现计算任意长的整数的加法运算.以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。

(2)本演示程序中,数字字符限定为[‘0’~‘9’]和字符‘,’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。

(3)利用双向循环链表现实长整数的存储,每个结点含一个整形变量。

输入的形式以回车结束,可以直接输入正数或负数。

按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。

 

2系统功能模块结构图

2.1系统功能结构框图

系统功能模块

主调程序模块

长整数运算模块

双向循环链表处理模块

界面模块

 

图2.1系统功能结构图

2.2主要模块的功能说明:

(1)主调程序模块:

voidmain()

{

     初始化;

do{

    接受命令;

    处理命令;

}while(“命令”=”退出”)

}

(2)双向循环链表处理模块//cmplinklen.h//Creat.h//compare

说明:

进行链表的存储和处理

(3)长整数运算模块//add.h//sub.h//imul.h//idiv.h

说明:

对长整数进行四则运算

(4)界面模块//title.h//welcome.h

说明:

控制系统运行操作界面

3数据结构的设计及用法说明

3.1概要说明

为了实现上述功能,采取双向循环链表表示长整数,每个结点含一个整型变量,仅绝对值不超过9999的整数,整个链表用十进制数表示。

利用头结点数据域的符号表示长整数的符号,相加过程不破坏两个操作数链表,对长整数位数不作上限。

为此需要两个结构数据类型:

双向循环链表和长整数。

3.2用法说明

3.2.1双向循环链表的数据结构定义:

typedefstructNode//双向循环链表结点

{intdata;

structNode*prior,*next;

}Node,*NodeList;

3.2.2基本操作:

Statusconversion(charstr[],NodeList&oprh);

//将字符串形式的操作数转换成所需的类型

intcmplinklen(NodeListopr1,NodeListopr2);

//opr1链比opr2链长则返回1,短则返回-1,否则返回0

intlength(NodeListoprr);

//求链表长度

StatusCreat(NodeList&oprr,intlen);

//生成指定长度链表

intcompare(NodeListopr1,NodeListopr2);

//比较opr1、opr2绝对值的大小

 

4涉及到的函数的描述

4.1长整数操作函数

Statusinput(NodeList&opr1,NodeList&opr2,charstr[]);

//从键盘输入两个长整数,存至opr1和opr2中

Statusoutput(NodeListoprr,charstr[]);

//在屏幕打印长整数oprr

Statusadd_bas(NodeListopr1,NodeListopr2,NodeList&oprr);

//本算法实现A,B相加的操作

Statussub_bas(NodeListopr1,NodeListopr2,NodeList&oprr);

//本算法实现A,B相减的操作

Statusimul(NodeListopr1,NodeListopr2,NodeList&oprr);

//本算法实现A,B相乘的操作

Statusidiv(NodeListopr1,NodeListopr2,NodeList&quti,NodeList&remand);//本算法实现A,B相除的操作

4.2主要函数

主程序模块:

//intmain()

双向循环链表处理模块:

//Statusconversion(charstr[],NodeList&oprh);

//intcmplinklen(NodeListopr1,NodeListopr2);

//StatusCreat(NodeList&oprr,intlen);

//intcompare(NodeListopr1,NodeListopr2);

长整数四则运算模块:

//Statusadd_bas(NodeListopr1,NodeListopr2,NodeList&oprr);

//Statussub_bas(NodeListopr1,NodeListopr2,NodeList&oprr);

//Statusimul(NodeListopr1,NodeListopr2,NodeList&oprr);

//Statusidiv(NodeListopr1,NodeListopr2,NodeList&quti,NodeList&remand);

界面模块:

//voidtitle();//voidwelcome();

5主要算法程序流程图

5.1程序流程图

 

输出数据

输出数据

程序结束

程序结束

图5.1主要算法流程图

 

6程序测试

(1)程序运行环境为DOS界面,执行文件为“长整数四则运算.exe”

(2)进入演示程序后即显示文本方式的用户界面

图6.1用户界面

(3)输入命令,执行相应的功能:

1---加法运算2---减法运算3---乘法运算4---除法运算5---退出系统

图6.2执行界面

 

(4)加法运算测试

图6.3加法运算界面

(5)减法运算测试

图6.4减法运算界面

(6)乘法运算测试

图6.5乘法运算界

(7)除法运算测试

图6.6除法运算界面

7参考文献

[1]严蔚敏,吴伟民.数据结构(C语言版)[M].:

清华大学,2006

[2]吕国英.算法设计与分析[M].:

清华大学,2006

[3]徐宝文,志.C程序设计语言[M].:

机械工业,2004

[4]滕国文.数据结构课程设计[M].:

清华大学,2010

[5]仕华.数据结构课程设计(第2版)[M].:

机械工业,2010

[6]建学,光.数据结构课程设计案例精编[M].:

清华大学,2010

[7]汪沁,奚峰.数据结构与算法[M].:

清华大学,2012

[8]奚小玲,敖广武.数据结构理论与实践[M].:

东北大学,2010

 

附录:

程序清单(带有必要的注释)

#include

#include

#include

#include

#include

#include

#defineLENsizeof(structNode)

#defineMAX1000

#defineOK1

#defineERROR0

#defineOVERFLOW-1

#defineTRUE1

#defineFALSE0

typedefintStatus;

typedefstructNode

{

intdata;

structNode*prior,*next;

}Node,*NodeList;

//===============输入模块===============

//求指数函数值

intaxp(inta,intk)

{

intr=1;

if(k==0)

return1;

for(;k>0;k--)

r=r*a;

returnr;

}

//输入转换函数

Statusconversion(charstr[],NodeList&oprh)

{//将字符串形式的操作数转换成所需的类型

NodeListp;

inti,k,buffer;

k=buffer=0;

oprh=(NodeList)malloc(LEN);

oprh->next=oprh;

oprh->prior=oprh;

for(i=strlen(str)-1;i>=0;i--)

{//若输入的数不合法就返回重新输入

if((i!

=0||(str[0]!

='-'&&str[0]!

='+'))&&(str[i]>'9'||str[i]<'0'))

returnERROR;

if(str[0]=='0'&&str[1]!

='\0')

returnERROR;

if((str[0]=='-'||str[0]=='+')&&str[1]=='0')

returnERROR;

if(str[i]!

='-'&&str[i]!

='+')

{

buffer=buffer+(str[i]-'0')*axp(10,k);

k++;

if(k==4||str[i-1]=='-'||str[i-1]=='+'||i==0)

{//将新建结点插入到头结点之后

p=(NodeList)malloc(LEN);

oprh->next->prior=p;

p->prior=oprh;

p->next=oprh->next;

oprh->next=p;

p->data=buffer;

buffer=k=0;

}

}

}

if(str[0]=='-')

oprh->data='-';

else

oprh->data='+';

returnOK;

}

//输入函数

Statusinput(NodeList&opr1,NodeList&opr2,charstr[])

{

intflag=OK,i,n=0,l;

charb[MAX];

printf("\n请输入第一个操作数:

\n");

scanf("%s",b);

getchar();

l=strlen(b);

for(i=0;i

if(b[i]!

=',')

str[n++]=b[i];

str[n]='\0';

flag=convers

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

当前位置:首页 > 经管营销 > 销售营销

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

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