标题:下面代码是降序输出,那么升序输出该怎么改?望大神指教
只看楼主
krisdei
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-4-6
结帖率:50%
已结贴  问题点数:10 回复次数:1 
下面代码是降序输出,那么升序输出该怎么改?望大神指教

#include<stdio.h>
#include<iostream.h>
#include<malloc.h>
 
typedef struct Polynomial{
 float coef;
 int expn;
 struct Polynomial *next;
}*Polyn,Polynomial;               //Polyn为结点指针类型
 
void Insert(Polyn p,Polyn h)
{      
 if(p->coef==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->coef+=p->coef;
   free(p);
   if(!q2->coef)//系数为0的话释放结点
   {              
    q1->next=q2->next;
    free(q2);
   }
  }
  else
  {                          //指数为新时将结点插入
   p->next=q2;
   q1->next=p;
  }
 }
}//Insert
 
Polyn CreatePolyn(Polyn head,int m)//建立一个头指针为head、项数为m的一元多项式
{
 int i;
 Polyn p;
 p=head=(Polyn)malloc(sizeof(struct Polynomial));
 head->next=NULL;
 for(i=0;i<m;i++)
 {
  p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
  cout<<"请输入第"<<i+1<<"项的系数与指数:"<<endl;
  cin>>p->coef;
  cin>>p->expn;
  Insert(p,head);   //调用Insert函数插入结点
 }
 return head;
}//CreatePolyn
 
void DestroyPolyn(Polyn p)//销毁多项式p
{
 Polyn q1,q2;
 q1=p->next;
 q2=q1->next;
 while(q1->next)
 {
  free(q1);
  q1=q2;//指针后移
  q2=q2->next;
 }
}
 
void PrintPolyn(Polyn P)
{  
 Polyn q=P->next;  
 int flag=1;//项数计数器
 if(!q)//若多项式为空,输出0
 {  
  cout<<"0"<<"\n";
  return;
 }   
 while (q)
 {
  if(q->coef>0&&flag!=1)  
   putchar('+'); //系数大于0且不是第一项
  if(q->coef!=1&&q->coef!=-1)//系数非1或-1的普通情况
  {
   printf("%g",q->coef);  
   if(q->expn==1)  
    putchar('X');
   else  
    if(q->expn)  
     printf("X^%d",q->expn);
  }
  else
  {
   if(q->coef==1)
   {
    if(!q->expn)  
     putchar('1');  
    else  
     if(q->expn==1)  
      putchar('X');  
     else  
      printf("X^%d",q->expn);
   }
   if(q->coef==-1)
   {
    if(!q->expn)  
     printf("-1");  
    else  
     if(q->expn==1)  
      printf("-X");  
     else  
      printf("-X^%d",q->expn);
   }
  }
  q=q->next;  
  flag++;
 }//while
 printf("\n");
}//PrintPolyn
 
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;//a多项式已空,但b多项式非空
  else  
   return 1;//b多项式已空,但a多项式非空
}//compare
 
Polyn AddPolyn(Polyn pa,Polyn pb)//求解并建立多项式a+b,返回其头指针
{
 Polyn qa=pa->next;
 Polyn qb=pb->next;
 Polyn headc,hc,qc;
 hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
 hc->next=NULL;
 headc=hc;
 while(qa||qb){
  qc=(Polyn)malloc(sizeof(struct Polynomial));
  switch(compare(qa,qb)){
  case 1:
   {
   qc->coef=qa->coef;
   qc->expn=qa->expn;
   qa=qa->next;
   break;
   }
  case 0:
   {  
   qc->coef=qa->coef+qb->coef;
   qc->expn=qa->expn;
   qa=qa->next;
   qb=qb->next;
   break;
   }
  case -1:
   {
   qc->coef=qb->coef;
   qc->expn=qb->expn;
   qb=qb->next;
   break;
   }  
  }//switch
  if(qc->coef!=0){
   qc->next=hc->next;
   hc->next=qc;
   hc=qc;
  }
  else free(qc);//当相加系数为0时,释放该结点
 }//while
 return headc;
}//AddPolyn
 
Polyn SubtractPolyn(Polyn pa,Polyn pb)//求解并建立多项式a-b,返回其头指针
{
 Polyn h=pb;
 Polyn p=pb->next;
 Polyn pd;
 while(p)
 {           //将pb的系数取反
  p->coef*=-1;
  p=p->next;
 }
 pd=AddPolyn(pa,h);
 for(p=h->next;p;p=p->next)    //恢复pb的系数
  p->coef*=-1;
 return pd;
}//SubtractPolyn
 
float ValuePolyn(Polyn head,float x)//输入x值,计算并返回多项式的值
{
 Polyn p;
 int i;
 float sum=0,t;
 for(p=head->next;p;p=p->next)
 {
  t=1;
  for(i=p->expn;i!=0;)
  {
   if(i<0){t/=x;i++;}//指数小于0,进行除法
   else
   {
    t*=x;i--;
   }//指数大于0,进行乘法
  }
  sum+=p->coef*t;
 }
 return sum;
}//ValuePolyn
 
 
 
int main()
{
 int m,n,flag=0;
 float x;
 Polyn pa=0,pb=0,pc,pd;//定义各式的头指针,pa与pb在使用前付初值NULL
 printf("请输入a的项数:");
 scanf("%d",&m);
 pa=CreatePolyn(pa,m);//建立多项式a
 printf("请输入b的项数:");
 scanf("%d",&n);
 pb=CreatePolyn(pb,n);//建立多项式a
 //输出菜单
 cout<<"***************菜**************单*****************"<<endl;
 cout<<"*---------操作提示:-----------------------------*"<<endl;
 cout<<"*---------1.输出多项式a和b.----------------------*"<<endl;
 cout<<"*---------2.建立多项式a+b.-----------------------*"<<endl;
 cout<<"*---------3.建立多项式a-b.-----------------------*"<<endl;
 cout<<"*---------4.计算多项式a在x处的值.----------------*"<<endl;
 cout<<"*---------5.退出.--------------------------------*"<<endl;
 cout<<"**************************************************"<<endl;
  
 for(;;flag=0)
 {
  cout<<"执行操作"<<endl;
  cin>>flag;
  if(flag==1)
  {
   cout<<"多项式a:"<<endl;PrintPolyn(pa);
   cout<<"多项式b:"<<endl;PrintPolyn(pb);
   continue;
  }
  if(flag==2){
   pc=AddPolyn(pa,pb);
   cout<<"多项式a+b:"<<endl;PrintPolyn(pc);
   DestroyPolyn(pc);continue;
  }
  if(flag==3){
   pd=SubtractPolyn(pa,pb);
   cout<<"多项式a-b:"<<endl;PrintPolyn(pd);
   DestroyPolyn(pd);continue;
  }
  if(flag==4){
   cout<<"输入x的值:x="<<endl;
   cin>>x;
   cout<<"多项式a的值:"<<endl;ValuePolyn(pa,x);continue;
  }
  if(flag==5) break;
  if(flag<1||flag>5)  
   cout<<"Error!!!"<<endl;continue;
 }//for
 DestroyPolyn(pa);
 DestroyPolyn(pb);
 return 0;
}
搜索更多相关主题的帖子: next 多项式 cout flag pb 
2018-06-05 17:38
langrenfan
该用户已被删除
得分:7 
提示: 作者被禁止或删除 内容自动屏蔽
2018-06-06 17:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487637-1-1.html




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

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