学习了数据结构后,才对指针有更深的了解,指针就是C 的灵魂。
1#include<stdio.h>
2#include<malloc.h>
3#define LEN sizeof(Lnode)
4typedef struct node{ //创建结构体节点
5 int xishu;
6 int zhishu;
7 struct node *next;
8}Lnode,*Linklist;
9void main(){
10 char s;
11 Linklist ha,hb,hc;
12 Linklist creat();
13 void out(Linklist);
14 Linklist add(Linklist,Linklist);
15start:
16 printf("求多项式A,B的和\n");
17 printf("请输入多项式A,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");
18 ha=creat();//创建A
19 //输出A
20 printf("A的结果为:\n A=");
21 out(ha);printf("\n");
22 printf("请输入多项式B,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");
23 hb=creat();//创建B
24 //输出B
25 printf("B的结果为:\n B=");
26 out(hb);
27 printf("\n");
28 hc=add(ha,hb);
29 printf("A+B的和为:");
30 out(hc);
31 printf("\n");
32 printf("是否继续(y/n)? :");
33 scanf("%s",&s);
34 if(s=='y')
35 goto start;
36} //main结束
37//创建多项式函数
38Linklist creat(){
39 Lnode *p,*s;
40 Linklist h;
41 int c,a0,i=1;
42 s=(Lnode*)malloc(LEN);
43 p=s;h=s;
44 p->xishu=NULL;
45 printf("请输入a0:");
46 scanf("%d",&a0);
47 s=(Lnode*)malloc(LEN);
48 p->next=s;
49 p=p->next;
50 p->xishu=a0;
51 p->zhishu=NULL;
52 p->next=NULL;
53 while(1){
54 s=(Lnode*)malloc(LEN);
55 printf("请输入第%d个系数:",i);
56 scanf("%d",&c);
57 if(c==0)
58 break;
59 p->next=s;
60 p=s;
61 p->xishu=c;
62 printf("请输入第%d个系数对应的x的指数:",i);
63 scanf("%d",&c);
64 p->zhishu=c;
65 p->next=NULL;
66 i++;
67 }
68 return h;
69}
70//多项式输出函数
71void out(Linklist h){
72 Lnode *p;
73 int a=0,b=0; //a判断是否用"+”,b是否整个多项式为0
74 p=h->next;
75 while(p!=NULL){
76 if(p->zhishu==NULL && p->xishu!=0){
77 printf("%d",p->xishu);
78 b=1;
79 p=p->next;a=1;
80 continue;
81 }
82 else if(p->xishu<0){
83 if(p->xishu==-1)
84 printf("-X");
85 else
86 printf("%dX",p->xishu);
87 b=1;a=1;
88 if(p->zhishu!=1)
89 printf("^%d",p->zhishu);
90
91 }
92 else if(p->xishu>0){
93 if(a==1)printf("+");
94 if(p->xishu!=1) printf("%d",p->xishu);
95 printf("X");b=1;
96 if(p->zhishu!=1) printf("^%d",p->zhishu);
97 a=1;
98 }
99 p=p->next;
100 }
101 if(b==0)
102 printf("0");
103}
104//多项式A,B相加的函数add()
105Linklist add(Linklist ha,Linklist hb){
106 Linklist hc; //定义c的头节点
107 Lnode *pa,*pb,*pc,*t;
108 pa=ha->next;pb=hb->next;
109 hc=ha;pc=hc;
110 free(hb);
111 while(pa && pb){
112 if(pa->zhishu!=NULL && pb->zhishu==NULL){//a无常数项,b有
113 pb=pb->next;
114 break;
115 }
116 else if(pa->zhishu==NULL && pb->zhishu!=NULL){//b无常数项,a有
117 pa=pa->next;
118 pc=pc->next;
119 break;
120 }
121 else if(pa->zhishu==NULL && pb->zhishu==NULL){//a,b都有常数项
122 pa->xishu=pa->xishu+pb->xishu;
123 pa=pa->next;pb=pb->next;
124 pc=pc->next;
125 }
126 else if(pa->zhishu > pb->zhishu){//a的指数项大
127 pc->next=pb;
128 pc=pc->next;
129 pb=pb->next;
130 pc->next=NULL;
131 }
132 else if(pa->zhishu<pb->zhishu){//b的指数项大
133 pc->next=pa;
134 pc=pc->next;
135 pa=pa->next;
136 pc->next=NULL;
137 }
138 else{ //a,b的指数相同
139 pa->xishu=(pa->xishu)+(pb->xishu);
140 if(pa->xishu==0){ //和为0,删节点
141 t=pa;
142 pa=pa->next;
143 free(t);
144 }
145 else{
146 pc->next=pa;
147 pc=pc->next;
148 pa=pa->next;
149 }
150 t=pb;
151 pb=pb->next;
152 pc->next=NULL;
153 free(t);
154 }
155 }//while 结束
156 if(pa)
157 pc->next=pa;
158 else
159 pc->next=pb;//剩余的结点加到链表
160 return hc;
161}//add函数结束
162
2#include<malloc.h>
3#define LEN sizeof(Lnode)
4typedef struct node{ //创建结构体节点
5 int xishu;
6 int zhishu;
7 struct node *next;
8}Lnode,*Linklist;
9void main(){
10 char s;
11 Linklist ha,hb,hc;
12 Linklist creat();
13 void out(Linklist);
14 Linklist add(Linklist,Linklist);
15start:
16 printf("求多项式A,B的和\n");
17 printf("请输入多项式A,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");
18 ha=creat();//创建A
19 //输出A
20 printf("A的结果为:\n A=");
21 out(ha);printf("\n");
22 printf("请输入多项式B,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");
23 hb=creat();//创建B
24 //输出B
25 printf("B的结果为:\n B=");
26 out(hb);
27 printf("\n");
28 hc=add(ha,hb);
29 printf("A+B的和为:");
30 out(hc);
31 printf("\n");
32 printf("是否继续(y/n)? :");
33 scanf("%s",&s);
34 if(s=='y')
35 goto start;
36} //main结束
37//创建多项式函数
38Linklist creat(){
39 Lnode *p,*s;
40 Linklist h;
41 int c,a0,i=1;
42 s=(Lnode*)malloc(LEN);
43 p=s;h=s;
44 p->xishu=NULL;
45 printf("请输入a0:");
46 scanf("%d",&a0);
47 s=(Lnode*)malloc(LEN);
48 p->next=s;
49 p=p->next;
50 p->xishu=a0;
51 p->zhishu=NULL;
52 p->next=NULL;
53 while(1){
54 s=(Lnode*)malloc(LEN);
55 printf("请输入第%d个系数:",i);
56 scanf("%d",&c);
57 if(c==0)
58 break;
59 p->next=s;
60 p=s;
61 p->xishu=c;
62 printf("请输入第%d个系数对应的x的指数:",i);
63 scanf("%d",&c);
64 p->zhishu=c;
65 p->next=NULL;
66 i++;
67 }
68 return h;
69}
70//多项式输出函数
71void out(Linklist h){
72 Lnode *p;
73 int a=0,b=0; //a判断是否用"+”,b是否整个多项式为0
74 p=h->next;
75 while(p!=NULL){
76 if(p->zhishu==NULL && p->xishu!=0){
77 printf("%d",p->xishu);
78 b=1;
79 p=p->next;a=1;
80 continue;
81 }
82 else if(p->xishu<0){
83 if(p->xishu==-1)
84 printf("-X");
85 else
86 printf("%dX",p->xishu);
87 b=1;a=1;
88 if(p->zhishu!=1)
89 printf("^%d",p->zhishu);
90
91 }
92 else if(p->xishu>0){
93 if(a==1)printf("+");
94 if(p->xishu!=1) printf("%d",p->xishu);
95 printf("X");b=1;
96 if(p->zhishu!=1) printf("^%d",p->zhishu);
97 a=1;
98 }
99 p=p->next;
100 }
101 if(b==0)
102 printf("0");
103}
104//多项式A,B相加的函数add()
105Linklist add(Linklist ha,Linklist hb){
106 Linklist hc; //定义c的头节点
107 Lnode *pa,*pb,*pc,*t;
108 pa=ha->next;pb=hb->next;
109 hc=ha;pc=hc;
110 free(hb);
111 while(pa && pb){
112 if(pa->zhishu!=NULL && pb->zhishu==NULL){//a无常数项,b有
113 pb=pb->next;
114 break;
115 }
116 else if(pa->zhishu==NULL && pb->zhishu!=NULL){//b无常数项,a有
117 pa=pa->next;
118 pc=pc->next;
119 break;
120 }
121 else if(pa->zhishu==NULL && pb->zhishu==NULL){//a,b都有常数项
122 pa->xishu=pa->xishu+pb->xishu;
123 pa=pa->next;pb=pb->next;
124 pc=pc->next;
125 }
126 else if(pa->zhishu > pb->zhishu){//a的指数项大
127 pc->next=pb;
128 pc=pc->next;
129 pb=pb->next;
130 pc->next=NULL;
131 }
132 else if(pa->zhishu<pb->zhishu){//b的指数项大
133 pc->next=pa;
134 pc=pc->next;
135 pa=pa->next;
136 pc->next=NULL;
137 }
138 else{ //a,b的指数相同
139 pa->xishu=(pa->xishu)+(pb->xishu);
140 if(pa->xishu==0){ //和为0,删节点
141 t=pa;
142 pa=pa->next;
143 free(t);
144 }
145 else{
146 pc->next=pa;
147 pc=pc->next;
148 pa=pa->next;
149 }
150 t=pb;
151 pb=pb->next;
152 pc->next=NULL;
153 free(t);
154 }
155 }//while 结束
156 if(pa)
157 pc->next=pa;
158 else
159 pc->next=pb;//剩余的结点加到链表
160 return hc;
161}//add函数结束
162