C语言课程设计报告_长整数四则运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计说明书题目:长整型数四则运算
学院:
班级:
学生:
学号:
班内序号:
提交日期:年月日
目录
一、需求分析 (1)
二、设计思路 (1)
三、详细设计 (2)
1、主要函数 (2)
2、函数的主要调用关系图 (3)
四、调试分析及编程心得体会 (3)
五、用户手册 (3)
六、测试结果 (3)
七、源程序代码 (4)
1、 main.c 主控文件 (4)
2、IntFace.h 程序界面模块头文件 (5)
3、IntFace.c 程序界面处理模块文件 (6)
4、LongInt.h 长整型数输入输入及运算模块头文件 (9)
5、LongIO.c 长整型数输入输出处理模块文件 (9)
6、LongInt.c 长整型数运算处理模块文件 (11)
7、DuCiLink.h 双向循环链表处理模块头文件 (16)
8、DuCiLink.c 双向循环链表处理模块代码 (17)
一、需求分析
1、设计一个实现任意长的整数进行四则运算的程序。
2、输入和输出形式是按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,长整数位数没有上
限,以分号结束长整型数据的输入。
3、程序执行的命令包括:
1)、输入长整数1;2)、输入长整数2;3)、输入执行的运算符;4)、计算并输出结果;5)、结束。
4、测试数据:(以加法为例)
(1)、0;0;+;应输出“0”。
(2)、-2345,6789;-7654,3211;+;应输出“-1,0000,0000”。
(3)、-9999,9999;1,0000,0000,0000;+;应输出“9999,0000,0001”.
(4)、1,0001,0001;-1,0001,0001;+;应输出“0”.
(5)、1,0001,0001;-1,0001,0000;+;应输出“1”。
(6)、-9999,9999,9999;-9999,9999,9999;+;应输出“-1,9999,9999,9998”.
(7)1,0000,9999,9999;1;+;应输出“1,0001,0000,0000”.
二、设计思路
我们首先要考虑的是如何表示长整型数。按照传统习惯要求每4位数形成1组,而一个长整型数可能会有很多组这种4位数,而每节之间是有先后顺序的,因此我们可以考虑用数组和链表来存储数据。(1)再考虑到每个长整型数的长度在输入之间是无法预知的,因此使用链表在存储空间的分配上更方便一些。(2)在输入数据时总是从高位到低位地存储,而计算时总是从低位向高位运算,(这样的话栈也很方便)因此采用双向链表更方便,而为了从头结点方便地转到尾结点可以采用循环链表。总之,为了实现上述功能,应以双向循环链表表示长整数,每个结点含一个整型变量,且仅绝对值不超过9999的整数,整个链表用十进制数表示。(3)对于每一个长整型数可以设置一个头结点,其中的数据域用来表示该长整型数的正负号及组数,该值的符号则表示该长整型数的符号,该数的绝对值表示该长整型数包含的4位数的组数。第一个存储4位数据组的结点称为首结点,而最后一个4位数据组结点称为尾结点。
为此需要两个结构数据类型:双向循环链表和长整数,两个类型采用相同的结构,只是双向循环链表用来存储数据,长整型用表示数据的运算。
1、双向循环链表的数据结构及操作定义如下:
typedef short ElemType; //定义基本数据类型,我们采用short来表示任意4位整数。
typedef struct DuCiLinkNode{ // 双向循环链表结点的存储结构
ElemType data;
struct DuCiLinkNode *prior; //指向上一结点
struct DuCiLinkNode *next; //指向下一结点
}DuCiLinkNode,*DuCiLinkList; //定义双向循环链表结点及链表的类型名
基本操作:
DuCiLinkNode *MakeNode(ElemType e); //以4位整数e构造1个双向循环链表结点
Status InitList(DuCiLinkList *L); //初始化1个双向循环链表,分配1个结点作头结点
//数据域赋初值0,上下结点指针指向自己void DestroyList(DuCiLinkList *L); //消毁1个双向循环链表,释放它所占用的所有内存空间
//并让链表*L指向NULL
void ClearList(DuCiLinkList L); //清除1个双向循环链表,释放数据结点所占用的内存空间
//保留头结点,并将数据域置为0,上下结点指针指向自己Status InsTail(DuCiLinkList L, ElemType e); //在双向循环链表L的尾结点之后加入1个以e为
//数据域的新结点,并返回OK; 否则返回ERROR。
Status InsFirst(DuCiLinkList L, ElemType e);
//将数据元素e插入在线性链表L头结点之后,并返回OK; 否则返回ERROR。
Status CopyList(DuCiLinkList L, DuCiLinkList C);
//将双向循环链表L复制到双向循环链表C中。
2、长整数的数据类型和和操作定义为:
typedef struct DuCiLinkNode LongIntNode,*LongInt;//采用双向循环链表为实际的存储结构void OutputNumber(LongInt a); //输出一个长整型数