| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:希望哪位大神可以帮我解释一下算法的每一句,谢谢了
只看楼主 加入收藏
静水gzc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-11-7
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
希望哪位大神可以帮我解释一下算法的每一句,谢谢了
#include<stdio.h>
#include<stdlib.h>
typedef struct polynomial
{
 
float cofe; //系数
int expn;   //指数
 
struct polynomial *next;  
}*polyn,polynomial;  

//创建多项式
void Insert(polyn p,polyn h) //头结点是h,新结点p
{ //顺序插入结点
   if (p->cofe==0)
   free(p); //若系数为0释放结点
   else   
 {
 polyn q1,q2;
 q1=h;
 q2=h->next;
 while (q2&&p->expn<q2->expn)
 {  //查找插入位置
 q1=q2;
 q2=q2->next;
 }  
 if(q2&&p->expn==q2->expn)
 {
//将指数相同相合并
 q2->cofe+=p->cofe;
 free(p);
 if(!q2->cofe)
 { //若系数为0释放结点
 q1->next=q2->next;
 free(q2);
 }  
}
 else  
 { //指数为新时将结点插入
 p->next=q2;
 q1->next=p;
 }
 }  }  

polyn Createpolyn(polyn head,int m)
{//建立一个头指针为head一元多项式
    int i;  
    polyn p;  
    p=head=(polyn)malloc(sizeof(polynomial));
    head->next=NULL;
    for(i=0;i<m;i++)
 
{  p=(polyn)malloc(sizeof(polynomial));
   printf("   输入第%d项的系数与指数:",i+1);
   scanf("%f%d",&p->cofe,&p->expn);
   Insert(p,head); } //调用Insert函数插入结点
  
  return head;  
}  



  void Printfpolyn(polyn p) //打印多项式
{
   polyn q=p->next;  
   int flag=1;  
   if(!q)
 {  
putchar('0');
printf("\n");
return;
}
 while(q)
 {
 if(q->cofe>0&&flag!=1)  
putchar('+');  
 if(q->cofe!=1&&q->cofe!=-1)
 {
 printf("%g",q->cofe);  
if(q->expn==1)
putchar('x');
else
printf("x^%d",q->expn);  
 }  
 
 else
 {  
 if(q->cofe==1)
 {
 if(!q->expn)
 putchar('1');
 else if(q->expn==1)  
 putchar('x');  
else printf("x^%d",q->expn );  
 }  
 
 if(q->expn==-1)
 {
 if(!q->expn)
 printf("-1");
 else if(q->expn==1)
 printf("-x");  
 else
 printf("-x^%d",q->expn);
 } }  
q=q->next;
flag++;  }  
}  



int Compare(polyn a,polyn b)
{
 if(a&&b)
  {if(!b||a->expn>b->expn) return 1;
        else if(!a||a->expn<b->expn) return -1;
        else return 0;
 }  
      
    else if(!a&&b) return -1;  
else return 1;      
 }  





polyn Addpolyn(polyn pa,polyn pb)
{  
 polyn qa=pa->next;
 polyn qb=pb->next;
 polyn headc,hc,qc;  
 headc=hc=(polyn)malloc(sizeof(polynomial));
 hc->next=NULL;
 while(qa||qb) //qa或qb为空
 {
 qc=(polyn)malloc(sizeof(polynomial));
switch(Compare(qa,qb))
{
case 1: //pb中当前结点的的指数值小
{
 qc->cofe=qa->cofe;
 qc->expn=qa->expn;
 qa=qa->next;
 break;  
}
case 0:  //指数值相等
{
qc->cofe=qa->cofe+qb->cofe;
qc->expn=qa->expn;
qa=qa->next;
qb=qb->next;
 break;  
}case -1:  //多项式pa中当前结点的指数值小
 { qc->cofe=qb->cofe;
 qc->expn=qb->expn;
qb=qb->next;
 break;  }  
 } if(qc->cofe!=0)
{ qc->next=hc->next;
 hc->next=qc;
hc=qc;  }
 else  free(qc);  
}
return headc;   
}  
polyn Subpolyn(polyn pa,polyn pb)  
{ polyn h=pb;
 polyn p=pb->next;  
 polyn pd;
  while(p)

{  p->cofe*=-1;    p=p->next;      }     
  pd=Addpolyn(pa,h);   
  for(p=h->next;p;p=p->next)      {   
      p->cofe*=-1;      }        
  return pd; }  




int main() {
      int m,n,a;  char flag;
      polyn pa=0,pb=0,pc;  
      printf("输入a的项数:");
      scanf("%d",&m);  pa=Createpolyn(pa,m);  
      printf("输入b的项数:");  
      scanf("%d",&n);
      pb=Createpolyn(pb,n);  
      printf(" A:输出a-b:");
      while(a)  {   printf("选择操作:\n");
      getchar();  
      scanf("%c",&flag);  
      switch(flag)     {
          case 'A':
         case 'a':
             {
                 pc=Subpolyn(pa,pb);
                 printf("a-b=");
                 Printfpolyn(pc);
                 break;  
             }
         default:
             printf("选择错误!");  }  
      }   
return 0;
}
搜索更多相关主题的帖子: include 多项式 
2013-12-06 13:21
柳林清风
Rank: 2
等 级:论坛游民
帖 子:6
专家分:18
注 册:2011-8-7
收藏
得分:4 
孩子,这是解决问题的论坛,不是让你偷懒的地方,哪里不会你指出来,你这样的要求不觉得有点不合理吗?
2013-12-06 20:55
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:4 
呵呵,想多了~

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-12-07 11:36
qq471402415
Rank: 2
等 级:论坛游民
帖 子:88
专家分:45
注 册:2013-12-3
收藏
得分:4 
2013-12-07 16:27
付得福
Rank: 1
等 级:新手上路
帖 子:24
专家分:4
注 册:2013-10-30
收藏
得分:0 
哈哈,翻译每一句,估计要到天亮了!孩子,加油!
2013-12-18 23:28
快速回复:希望哪位大神可以帮我解释一下算法的每一句,谢谢了
数据加载中...
 
   



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

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