- /*多项式(Polyomial)加法
- code by zzr
- http://blog.youkuaiyun.com/ZhengZhiRen/ */
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #define LEN sizeof(node)
- typedef struct node
- {
- float coef; /*系数(coefficient)*/
- int exp; /*指数(exponent)*/
- struct node *next;
- }node;
- node * create_poly() /*建立多项式*/
- {
- node *head;
- node *p;
- node *pt;
- head=(node *)malloc(LEN); /*头结点*/
- p=head;
- pt=(node *)malloc(LEN);
- scanf( "%f%d" ,&pt->coef,&pt->exp);
- while (pt->coef!=0)
- {
- p->next=pt;
- p=pt;
- pt=(node *)malloc(LEN);
- scanf( "%f%d" ,&pt->coef,&pt->exp);
- }
- p->next=NULL;
- return head;
- }
- int cmp(node *pa,node *pb)
- {
- /*比较两个项的指数大小*/
- if (!pa||!pb)
- return -2; /*返回错误*/
- if (pa->exp>pb->exp)
- return 1;
- else if (pa->exp==pb->exp)
- return 0;
- else
- return -1;
- }
- void add_poly(node *ha,node *hb) /*两个多项式相加*/
- {
- node *pa;
- node *pb;
- node *pt;
- pa=ha->next;
- pb=hb->next;
- while (pa&&pb)
- {
- switch (cmp(pa,pb))
- {
- case 1: /*pa指数大*/
- pt=pb;
- hb->next=pt->next;
- pt->next=pa;
- ha->next=pt;
- /*指针后移*/
- ha=ha->next;
- pa=ha->next;
- pb=hb->next;
- break ;
- case 0: /*指数相等*/
- pa->coef+=pb->coef;
- pt=pb;
- /*指针后移*/
- ha=ha->next;
- pa=ha->next;
- hb->next=pb->next;
- pb=hb->next;
- free(pt);
- break ;
- case -1: /*pb指数大*/
- ha=pa;
- pa=ha->next;
- break ;
- }
- }
- if (NULL==pa)
- ha->next=pb;
- }
- void print_poly(node *poly) /*输出多项式*/
- {
- int i; /*控制是否打印加号*/
- for (i=0,poly=poly->next;poly;poly=poly->next,i++)
- {
- if (i>0)
- printf( "+" );
- printf( "%gX%d" ,poly->coef,poly->exp);
- }
- }
- void main()
- {
- node *poly_a;
- node *poly_b;
- /*创建多项式A、B*/
- printf( "请输入多项式A项的系数和指数/n" );
- poly_a=create_poly();
- printf( "请输入多项式B项的系数和指数/n" );
- poly_b=create_poly();
- /*输出多项式A、B*/
- printf( "A=" );
- print_poly(poly_a);
- printf( "/n" );
- printf( "B=" );
- print_poly(poly_b);
- printf( "/n" );
- /*A、B相加*/
- add_poly(poly_a,poly_b);
- /*输出结果*/
- printf( "A+B=" );
- print_poly(poly_a);
- printf( "/n" );
- }
多项式加法
最新推荐文章于 2019-11-01 19:04:31 发布