资源描述:
《计算机基础算法实验》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、计算机基础算法实验班级:学号:姓名:完成日期:算法1实现两个整数相加1.需求分析课程设计任务是用链表(单链表或双向链表)实现任意位数的整数相加。输入的形式和输入值的范围:长度不超过一百位的整数。输出的形式:有中文提示,分三行输出。2.概要设计LNode*CreatList()操作结果:构造一个链表.LNodeAdd(LNode*t1,LNode*t2)初始条件:存在两个结点t1,t2;操作结果:实现两个结点的相加。voidprint(LNode*L)初始条件:L存在;操作结果:打印链表L。3.详细设计(1)主过程开始建立链表p1建立链表p2调用Compare函数调用pri
2、nt()函数,打印p3结束(2)打印求和链表过程开始建立结点s1,s2其中一个结点非空时,循环,下一位,对应i.ji>=j?Add(s1,s2)Add(s2,s1)赋给P3,打印结束1.调试分析输入的数必须为长度不超过一百位的整数,否则出现错误;如:输入6.4和3.2,输出结果为9-46。根据实际情况的需要,可以将整数的长度定义为1000位,甚至更长。2.总结(1)熟悉掌握链表的建立及调用,同时对数组的理解进一步加深;(2)认识到自己的不足,以后多加练习,争取写出更好的算法。实验内容:源程序:#include#include#inclu
3、de#defineMAX100typedefstructLNode{intdata;structLNode*pre,*next;}LNode,List;LNode*CreatList(){LNode*p,*q,*r;chars[MAX];inti=0;printf("输入一个整数:");gets(s);p=(LNode*)malloc(sizeof(List)*MAX);q=r=p;p->data=-1;while(s[i]!=NULL){q=(LNode*)malloc(sizeof(List));q->data=s[i++]-'0';q->pre=
4、r;r->next=q;r=q;}r->next=NULL;returnp;}LNodeAdd(LNode*t1,LNode*t2){while(t1->data!=-1&&t2->data!=-1){t1->data=t1->data+t2->data;if(t1->data>9){t1->data-=10;t1->pre->data+=1;}t1=t1->pre;t2=t2->pre;}if(t1->next->data>9)t1->next->data-=10;return*t1;}LNode*Compare(LNode*p1,LNode*p2){LNode*s1=
5、p1->next,*s2=p2->next,*t1,*t2;inti=0,j=0;while(s1!=NULL){t1=s1;s1=s1->next;i++;}while(s2!=NULL){t2=s2;s2=s2->next;j++;}if(i>=j)Add(t1,t2);elseAdd(t2,t1);returni>=j?p1:p2;}voidprint(LNode*L){LNode*p;printf("两整数的和为:");if(L->data!=-1)printf("%d",1);p=L->next;do{printf("%d",p->data);p=p->next
6、;}while(p!=NULL);printf("");}intmain(){LNode*p1,*p2,*p3;p1=CreatList();p2=CreatList();p3=Compare(p1,p2);print(p3);getch();return0;}运行结果:示例输入一个整数:6541输入一个整数:两整数的和为:运行效果图为:算法2算术表达式求值1.需求分析课程设计任务是以字符序列的形式从终端输入语法正确的、不含变量的整数表达式,利用给定的算符优先关系,实现对算术四则混合运算表达式的求值,并演示在求值过程中运算符栈、操作数栈、操作数栈和主要操作的变化过程。
7、输入的形式和输入值的范围:不含变量的整数表达式,算术四则混合运算表达式。输出的形式:表达式。2.概要设计StatusInitStack(SqStack&S)操作结果:构造一个空栈S。StatusGetTop(SqStackS)初始条件:栈S存在且非空。操作结果:用e返回S的栈顶元素.StatusPush(SqStack&S,ElemTypee)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素.StatusPop(SqStack&S,ElemType&e)初始条件:栈S存在且非空.操作结果:删除S的栈顶元素,用e返回其值