| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 623 人关注过本帖
标题:哪位大侠帮帮我一下~~ 先谢
只看楼主 加入收藏
kuai1230
Rank: 1
来 自:四川
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-2-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
哪位大侠帮帮我一下~~ 先谢
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define NULL 0

typedef struct pnode {
 float  coef;                 
 int    exp;         
 struct pnode *next;  
}polynode;
pnode *Creat(int n);
void print(pnode *head);
pnode *AddPolyn(pnode *head1, pnode *head2);
pnode *Delfirst(pnode *head, pnode *q);
void InsertBefore(pnode *p1, pnode *p2);
int  compare(int a, int b);

pnode *Creat(int n)
{
pnode *current, *previous, *head;
 int i;

 head = (pnode *)malloc(sizeof(pnode));
 previous = head;
 

 for(i = 0; i < n; i++)
 {
  current = (pnode *)malloc(sizeof(pnode));
  
  printf("请输入系数和指数 : ");
  scanf("%f%d", &current->coef, &current->exp);
  previous->next = current;
  previous = current;
 }
 previous->next = NULL;
 return head;
}
pnode  *AddPolyn(pnode *head1, pnode *head2)
{
 pnode *ha, *hb, *qa, *qb;
 int a, b;
 float sum;

 ha = head1;              
 hb = head2;
 qa = ha->next;            
 qb = hb->next;

 

 while(qa && qb)            
 {
  a = qa->exp;
  b = qb->exp;

  switch(compare(a, b)) {
  case -1 :            
   ha = qa;
   qa = qa->next;
   break;
     
  case 0 :
   sum = qa->coef + qb->coef;  

   if(sum != 0.0) {         
    qa->coef = sum;      
    ha = qa;                                 
   }else {
    free(Delfirst(ha, qa));
   }                              
   free(Delfirst(hb, qb));
   qa = ha->next;              
   qb = hb->next;         
   break;
  
  case 1 :                     
   Delfirst(hb, qb);
   InsertBefore(ha, qb);   
   qb = hb->next;
   ha = ha->next;
   break;
  }
 }
 if(qb)
  ha->next = qb;               

 free(head2);

 return head1;
}
int compare(int a, int b)
{
 if(a < b)
  return -1;
 else if(a > b)
  return 1;
 else
  return 0;
}
pnode *Delfirst(pnode *p1,pnode *q)
{
 p1 -> next = q -> next;
 return (q);
}
void InsertBefore(pnode *p1, pnode *p2)
{
pnode *p;
 p = p1->next;
 p1->next = p2;
 p2->next = p;
}
void print(pnode *head)
{
pnode *current;
 
 current = head->next;
 while(current->next != NULL)
 {
  printf("%0.f * x^%d + ", current->coef, current->exp);
  current = current -> next;
 }
 printf("%0.f * x^%d", current->coef, current->exp);
  getchar();
}

 int main()
{
pnode *head1, *head2, *head3;
 int n1, n2;

 printf("请输入你需要的多项数的数目 n1  : ");
  scanf("%d", &n1);
 head1 = Creat(n1);
 printf("第一个多项式的显示 : \n");
 print(head1);
   

 printf("\n请输入你需要的多项数的数目 n2  : ");
  scanf("%d", &n2);
 head2 = Creat(n2);
 printf("\n第二个多项式的显示 : \n");
 print(head2);
 head3 = AddPolyn(head1, head2);
 printf("\n合并后的多项式的显示 : \n");
 print(head3);
 printf("\n");
}

这个是2个多项式相加的程序,为什么我把第二个多项式取反,这样就变成2个多项式相减了。但是运行出错。。。。   那位大侠帮帮忙阿~~~~
搜索更多相关主题的帖子: previous compare current include 
2010-02-02 16:13
gtl75008810
Rank: 2
等 级:论坛游民
帖 子:29
专家分:71
注 册:2010-2-2
收藏
得分:10 
没有注释,这么长的程序看这眼晕,伙计~~
2010-02-07 17:49
qq372421150
Rank: 2
等 级:论坛游民
帖 子:14
专家分:18
注 册:2010-2-5
收藏
得分:10 
太长了,不知道怎么看呀 ?
2010-02-07 18:34
快速回复:哪位大侠帮帮我一下~~ 先谢
数据加载中...
 
   



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

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