telephone007 2016-12-05 11:43 采纳率: 100%
浏览 1418
已采纳

数据结构课设作业,求助

将下面一元多次多项式程序增加一个赋值计算功能,即计算并输出多项式在指定x处的值。另,增加输入 系数或指数为字母时的报错功能。基础C语言

  • 写回答

1条回答 默认 最新

  • telephone007 2016-12-05 11:44
    关注

    #include
    #include
    typedef struct node
    {

    float coef;

    int expn;

    struct node * next;
    }PLOY;

    void start()//用户选择界面 { printf("************************************\n");

    printf(" 两个一元多项式的相加/相减/相乘\n");

    printf("************************************\n");

    printf("请选择操作:\n"); printf("0.退出\n");

    printf("1.两个一元多项式相加\n");

    printf("2.两个一元多项式相乘\n");

    printf("3.两个一元多项式相减\n");
    }

    void insert(PLOY *head,PLOY *inpt)

    { PLOY *pre,*now;

    int signal=0;

    pre=head;

    if(pre->next==NULL)
    {
    pre->next=inpt;
    }

    else
    {
    now=pre->next;

    while(signal==0)

    {

    if(inpt->expnexpn)

    {

    if(now->next==NULL)

    {

    now->next=inpt;

    signal=1;

    }

    else

    {

    pre=now;

    now=pre->next;

    }

    }

    else

    if(inpt->expn>now->expn)
    {

    inpt->next=now;

    pre->next=inpt;

    signal=1;

    }

    else

    {

    now->coef=now->coef+inpt->coef;

    signal=1;

    free(inpt);

    if(now->coef==0)

    {

    pre->next=now->next;

    free(now);

    }

    }

    }

    }

    }

    PLOY *creat(char ch)

    {

    PLOY *head,*inpt;

    float x;

    int y;

    head=(PLOY *)malloc(sizeof(PLOY));

    head->next=NULL;

    printf("请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)\n",ch);

    scanf("%f %d",&x,&y);

    while(x!=0)

    {

    inpt=(PLOY *)malloc(sizeof(PLOY));

    inpt->coef=x;

    inpt->expn=y;

    inpt->next=NULL;

    insert(head,inpt);

    printf("请输入一元多项式%c的下一项:(以0 0 结束!)\n",ch);

    scanf("%f %d",&x,&y); }

    return head; }

    PLOY *addPLOY(PLOY *head,PLOY *pre)

    {

    PLOY *inpt;
    int flag=0;

    while(flag==0)

    {

    if(pre->next==NULL)

    flag=1;

    else

    {

    pre=pre->next;

    inpt=(PLOY *)malloc(sizeof(PLOY));

    inpt->coef=pre->coef;

    inpt->expn=pre->expn;

    inpt->next=NULL;

    insert(head,inpt);

    }

    }

    return head;
    }

    PLOY *minusPLOY(PLOY *head,PLOY *pre)

    { PLOY *inpt;

    int flag=0;

    while(flag==0)

    {

    if(pre->next==NULL)

    flag=1;

    else

    {

    pre=pre->next;

    inpt=(PLOY *)malloc(sizeof(PLOY));

    inpt->coef=0-pre->coef;

    inpt->expn=pre->expn;

    inpt->next=NULL;

    insert(head,inpt);

    }

    }

    return head;
    }

    PLOY *byPLOY(PLOY *head1,PLOY *head2)

    {

    PLOY *inpt,*res,*pre;

    int flag=0;

    res=(PLOY *)malloc(sizeof(PLOY));

    res->next=NULL;

    head1=head1->next;

    pre=head2;
    while(flag==0)

    {

    if(pre->next==NULL)

    {

    pre=head2;

    head1=head1->next;

    continue;

    }

    if(head1==NULL)

    {

    flag=1;

    continue;

    }

    pre=pre->next;

    inpt=(PLOY *)malloc(sizeof(PLOY));

    inpt->coef=pre->coef*head1->coef;

    inpt->expn=pre->expn+head1->expn;

    inpt->next=NULL;

    insert(res,inpt);

    }

    return res;
    }

    void print(PLOY *fun)

    { PLOY *printing;

    int flag=0;

    printing=fun->next;

    if(fun->next==NULL)

    {

    printf("0\n");

    return;

    }

    while(flag==0)

    {

    if(printing->coef>0&&fun->next!=printing)

    printf("+");

    if(printing->coef==1);

    else if(printing->coef==-1)

    printf("-");

    else

    printf("%f",printing->coef);

    if(printing->expn!=0)
    printf("x^%d",printing->expn);

    else if((printing->coef==1)||(printing->coef==-1))

    printf("1");
    if(printing->next==NULL)

    flag=1;

    else

    printing=printing->next;

    }

    printf("\n");
    }

    void main()
    {

    PLOY *f,*g;

    int sign=-1;

    start();

    while(sign!=0)

    {

    scanf("%d",&sign);

    switch(sign)

    {

    case 0:

    break;

    case 1:

    {

    printf("你选择的操作是多项式相加:\n");

    f=creat('f');

    printf("f(x)=");

    print(f);

    g=creat('g');

    printf("g(x)=");

    print(g);

    printf("F(x)=f(x)+g(x)=");

    f=addPLOY(f,g);

    print(f);

    sign=-1;

    start();

    break;

    }

    case 2:

    {

    printf("你选择的操作是多项式相乘:\n");

    f=creat('f');

    printf("f(x)=");

    print(f);

    g=creat('g');

    printf("g(x)=");

    print(g);
    printf("F(x)=f(x)*g(x)=");

    f=byPLOY(f,g);

    print(f);

    sign=-1;

    start();

    break;

    }

    case 3:

    {

    printf("你选择的操作是多项式相减:\n");

    f=creat('f');

    printf("f(x)=");

    print(f);

    g=creat('g');

    printf("g(x)=");

    print(g);

    printf("F(x)=f(x)-g(x)=");

    f=minusPLOY(f,g);

    print(f);

    sign=-1;

    start();

    break;

    }

    case 4:

    {

    sign=-1;

    start();

    break;

    }

    default:

    {

    printf("输入有误!请重新选择操作!\n");

    start();

    break;

    }

    }

    }

    printf("谢谢使用!\n");
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试