| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 687 人关注过本帖
标题:程序在编译时无错,运行时第一步输入也能可以做到,但是到第二步输入时就会 ...
只看楼主 加入收藏
伊三五七九
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-12-17
收藏
 问题点数:0 回复次数:0 
程序在编译时无错,运行时第一步输入也能可以做到,但是到第二步输入时就会弹出一个debug error
代码如下:(用的是C++ 6.0)
//还有主函数while语句中那个局部变量a怎么赋值,求大神解决
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//定义多项式的项
typedef struct Polynomial{   
    int coef;
    int expn;
    struct Polynomial *next;
}*Polyn,Polynomial;

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;
    }
 }
}




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));//建立新结点以接收数据
        printf("请输入第%d项的系数与指数:",i+1);
        scanf("%f %d",&p->coef,&p->expn);
        Insert(p,head);   //调用Insert函数插入结点
}
   return head;
}

void DestoryPolyn(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
        putchar('0');
        printf("\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++;
}
   printf("\n");
}
  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多项式非空
}
  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;
      }
    case0:
     {
        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;
     }
  }
      if(qc->coef!=0){
            qc->next=hc->next;
            hc->next=qc;
            hc=qc;
     }
       else free(qc);//当相加系数为0时,释放该结点
  }
  return headc;
}
  

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;
}

int ValuePolyn(Polyn head,int x){
 //输入x值,计算并返回多项式的值
    Polyn p;
    int i;
    int 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;
}
  Polyn Derivative(Polyn head){
//求解并建立导函数多项式,并返回其头指针
    Polyn q=head->next,p1,p2,hd;
    hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
    hd->next=NULL;
    while(q)
   {
       if(q->expn!=0)
      {
              //该项不是常数项时
            p2=(Polyn)malloc(sizeof(struct Polynomial));            p2->coef=q->coef*q->expn;
            p2->expn=q->expn-1;
            p2->next=p1->next;//连接结点
            p1->next=p2;
            p1=p2;
  }
        q=q->next;
 }
    return hd;
}
Polyn MultiplyPolyn(Polyn pa,Polyn pb){
//求解并建立多项式a*b,返回其头指针
    Polyn hf,pf;
    Polyn qa=pa->next;
    Polyn qb=pb->next;
    hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
    hf->next=NULL;
    for(;qa;qa=qa->next)
    {
       for(qb=pb->next;qb;qb=qb->next)
      {  
            pf=(Polyn)malloc(sizeof(struct Polynomial));
            pf->coef=qa->coef*qb->coef;
            pf->expn=qa->expn+qb->expn;
            Insert(pf,hf);//调用Insert函数以合并指数相同的项
  }
 }
    return hf;
}

 void main(){
    int m,n,a,x;
    char flag;
    Polyn pa=0,pb=0,pc;
    printf("         欢迎使用多项式操作程序\n\n");
    printf("请输入a的项数:");
    scanf("%d",&m);
    pa=CreatePolyn(pa,m);//建立多项式a
    printf("请输入b的项数:");
    scanf("%d",&n);
    pb=CreatePolyn(pb,n);//建立多项式b
 //输出菜单
    printf("   *******************************************************\n");
    printf("   *                   多项式操作程序                    *\n");
    printf("   *                                                     *\n");
    printf("   *       A:输出多项式             B:输出多项式b        *\n");
    printf("   *                                                     *\n");
    printf("   *       C:输出a的导数            D:输出b的导数        *\n");
    printf("   *                                                     *\n");
    printf("   *       E:代入x的值计算a         F:代入x的值计算b     *\n");
    printf("   *                                                     *\n");
    printf("   *       G:输出a+b                H:输出a-b            *\n");
    printf("   *                                                     *\n");
    printf("   *       I:输出a*b                J:退出程序           *\n");
    printf("   *                                                     *\n");
    printf("   *******************************************************\n");

  while(a)
 {
        printf("\n请选择操作:");
       scanf("%c",&flag);//空格符号一定要注意***********************************
     switch(flag)
     {  
       case'A':
      case'a':
       {   
         printf("\n多项式a=");
          PrintPolyn(pa);
           break;
    }
  case'B':
   case'b':
    {
       printf("\n       多项式b=");
        PrintPolyn(pb);
        break;
    }
      case'C':
      case'c':
    {
         pc=Derivative(pa);
          printf("\n       多项式a的导函数为:a'=");
        PrintPolyn(pc);
        break;
   }

    case'D':
   case'd':
    {
       pc=Derivative(pb);
        printf("\n       多项式b的导函数为:b'=");
        PrintPolyn(pc);
        break;
     }
    case'E':
   case'e':
    {
       printf("输入x的值:x=");
        scanf("%d",&x);
        printf("\n       x=%d时,a=%d\n",x,ValuePolyn(pa,x));
        break;
    }
    case'F':
     case'f':
   {   
      printf("输入x的值:x=");
        scanf("%d",&x);
        printf("\n       x=%d时,b=%d\n",x,ValuePolyn(pb,x));
        break;
    }
   case'G':
  case'g':
   {
       pc=AddPolyn(pa,pb);
       printf("\n       a+b=");
       PrintPolyn(pc);
       break;
   }
  case'H':
  case'h':
    {  
      pc=SubtractPolyn(pa,pb);
        printf("\n       a-b=");
        PrintPolyn(pc);
        break;
    }

    case'I':
   case'i':
    {   
     pc=MultiplyPolyn(pa,pb);
       printf("\n      a*b=");
       PrintPolyn(pc);
       break;
   }
   
   /*case'J':
   case'j':
    {  
      printf("\n       感谢使用此程序!\n");
     DestroyPolyn(pa);
     DestroyPolyn(pb);
          a=0;
     break;
    }*/
     default:
    printf("\n       您的选择错误,请重新选择!\n");
  }
 }
}









































































2015-12-17 09:59
快速回复:程序在编译时无错,运行时第一步输入也能可以做到,但是到第二步输入时 ...
数据加载中...
 
   



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

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