想问一下子GCC编译器下的程序需要注意什么?
想问一下GCC编译器下的程序需要注意什么??
写了一份链表的多项式相乘,在自己的VS上运行完全没问题,在codeblocks GCC编译器下运行结果有误,但是我单步调试结果却是对的,实在不懂哪点写错了?
写了一份链表的多项式相乘,在自己的VS上运行完全没问题,在codeblocks GCC编译器下运行结果有误,但是我单步调试结果却是对的,实在不懂哪点写错了?
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int coef, exp;
struct node *next;
} NODE;
void multiplication(NODE *, NODE *, NODE *);
void input(NODE *);
void output(NODE *);
int main()
{
NODE * head1, *head2, *head3;
head1 = (NODE *) malloc(sizeof(NODE));
input(head1);
head2 = (NODE *) malloc(sizeof(NODE));
input(head2);
head3 = (NODE *) malloc(sizeof(NODE));
head3->next = NULL;
multiplication(head1, head2, head3);
output(head3);
return 0;
}
void multiplication(NODE *head1, NODE *head2, NODE *head3)
{
/*head1 为第一个多项式, head2 为第二个多项式 head3 为结果(都是头结点)*/
NODE *p1, *p2, *p3;
NODE *q, *pre;
int key = 0;
p1 = head1 ->next; p2 = head2->next; p3 = head3->next;
head3->next = p3;
while (p1 != NULL)
{
while (p2 != NULL)
{
p3 = head3;
while (p3->next != NULL)
p3 = p3->next;
q = (NODE*) malloc(sizeof(NODE));
q->coef = p2->coef * p1->coef;
q->exp = p1->exp + p2->exp;
p3->next = q;
q->next = NULL;
p2 = p2->next;
}
p1 = p1->next;
p2 = head2->next;
}
NODE *temp;
int i, j, t;
NODE *p = head3;
int count = 0;
while (p->next != NULL)
{
count++;
p = p->next;
}
for (i = 0; i < count - 1; i++) /* 冒泡法排序 */
{
p = head3;
for (j = 0; j < count - i - 1; j++)
{
if (p->exp > p->next->exp)
{
t = p->exp;
p->exp = p->next->exp;
p->next->exp = t;
t = p->coef;
p->coef = p->next->coef;
p->next->coef = t;
}
p = p->next;
}
}
/*-----------------------------*/
p3 = head3 ->next;
pre = head3;
while (p3->next != NULL)
{
if (p3->exp == p3->next->exp)
{
p3->coef += p3->next->coef;
if (p3->coef == 0)
{
temp = p3->next;
pre->next = temp->next;
p3 = pre->next;
free(temp);
continue;
}
else
{
temp = p3->next;
p3->next = temp->next;
free(temp);
continue;
}
}
else
{
p3 = p3->next;
pre = pre->next;
}
}
}
void input(NODE * head)
{
int flag, sign, sum, x;
char c;
NODE * p = head;
while ((c = getchar()) != '\n')
{
if (c == '<')
{
sum = 0;
sign = 1;
flag = 1;
}
else if (c == '-')
sign = -1;
else if (c >= '0' && c <= '9')
{
sum = sum * 10 + c - '0';
}
else if (c == ',')
{
if (flag == 1)
{
x = sign * sum;
sum = 0;
flag = 2;
sign = 1;
}
}
else if (c == '>')
{
p->next = (NODE *) malloc(sizeof(NODE));
p->next->coef = x;
p->next->exp = sign * sum;
p = p->next;
p->next = NULL;
flag = 0;
}
}
}
void output(NODE * head)
{
while (head->next != NULL)
{
head = head->next;
printf("<%d,%d>,", head->coef, head->exp);
}
printf("\n");
}
相关解决方案