| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:多项式相加,有点问题
只看楼主 加入收藏
ibiancheng
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-4-3
收藏
 问题点数:0 回复次数:3 
多项式相加,有点问题

#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct node{
int xi;//存放系数
int zi;//存放指数
struct node *next;
}Node;

Node *Creat()
{
Node *head,*p,*pre;
int fg,tag;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
pre=head;
printf("请按照指数从小到大输入多项式并以0 0结束:\n");
scanf("%d%d",&fg,&tag);
while(fg)
{
p=(Node *)malloc(sizeof(Node));
p->xi=fg;
p->zi=tag;
p->next=pre->next;
pre->next=p;
pre=p;
scanf("%d%d",&fg,&tag);
}
if(fg==0&&tag==0)
printf("\n输入结束:\n");
return head;
}

void Read(Node *head) //读取链表中的数据
{
Node *p=head->next;
while(p)
{
printf("%dX~%d->",p->xi,p->zi);
p=p->next;
}
printf("NULL\n");
}

Node *Add(Node *head1,Node *head2)
{
Node *p,*head,*p1,*p2;int sum;
head=(Node *)malloc(sizeof(Node));
p=head;
p1=head1->next;
p2=head2->next;
while(p1&&p2)
{
if(p1->zi<p2->zi)
{
p->next=p1;
p=p1;
p1=p1->next;
}
if(p1->zi>p2->zi)
{
p->next=p2;
p=p2;
p2=p2->next;
}
if(p1->zi==p2->zi)
{
sum=p1->xi+p2->xi;
if(sum)
{
p1->xi=sum;
p->next=p1;
p=p1;
p1=p1->next;
p2=p2->next;
}
else
{
p1=p1->next;
p2=p2->next;
}
}
}
if(p1) //将1中剩余结点接到和链表中
{

do{
p->next=p1;
p=p1;
p1=p1->next;
}while(p1);
}
if(p2) //将2中剩余结点接到和链表中
{

do{
p->next=p2;
p=p2;
p2=p2->next;
}while(p2);
}
return head;
}

void main()
{
Node *head,*p1,*p2;
p1=Creat();
Read(p1);
p2=Creat();
Read(p2);
head=Add(p1,p2);
printf("相加后为:\n");
Read(head);
getch();
}


运行时候为什么输入的数据比较少时候正确..输入多了之后就会出错!
谁帮我看下呀,!谢谢!




[此贴子已经被作者于2007-10-18 18:53:36编辑过]

搜索更多相关主题的帖子: 多项式 相加 
2007-10-18 18:50
zxc1998
Rank: 1
等 级:新手上路
威 望:1
帖 子:133
专家分:0
注 册:2007-3-21
收藏
得分:0 

程序好像没什么问题,把你出错的数据发上来研究一下。

需要指出的一点是你没有把删除的节点释放掉。free
还有一些细节没考虑到。

2007-10-18 23:30
jfj123456
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-13
收藏
得分:0 
当最高项Z2>Z1是就出错
2009-10-13 22:53
jfj123456
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-13
收藏
得分:0 
//头文件定义
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct node{
    int xi;//存放系数
    int zi;//存放指数
    struct node *next;
}Node;
 
Node *Creat()  
{
Node *head,*p,*pre;
int fg,tag;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
pre=head;
printf("请按照指数从小到大输入多项式每项的系数和指数“每项格式# #”并以0 0结束:\n");
scanf("%d%d",&fg,&tag);
while(fg)
{
p=(Node *)malloc(sizeof(Node));
p->xi=fg;
p->zi=tag;
p->next=pre->next;
pre->next=p;
pre=p;
scanf("%d%d",&fg,&tag);
}
if(fg==0&&tag==0)
printf("\n输入结束:\n");
return head;
}
 
void Read(Node *head) //读取链表中的数据
{
Node *p=head->next;
while(p)
{
printf("%dX~%d->",p->xi,p->zi);
p=p->next;
}
printf("NULL\n");
}
 
Node *Add(Node *head1,Node *head2)
{
Node *p,*head,*p1,*p2;
int sum;
head=(Node *)malloc(sizeof(Node));
p=head;
p1=head1->next;
p2=head2->next;
while(p1&&p2)
{
if(p1->zi<p2->zi)
{
p->next=p1;
p=p1;
p1=p1->next;
}
if(p1->zi>p2->zi)
{
p->next=p2;
p=p2;
p2=p2->next;
}
if(p1->zi==p2->zi)
{
sum=p1->xi+p2->xi;
if(sum)
{
p1->xi=sum;
p->next=p1;
p=p1;
p1=p1->next;
p2=p2->next;
}
else
{
p1=p1->next;
p2=p2->next;
}
}
}
if(!(p1&&p2)){
if(p1) //将1中剩余结点接到和链表中
{
 
do{
p->next=p1;
p=p1;
p1=p1->next;
}while(p1);
}
if(p2) //将2中剩余结点接到和链表中
{
 
do{
p->next=p2;
p=p2;
p2=p2->next;
}while(p2);
}
}
return head;
}
 
void main()
{
Node *head,*p1,*p2;
p1=Creat();
Read(p1);
p2=Creat();
Read(p2);
head=Add(p1,p2);
printf("相加后为:\n");
Read(head);
getch();
}
2009-10-13 23:06
快速回复:多项式相加,有点问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016180 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved