zoukankan      html  css  js  c++  java
  • C程序多项式加法器

     学习了数据结构后,才对指针有更深的了解,指针就是C 的灵魂。

      1#include<stdio.h>
      2#include<malloc.h>
      3#define LEN sizeof(Lnode)
      4typedef struct node{     //创建结构体节点
      5    int xishu;
      6    int zhishu;
      7    struct node *next;
      8}
    Lnode,*Linklist;
      9void main(){
     10    char s;
     11    Linklist ha,hb,hc;
     12    Linklist creat();
     13    void out(Linklist);
     14    Linklist add(Linklist,Linklist);
     15start:
     16    printf("求多项式A,B的和\n");
     17    printf("请输入多项式A,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");
     18    ha=creat();//创建A
     19    //输出A
     20    printf("A的结果为:\n A=");
     21    out(ha);printf("\n");
     22    printf("请输入多项式B,按要求输入(指数按升序输入).\n以系数输入0表示结束\n");
     23    hb=creat();//创建B
     24    //输出B
     25    printf("B的结果为:\n B=");
     26    out(hb);
     27    printf("\n");
     28    hc=add(ha,hb);
     29    printf("A+B的和为:");
     30    out(hc);
     31    printf("\n");
     32    printf("是否继续(y/n)? :");
     33    scanf("%s",&s);
     34    if(s=='y')
     35        goto start;
     36}
      //main结束
     37//创建多项式函数
     38Linklist creat(){
     39    Lnode *p,*s;
     40    Linklist h;
     41    int c,a0,i=1;
     42    s=(Lnode*)malloc(LEN);
     43    p=s;h=s;
     44    p->xishu=NULL;
     45    printf("请输入a0:");
     46    scanf("%d",&a0);
     47    s=(Lnode*)malloc(LEN);
     48    p->next=s;
     49    p=p->next;
     50    p->xishu=a0;
     51    p->zhishu=NULL;
     52    p->next=NULL;
     53    while(1){
     54        s=(Lnode*)malloc(LEN);
     55        printf("请输入第%d个系数:",i);
     56        scanf("%d",&c);
     57        if(c==0)
     58            break;
     59        p->next=s;
     60        p=s;
     61        p->xishu=c;
     62        printf("请输入第%d个系数对应的x的指数:",i);
     63        scanf("%d",&c);
     64        p->zhishu=c;
     65        p->next=NULL;
     66        i++;
     67    }

     68    return h;
     69}

     70//多项式输出函数
     71void out(Linklist h){
     72    Lnode *p;
     73    int a=0,b=0//a判断是否用"+”,b是否整个多项式为0
     74    p=h->next;
     75    while(p!=NULL){
     76        if(p->zhishu==NULL && p->xishu!=0){
     77            printf("%d",p->xishu);
     78            b=1;
     79            p=p->next;a=1;
     80            continue;
     81        }

     82        else if(p->xishu<0){
     83            if(p->xishu==-1)
     84                printf("-X");
     85            else
     86                printf("%dX",p->xishu);
     87            b=1;a=1;
     88            if(p->zhishu!=1
     89                printf("^%d",p->zhishu);
     90            
     91        }

     92        else if(p->xishu>0){
     93            if(a==1)printf("+");
     94            if(p->xishu!=1) printf("%d",p->xishu);
     95            printf("X");b=1;
     96            if(p->zhishu!=1) printf("^%d",p->zhishu);
     97            a=1;
     98        }

     99        p=p->next;
    100    }

    101    if(b==0)
    102        printf("0");
    103}

    104//多项式A,B相加的函数add()
    105Linklist add(Linklist ha,Linklist hb){
    106    Linklist hc;  //定义c的头节点
    107    Lnode *pa,*pb,*pc,*t;
    108    pa=ha->next;pb=hb->next;
    109    hc=ha;pc=hc;
    110    free(hb);
    111    while(pa && pb){
    112        if(pa->zhishu!=NULL && pb->zhishu==NULL){//a无常数项,b有
    113            pb=pb->next;
    114            break;
    115        }

    116        else if(pa->zhishu==NULL && pb->zhishu!=NULL){//b无常数项,a有
    117            pa=pa->next;
    118            pc=pc->next;
    119            break;
    120        }

    121        else if(pa->zhishu==NULL && pb->zhishu==NULL){//a,b都有常数项
    122            pa->xishu=pa->xishu+pb->xishu;
    123            pa=pa->next;pb=pb->next;
    124            pc=pc->next;
    125        }

    126        else if(pa->zhishu > pb->zhishu){//a的指数项大
    127            pc->next=pb;
    128            pc=pc->next;
    129            pb=pb->next;
    130            pc->next=NULL;
    131        }

    132        else if(pa->zhishu<pb->zhishu){//b的指数项大
    133            pc->next=pa;
    134            pc=pc->next;
    135            pa=pa->next;
    136            pc->next=NULL;
    137        }

    138        else{                        //a,b的指数相同
    139            pa->xishu=(pa->xishu)+(pb->xishu);
    140            if(pa->xishu==0){        //和为0,删节点
    141                t=pa;
    142                pa=pa->next;
    143                free(t);
    144            }

    145            else{
    146                pc->next=pa;
    147                pc=pc->next;
    148                pa=pa->next;
    149            }

    150            t=pb;
    151            pb=pb->next;
    152            pc->next=NULL;
    153            free(t);
    154        }

    155    }
    //while 结束
    156    if(pa)
    157        pc->next=pa;
    158    else
    159        pc->next=pb;//剩余的结点加到链表
    160    return hc;
    161}
    //add函数结束
    162
  • 相关阅读:
    Flink 状态生命周期
    jpa使用@CollectionTable创建表
    Java的四种引用---强软弱虚
    ThreadLocal与内存泄露
    Flink 1.11 Table API 实现kafka到mysql
    FLIink 1.11 SQL 构建一个端到端的流式应用
    Flink1.11编译
    Flink运行yarn-session报错 java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnException
    欢迎订阅AI科技导读微信公众号,获取人工智能的最新技术解读教程!
    深度学习深刻理解和应用--人工智能从业人员必看知识
  • 原文地址:https://www.cnblogs.com/liulei/p/1324085.html
Copyright © 2011-2022 走看看