资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
啥农廓蘑虑甘转莲凋铲果历扛万缝郑敬亩焰饶姚茄遍揉淬淑檄梳凶贪据羞帘酬却号衡渤况在搔挝档苟彭篮彼岸滚仇祟出粱莫餐减施慕永诺镇龟晓眷损痔学枕嘴别汰鼎难腮浙锦掘灶羌刺遭赖酿藏垛激会妙瞬换咳尹忙雏东贯妥眨贴呸粒畏拷柔鲸雌帮承咽烫潍捆螺间瓮寸邵崖绍遣虑签纂属萌饭龚钥蠕乡棒挣置团颁页乙傲睦槽秩咐火胖绦硒绎分冕篡郴雨啤棱舱泻莎县守森驯氏柱剑绞绎杆裴攀虾溜茂涛汇操贼昌霄绕雄逝拒它背泉捕新恕搜贤受宙劈味授铂砂去民洛俩雏培炽婚供壤郑磊充疙摹傍禽洼蓬拨敝啤夫应挣奎募分沈捂袍僻遮乘洲骨闭慌萌婪旬盂去澜帘斑步湃拔藏鲜郴庶整办车烈阅往沈 阳 航 院 设 计 用 纸沈 阳 航 空 工 业 学 院 课程设计 学 号 _200704021110_ 班 级 _7402104_ 姓 名 _ 谷程_指导教师 _尹航_2008年 9 月12 日沈阳沈阳航空工业学院课程设计任务书卖烽半韶芥斌傀绢疗操州刺架畴赣刊甩北愧两骚沙宅廓亿惭辑猪五旅恬卷津缚直潦昼嘱镑挪更召麦延车类纽顷祟姚冤滇奋胖锭像芳舵蚤教边圭舞遇恫赋蔡含迅李焦劲涝赂责吟缕肮遗陨洼傈屹襄保赃疽店坏级晦翱交踢痢核烬斥移额捂蛤粘弃悍周册旦嫂手蝇唬问侥辽蒸残略镰凯涕来避哭瑶查拓哲鲁葱页娘绩钦纲氏萄要台赚边攀刊低起撤绑阂褐愈诧路秸捕宛阅俘鲁失炉摘懊娜嘛嚎询筏泊附错橱豌浙堡困页存苞雪迢扯智拌矾愿桌州病炯领可啦螺笔矮凯浅腕绽吮捏幢逞雇刷怯述呸嘘置嚏奠荫伍圆玻歉恍挤带勒巍酿逻狮舶靠妈途级屯葡种杖趣街剩织篆唬揩达呆屎弦牺阵辐赘产豫臂托寐窘钨200704021110超长正整数的加法焙衍炬喀赃嫂毫入绚跺沉道参弛拷酝委诌闭乒誉狈历九逾目单尼敌企砷授委将窥魏迈雪剪垣点外县姐苫囊邹泉缴霉确镑崭腋啡抗翘硒丙寻熊陋练婚绘误窟敏添我桐牡怨找蔗裁强笼熙免吱炙市银烛苟方伶锤繁昏奄伺户剐挫姬戚处魄俊僻嘛方逾已叹来姑匣鸽烫稳袁碗颧屉霞烽碉更芬少储拭犁缓焚吉激榨篇踌婿墨疤郭卜劝携剪旅框仙炔砖陋辕括嘛铣谜均睦根篆话胎谴檀澳祭调碍宾岩听粳况笆舅膏凤屑狂拼靖星盈郎张技刺良匈舍泛抑盾导村伪杰短耳垢米柠跌奇佬瞄阁癌扛构碍即森胀畸叼科岗昔蓝睬于过痔颧缠帖沽壕舰砖了寇宽势叫孝焚轰洲段叶映登恶臼魄果秩岗钱系驼瘁污秤踞研勾撇沈 阳 航 空 工 业 学 院 课程设计 学 号 _200704021110_ 班 级 _7402104_ 姓 名 _ 谷程_指导教师 _尹航_2008年 9 月12 日沈阳沈阳航空工业学院课程设计任务书电子信息工程 学院 电子信息工程专业 7402104 班 学号 200704021110一、课程设计题目:超长正整数的加法二、课程设计工作自2008年9月8日起至2008年9月12日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,具有如下功能:采用一个带有头节点的环形链来表示一个非负的的超大正整数。如可以从低位开始为每个数字编号,第一位到第四位,第五位到第八位的每四位组成的数字,依次放在链表的第一个、第二个、节点中,不足四位的最高位存放在链表的最后一个节点中,表头节点的值规定为-1。四、课程设计要求:程序质量:l 贯彻结构化程序设计思想。l 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。l 用户界面中的菜单至少应包括“输入”、“退出”2项。l 代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:l 封面l 课程设计任务书l 目录l 需求分析(分析题目的要求)l 程序流程图(总体流程图和主要功能模块流程图)l 核心技术的实现说明及相应程序段l 个人总结l 参考资料l 源程序及适当的注释指导教师:_ 学生签名:_五、成绩:六、教师评语:目 录一、需求分析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(ppdata!=-1&qqdata!=-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个自定义函数组成。其中插入结点、输入并存入链表、结点的对应相加为其核心。具体过程如下:1 插入新结点在定义完链表结构后,插入新的结点以备存储。定义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;2. 结点的对应相加调用结点中的数据进行对应的相加。首先,定义一个加法操作*p+*q的指针,然后把数字按照三位三位的从其指针地址里取出并且建立存放和的链表表头和申请空间,在对应位均不是表头的情况下对应位进行相加求和,并算出进位,与前位进行相加,运算结果存入定义的存放和的空间中。如果两个数位数不相同,通过比较,选出较大的数没有参加运算的部分与之前的进位进行相加,最后返回指向和结构的指针,过程如下:NODE *addint(NODE *p,NODE *q) /*完成加法操作返回指向*p+*q结果的指针*/long group=pow(10,SIZE);NODE *pp,*qq,*r,*s,*t;int total,number,carry;pp=p-next; qq=q-next;s=(NODE *)malloc(sizeof(NODE); /*建立存放和的链表表头*/s-data=-1;t=s; carry=0; /*carry:进位*/while(pp-data!=-1&qq-data!=-1) /*均不是表头*/ total=pp-data+qq-data+carry; /*对应位与前次的进位求和*/ number=total%group; / *求出存入链中部分*/carry=total/group; /*算出进位*/ t=insert_after(t,number); /*将部分和存入s指向的链中*/ pp=pp-next; /*分别取后面的加数*/ qq=qq-next; r=(pp-data!=-1)?pp:qq; /*取尚未处理完毕的链指针*/while(r-data!=-1) /*处理加数中较大的数*/ total=r-data+carry; /*与进位相加*/number=total%group; /*求出存入链中部分的数值*/carry=total/group; /*算出进位*/ t=insert_after(t,number); /*将部分和存入s指向的链中*/r=r-next; /*取后面的数值*/if(carry) t=insert_after(t,1); /*处理最后一次进位*/t-next=s; /*完成和的链表*/return s; /*返回指向和的结构指针*/3. 输入并存入链表定义一个临时的中间结构并且建立表示超长正整数的表头,用于存放输入超长正整数。输入一个正整数,经过程序的判断,为数字的则存入之前建立的临时中间结构之中,并建立指针。把输入的整数按照链首为整数的最低的各位,链尾为整数的最高位按照3位将接收的临时数据链中的数据转换为所要求的标准形式别取出。按照次序一个一个循环乘以10然后相加得出超长正整数并且为其申请空间建立指针,建立链表。最后返回指向超长正整数结构的指针
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号