学习了数据结构后,才对指针有更深的了解,指针就是C 的灵魂。
1
#include<stdio.h>
2
#include<malloc.h>
3
#define LEN sizeof(Lnode)
4
typedef struct node{ //创建结构体节点
5
int xishu;
6
int zhishu;
7
struct node *next;
8
}Lnode,*Linklist;
9
void main(){
10
char s;
11
Linklist ha,hb,hc;
12
Linklist creat();
13
void out(Linklist);
14
Linklist add(Linklist,Linklist);
15
start:
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
//创建多项式函数
38
Linklist 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
//多项式输出函数
71
void 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()
105
Linklist 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
#include<stdio.h>2
#include<malloc.h>3
#define LEN sizeof(Lnode)4
typedef struct node{ //创建结构体节点5
int xishu;6
int zhishu;7
struct node *next;8
}Lnode,*Linklist;9
void main(){10
char s;11
Linklist ha,hb,hc;12
Linklist creat();13
void out(Linklist);14
Linklist add(Linklist,Linklist);15
start:16
printf("求多项式A,B的和\n");17
printf("请输入多项式A,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");18
ha=creat();//创建A19
//输出A20
printf("A的结果为:\n A=");21
out(ha);printf("\n");22
printf("请输入多项式B,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");23
hb=creat();//创建B24
//输出B25
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
//创建多项式函数38
Linklist 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
//多项式输出函数71
void out(Linklist h){72
Lnode *p;73
int a=0,b=0; //a判断是否用"+”,b是否整个多项式为074
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
else86
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()105
Linklist 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
else159
pc->next=pb;//剩余的结点加到链表160
return hc;161
}//add函数结束162

typedef 
浙公网安备 33010602011771号