下面是我写的多项式相加的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int a;
int i;
} Node;
int main()
{
int n,i,j,k; // i,j,k用于计数
scanf("%d",&n);
int sum = n; // sum存储第一个数组的容量
Node *p = (Node*)malloc(sizeof(Node) * n); // 为第一个数组分配内存
for(i=0;i<n;i++)
{
scanf("%d %d",&p[i].a,&p[i].i);
}
scanf("%d",&n);
Node *q = (Node*)malloc(sizeof(Node) * n); // 为第二个数组分配内存
for(i=0;i<n;i++)
{
scanf("%d %d",&q[i].a,&q[i].i);
}
// 下面进行多项式的加法
Node *ret = (Node*)malloc(sizeof(Node) * n);
i = 0,j = 0,k = 0;
while(k<n+sum)
{
if(i==sum){
// 一个读取结束后,将另一个全部按序加上
for(;j<n;j++){
ret[k].i = q[j].i;
ret[k].a = q[j].a;
k++;
}
break;
} else if(j == n){
for(;i<sum;i++){
ret[k].i = p[i].i;
ret[k].a = p[i].a;
k++;
}
break;
} // 下面是分三种情况讨论将结果存在ret中
if(p[i].i > q[j].i){
ret[k].i = q[j].i;
ret[k].a = q[j].a;
k++;
j++;
} else if(p[i].i < q[j].i){
ret[k].i = p[i].i;
ret[k].a = p[i].a;
k++;
i++;
} else if(p[i].i == q[j].i){
ret[k].i = p[i].i;
ret[k].a = p[i].a + q[j].a;
k++;
i++,j++;
}
}
for(i=0;i<k;i++)
{
printf("%d %d ",ret[i].a,ret[i].i);
}
return 0;
}
运行没有结果:

但是调试单步执行结果正确:

目前不知道哪里出了问题?网上查阅资料,有人说是程序过于复杂,导致直接运行时以为是死循环就退出了?求大佬指点!