早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C语言,描述多项式加法题目内容:一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x6+3x5+12x3+6x+20现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的

题目详情
C语言,描述多项式加法
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出样例:
4x6+6x5+12x3+12x2+12x+40
▼优质解答
答案和解析
1.    #include"malloc.h"
2.    typedef struct Polyn /*定义多项式每一项的类型*/
3.    {
4.     float cofe; /*每一项系数*/
5.     int expn; /*每一项的指数*/
6.     struct Polyn *next;
7.     struct Polyn *prior;
8.    }*Pol.yn,SNode;
9.    void setPolyn(Polyn *t1,Polyn *t2,int n) /*建立多项式*/
10.    {
11.     float a;
12.     int i,b;
13.     *t1=(SNode *)malloc(sizeof(SNode)); /*创建头节点*/
14.     (*t1)->next=NULL;
15.     for(i=0;i16.     {
17.     *t2=(SNode *)malloc(sizeof(SNode));
18.     scanf("%f,%d;",&a,&b);
19.     (*t2)->cofe=a; (*t2)->expn=b;
20.     (*t1)->next->prior=(*t2);
21.     (*t2)->prior=(*t1);
22.     (*t2)->next=(*t1)->next;
23.     (*t1)->next=(*t2);
24.     } /*创建每一项并连接成多项式*/
25.    }
26.    void print(Polyn *t) /*输出多项式*/
27.    {
28.     Polyn p;
29.     for(p=(*t)->next;p!=NULL;p=p->next)
30.     printf("%f,%d;",p->cofe,p->expn);
31.     printf("");
32.    }
33.    void arrange(Polyn *t) /*化简多项式*/
34.    {
35.     float m1;
36.     int m2;
37.     Polyn p,q,r,s;
38.     for(p=(*t)->next;p!=NULL;p=p->next)
39.     for(q=p->next;q!=NULL;q=q->next)
40.     if((p->expn)>(q->expn))
41.     {
42.     m1=p->cofe;p->cofe=q->cofe;q->cofe=m1;
43.     m2=p->expn;p->expn=q->expn;q->expn=m2;
44.     } /*冒泡法多项式指数排序*/
45.     for(p=(*t)->next;p!=NULL;p=p->next)
46.     if((p->expn)==(p->next->expn))
47.     {
48.     r=p->next;
49.     p->cofe+=p->next->cofe;
50.     p->next=p->next->next;
51.     p=p->prior; /*指针指向上一结点(须重新处理现在处理 的结点)*/
52.     free(r);
53.     if((p->next->cofe)==0)
54.     {
55.     s=p->next;
56.     p->next=p->next->next;
57.     free(s);
58.     }
59.     } /*多项式相同指数项系数求和,化简多项式*/
60.    }
61.    void linkPolyn(Polyn *t1,Polyn *t2) /*两个多项式连接*/
62.    {
63.     Polyn p,q;
64.     for(p=(*t2)->next;p!=NULL;p=p->next)
65.     q=p;
66.     p=(*t2)->next;
67.     q->next=(*t1)->next;
68.     (*t1)->next->prior=q;
69.     (*t1)->next=p;
70.     p->prior=(*t1);
71.    }
72.    main() /*主函数*/
73.    {
74.     Polyn La,la,Lb,lb;
75.     int n,m; /*多项式项数*/
76.     printf("enter La’s lenth:");
77.     scanf("%d",&n);
78.     setPolyn(&La,&la,n);
79.     arrange(&La);
80.     printf("after arrange La is:");
81.     print(&La); /*输入多项式La,化简并输出*/
82.     printf("enter Lb’s lenth:");
83.     scanf("%d",&m);
84.     setPolyn(&Lb,&lb,m);
85.     arrange(&Lb);
86.     printf("after arrange Lb is:");
87.     print(&Lb); /*输入多项式Lb,化简并输出*/
88.     linkPolyn(&La,&Lb); /*La与Lb连接,形成新的La*/
89.     arrange(&La); /*化简La*/
90.     printf("after add Polyn is :");
91.     print(&La); /*输出结果*/
92.    }