沈阳航空工业学院
课程设计
学号__200704021110_
班级___7402104____
姓名_ 谷程_____
指导教师___尹航___
2008年 9 月12 日
沈阳沈阳航空工业学院
课程设计任务书
电子信息工程学院电子信息工程专业 7402104 班学号 200704021110
一、课程设计题目:超长正整数的加法
二、课程设计工作自2008年9月8日起至2008年9月12日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
采用一个带有头节点的环形链来表示一个非负的的超大正整数。如可以从低位开始为每个数字编号,第一位到第四位,第五位到第八位…的每四位组成的数字,依次放在链表的第一个、第二个、…节点中,不足四位的最高位存放在链表的最后一个节点中,表头节点的值规定为-1。
四、课程设计要求:
程序质量:
贯彻结构化程序设计思想。
用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
用户界面中的菜单至少应包括“输入”、“退出”2项。
代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
封面
课程设计任务书
目录
需求分析(分析题目的要求)
程序流程图(总体流程图和主要功能模块流程图)
核心技术的实现说明及相应程序段
个人总结
参考资料
源程序及适当的注释
指导教师:______________ 学生签名:_____________
五、成绩:
六、教师评语:
目录
一、需求分析 1
二、程序流程图 2
三、核心技术的实现说明及相应程序段 5
四、个人总结 9
五、参考文献 9
六、源程序 10
需求分析
经过对程序设计题目的分析可知,整个程序的设计实现要求的是需要把超过int存储能力的超长正整数进行存储,并且把它们进行相加的运算。
首先,要设计一个链表来表示一个超长正整数,把他从低位向高位开始进行编号,由程序提取和调用,然后按照一定数目存储到结点之中。然后,从两个表头的结点开始,顺序依次对应相加,求出所需要的进位后代入运算,返回指定链表。最后,按照排列好的顺序输出。
1 输入超长正整数;
2 储存到链表之中为其分配出相应的空间;
3 由程序从链表中调出结点中的数按找排好的顺序进行相加,进位;
4 每个结点相加后在按顺序从最后一个结点到第一个结点依次输出其值域;
5 得出相加的结果,并递归输出。
二、程序流程图
1、程序总体流程图
完成加法操作
sum=x+y
开始
建立链表存储x,y
结束
输出结果sum
输入超长正整数x,y
图1程序总体结构图
2、主函数流程图
开始
输入x,y
调用inputint()
调用addint()计算sum=x+y
调用printlongint()
输出sum
结束
图 2 主函数功能流程图
3、结点相加框图
while(pp→data!=-1&&qq→data!=-1)
*pp与*qq两链表对应节点求和;
并把和存放在*s中;
每次只和一个节点;
开辟一个节点,并把指针赋给*s.
long group=pow(10,SIZE)
和值后4位(group%10000)的值保留于原节点;
调用insert_after将和值进位(group/10000)的值加在下一个节点中
pp=pp->next(pp后移)
qq=qq->next(qq后移)
r指向pp,qq中的较长者
while(r->data!=-1)
链入其余节点
图3 结点相加框图
三、核心技术的实现说明及相应程序段
这个程序主要由主函数、定义链表结构、插入结点、输入并存入链表、结点的对应相加4个自定义函数组成。其中插入结点、输入并存入链表、结点的对应相加为其核心。具体过程如下:
插入新结点
在定义完链表结构后,插入新的结点以备存储。定义insert_after,在u结点之后插入新的v结点,并且为其申请一个用于存放他的空间v=(NODE*)malloc(sizeof(NODE)),存放完毕后,为v结点赋值,令其值为num,插入在u结点之后,最后返回其地址。
NODE *insert_after(NODE *u,int num) /*在u结点之后插入一个新的结点,其值为num */
{
NODE *v;
v=(NODE *)malloc(sizeof(NODE)); /*申请一个新结点*/ v->data=num; /*赋值*/
u->next=v; /*在u结点之后插入一个结点*/
return v;
}
200704021110超长正整数的加法 来自淘豆网m.daumloan.com转载请标明出处.