⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculate.c

📁 本程序是二项式相加减
💻 C
字号:
  #include<stdlib.h>
  #include<process.h>
  #include<dos.h>
  #include<conio.h>
  #include"stdio.h"
  typedef struct LNode{
    float coef;  /*系数项*/
    int expn;  /*指数项*/
    struct LNode *next;
  }LNode,*polyn;

     void output(polyn p){
    /*输出多项式p*/
    polyn q;

    printf("\nHave total %d item:\n",p->expn);
    printf("The polynomial is:");
    q=p->next;
    while(q){
      printf("(%gX^%d)",q->coef,q->expn);
      if(q->next!=NULL)printf("+");

      q=q->next;
    }
    printf("\n");
  }/*output*/

  void input(polyn *p){
    /*输入并生成一元多项式*/
    int i,min=-32768;
    float f;
    polyn q,r;

    /*生成头结点*/
    *p=(polyn)malloc(sizeof(LNode));
    if (!*p) exit(-2);
    (*p)->coef=0;
    printf("Input Num: ");
    scanf("%d",&((*p)->expn));
    (*p)->next=NULL;

    for(i=1;i<=(*p)->expn;i++){
      q=(polyn)malloc(sizeof(LNode));
      if (!q) exit(-2);
      printf("No.%d coefficient: ",i);
      scanf("%f",&f);
      q->coef=f;

      do{
        printf("No.%d exponent: ",i);
        scanf("%d",&(q->expn));
        if (q->expn<min)
      printf("\nError! Input again! \n",(*p)->next->expn);
      }while(q->expn<min);
      min=q->expn;

      q->next=(*p)->next;
      (*p)->next=q;
    }/*for*/

    /*合并多项式中指数值相同的项*/
    q=(*p)->next;
    while(q){
      r=q->next;
      while (r&&r->expn==q->expn){
    q->coef+=r->coef;
    q->next=r->next;
    free(r);
    r=q->next;
    (*p)->expn--;
      }
      q=q->next;
    }


  }/*input*/



  void add(polyn pa,polyn pb){


    polyn ha,hb,hc,p;

    ha=pa->next;
    hb=pb->next;
    hc=pa;
    hc->next=NULL;
    pa->expn=0;

    while (ha&&hb){
      if (ha->expn>hb->expn){
    hc->next=ha;
    hc=ha;
    ha=ha->next;
    hc->next=NULL;
    pa->expn++;
      }
      else
        if (ha->expn<hb->expn){
      hc->next=hb;
      hc=hb;
      hb=hb->next;
      hc->next=NULL;
      pa->expn++;
    }
        else{
      ha->coef+=hb->coef;
      if (ha->coef){
        hc->next=ha;
        hc=ha;
        ha=ha->next;
        hc->next=NULL;
        pa->expn++;
        p=hb;
        hb=hb->next;
        free(p);
      }
          else{
            p=ha;
        ha=ha->next;
        free(p);
        p=hb;
        hb=hb->next;
        free(p);
      }
        }
    }

    if (ha){
      hc->next=ha;
      while(ha){
    pa->expn++;
    ha=ha->next;
      }
    }

    if (hb) {
      hc->next=hb;
      while (hb){
    pa->expn++;
    hb=hb->next;
      }
    }

    free(pb);

  }/*add*/

  void minus(polyn pa,polyn pb){


    polyn ha,hb,hc,p;

    ha=pa->next;
    hb=pb->next;
    hc=pa;
    hc->next=NULL;
    pa->expn=0;

    while (ha&&hb){
      if (ha->expn>hb->expn){
    hc->next=ha;
    hc=ha;
    ha=ha->next;
    hc->next=NULL;
    pa->expn++;
      }
      else
        if (ha->expn<hb->expn){
          hb->coef*=-1;
      hc->next=hb;
      hc=hb;
      hb=hb->next;
      hc->next=NULL;
      pa->expn++;
        }
        else{
          ha->coef-=hb->coef;
      if (ha->coef){
        hc->next=ha;
        hc=ha;
        ha=ha->next;
        hc->next=NULL;
        pa->expn++;
        p=hb;
        hb=hb->next;
        free(p);
      }
      else{
        p=ha;
        ha=ha->next;
        free(p);
        p=hb;
        hb=hb->next;
        free(p);
      }
    }
    }
    if (ha) {
      hc->next=ha;
      while(ha){
    pa->expn++;
    ha=ha->next;
      }
    }
    if (hb) {
      hc->next=hb;
      while (hb){
    hb->coef*=-1;
    pa->expn++;
    hb=hb->next;
      }
    }

    free(pb);

  }/*minus*/



calculate(){
    char c=' ';

    polyn pa=NULL,pb=NULL;
    clrscr();

    printf("Input first polynomial\n");
    input(&pa);

    output(pa);
    printf("input + or -):");
  while(c!='+'&&c!='-')
      scanf("%c",&c);


    printf("Input second polynomial\n");
    input(&pb);

    output(pb);
    if (c=='+') {
      add(pa,pb);
      printf("The result of add polynomial--");
      output(pa);
     }
    else{
      minus(pa,pb);
      printf("The result of minus polynomial--");
      output(pa);
    }

    getch();

  }/*main*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -