1、一元稀疏多项式计算器#includestdio.h#includestdlib.h#includeconio.htypedef int elemtype;typedef struct list / 定义结构体链表 float c; / 多项式的常数域 elemtype e; / 指数域 struct list *next; /指针域 lnode,*linklist; / 结构体名称void create_jisuanqi_linklist(linklist *l) / 初始化结构体 (*l)=(linklist)malloc(sizeof(lnode); (*l)-next= NULL; vo
2、id insert_jisuqnai_linklist(linklist l) / 创建结构体 int e,n,i=1; float c; lnode *p=l; printf(How many terms in the polynomial:); scanf(%d,&n); / 输入多项式中的项数 while(n) lnode *q=(linklist)malloc(sizeof(linklist); printf(Please input NO.%ds c and e:,i); fflush(stdin); / 清除缓存数据 scanf(%f%d,&c,&e); / 分别输入多项式的常数域
3、和指数域 q-c=c; q-e=e; p-next=q; / 将结点q接入链表中 q-next=NULL; p=q; n-; i+; void chose_jisuanqi_linklist(linklist *l) / 对多项式按指数进行降序排序 lnode *p=(*l)-next; lnode *q=(lnode *)malloc(sizeof(linklist); / 定义一个结点,用于循环比较指数域的值 int tempc,tempe; while(p!=NULL) / 一直循环,直到遍历完链表中所有结点 q=p; while(q!=NULL) if(p-ee) / 交换两节点中的常
4、数和指数域 的值 tempe=p-e; tempc=p-c; p-e=q-e; p-c=q-c; q-e=tempe; q-c=tempc; q=q-next; / 指针下移 p=p-next; lnode *add_jisuanqi_linklist(linklist a,linklist b) / 执行多项式A与B相加 linklist c; / 定义一个链表C 用于存放两个多项式的和 int x; create_jisuanqi_linklist(&c); / 创建该多项式 lnode *p1=a-next; lnode *p2=b-next; lnode *t=c; t-next=NU
5、LL; lnode *p3=t; while(p1) / 遍历两个多项式中所有结点,找到指数域相同的结点,将其常数域相加 存放到链表C中 p2=b-next; while(p2) if(p1-e=p2-e) lnode *q=(lnode *)malloc(sizeof(lnode); x=p1-c+p2-c; / 将常数域相加 q-c=x; q-e=p1-e; p3-next=q; q-next=NULL; p3=q; break; else p2=p2-next; p1=p1-next; p1=a-next; / 指针复位 指向头结点的next while(p1) / 链表a与c比较,将a
6、中指数域的值未在c中出现的结点连接在链表c后 lnode *q=t-next; while(q) if(p1-e!=q-e) q=q-next; else break; if(q=NULL) lnode *q1=(lnode *)malloc(sizeof(lnode); q1-c=p1-c; q1-e=p1-e; p3-next=q1; q1-next=NULL; p3=q1; p1=p1-next; p2=b-next; while(p2) / 链表a与c比较,将a中指数域的值未在c中出现的结点连接在链表c后 lnode *q=t-next; while(q) if(p2-e!=q-e)
7、q=q-next; else break; if(q=NULL) lnode *q2=(lnode *)malloc(sizeof(lnode); q2-c=p2-c; q2-e=p2-e; p3-next=q2; q2-next=NULL; p3=q2; p2=p2-next; chose_jisuanqi_linklist(&c); / 对链表c进行安指数降序排序 return t; / 返回c的头结点lnode *jian_jisuanqi_linklist(linklist a,linklist b) / 执行多项式A与B相减 linklist c; int x; create_jis
8、uanqi_linklist(&c); lnode *p1=a-next; lnode *p2=b-next; lnode *t=c; t-next=NULL; lnode *p3=t; while(p1) p2=b-next; while(p2) if(p1-e=p2-e) lnode *q=(lnode *)malloc(sizeof(lnode); x=p1-c-p2-c; / 将两个多项式的常数项相减 q-c=x; q-e=p1-e; p3-next=q; q-next=NULL; p3=q; break; else p2=p2-next; p1=p1-next; p1=a-next;
9、 while(p1) lnode *q=t-next; while(q) if(p1-e!=q-e) q=q-next; else break; if(q=NULL) lnode *q1=(lnode *)malloc(sizeof(lnode); q1-c=p1-c; q1-e=p1-e; p3-next=q1; q1-next=NULL; p3=q1; p1=p1-next; p2=b-next; while(p2) lnode *q=t-next; while(q) if(p2-e!=q-e) q=q-next; else break; if(q=NULL) lnode *q2=(lno
10、de *)malloc(sizeof(lnode); q2-c=p2-c; q2-e=p2-e; p3-next=q2; q2-next=NULL; p3=q2; p2=p2-next; chose_jisuanqi_linklist(&c); return t;void display_jisuanqi_linklist(linklist l) / 输出链表 lnode *p=l-next; printf(%3.1f%d,p-c,p-e); p=p-next; while(p) if(p-c0) / 如果多项式的常数项大于0,则在输出项前面加一个“+” printf(+%3.1f%d,p-c
11、,p-e); p=p-next; else if(p-cc,p-e); p=p-next; else / 常数项为0,不输出 p=p-next; printf(n);#includestdio.h#includestdlib.h#includeconio.h#includejisuanqi_linklist.hvoid main() / 主函数 linklist a,b,c,d; int k;start: printf(nttt欢迎使用多项式计算器系统n); / 进入系统提示 do printf(t|*|n); / 选择模块 printf(t| 1.输入多项式A、B,并对其进行指数降序排列 |
12、n); printf(t| 2.输出多项式A 、B |n); printf(t| 3.计算多项式C=A+B |n); printf(t| 4.计算多项式D=A-B |n); printf(t| 5.输出多项式C、D |n); printf(t| 0.退出系统 |n); printf(t|*|n); printf(t 选择功能选项:); scanf(%d,&k); / 输入要选择的功能选项 switch(k) / 对号调用子函数 case 1: system(cls); / 清屏 create_jisuanqi_linklist(&a); insert_jisuqnai_linklist(a);
13、 chose_jisuanqi_linklist(&a); create_jisuanqi_linklist(&b); insert_jisuqnai_linklist(b); chose_jisuanqi_linklist(&b); system(cls);break; case 2:system(cls); printf(Polynomial A is:n); display_jisuanqi_linklist(a); printf(nPolynomial B is:n); display_jisuanqi_linklist(b); getch(); system(cls);break;
14、case 3:system(cls); c=add_jisuanqi_linklist(a,b); printf(Calculae polynomialC=A+B is successful!); getch(); system(cls);break; case 4:system(cls); d=jian_jisuanqi_linklist(a,b); printf(Calculae polynomial C=A-B is successful!); getch(); system(cls);break; case 5:system(cls); printf(Polynomial C is:n); display_jisuanqi_linklist(c); printf(nPolynomial D is:n); display_jisuanqi_linklist(d); getch(); system(cls);break; case 0:system(exit);exit(0); default:system(cls);goto start; while(1);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1