标题:运行结果错误,大神帮帮忙,两个多项式相加
只看楼主
我要甜筒
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2019-2-8
结帖率:50%
已结贴  问题点数:20 回复次数:1 
运行结果错误,大神帮帮忙,两个多项式相加
运行结果错误,大神帮帮忙,两个多项式相加(没有错误)
#include<stdio.h>
typedef struct{
    int e[10];
    int c[10];
}STRarray;

int main(){
    int i,j,k,t;
    int add(STRarray a1,int j,STRarray a2,int k,STRarray a3);
    STRarray a1,a2;
    STRarray a3;
    printf("输入第一个多项式的项数为(按回车结束输入k值)");   
    scanf("%d",&j);         
    printf("输入第一个多项式指数为(按回车结束输入k值)");
    for(i=0;i<j;i++)
        scanf("%d",&a1.e[i]);
    printf("输入第一个多项式系数为(按回车结束输入k值,系数与指数一一对应)");
    for(i=0;i<j;i++)
        scanf("%d",&a1.c[i]);
        
    printf("输入第二个多项式的项数为(按回车结束输入k值)");   
    scanf("%d",&k);         
    printf("输入第二个多项式指数为(按回车结束输入k值)");         
    for(i=0;i<k;i++)
        scanf("%d",&a2.e[i]);
    printf("输入第二个多项式系数为(按回车结束输入k值,系数与指数一一对应)");
    for(i=0;i<j;i++)
        scanf("%d",&a2.c[i]);
   t=add(a1,j,a2,k,a3);
   printf("%d\n",t);
   for(i=0;i<t;i++)
   printf("%d %d",a3.c[i],a3.e[i]);
        
   
}
int add(STRarray a1,int j,STRarray a2,int k,STRarray a3){
    int m,n=0,t=0,l=0;
    for(m=0;m<j+k;m++){
   
    if(a1.e[n]==a2.e[t]&&n!=j&&t!=k){
        a3.c[m]=a1.c[n]+a2.c[t];
        a3.e[m]=a1.e[n];
               n++;   
            t++;
            m++;
            l++;
        }
    else if  (a1.e[n]>a2.e[t]&&(n!=j&&t!=k)){
            a3.c[m]=a1.c[n];
                    a3.e[m]=a1.e[n];
                n++;
                l++;
    }
        else if  (a1.e[n]<a2.e[t]&&(n!=j&&t!=k)){
            a3.c[m]=a2.c[t];
                    a3.e[m]=a2.e[t];
                t++;
                l++;
    }
    if(n==j&&t!=k){
    a3.c[m]=a2.c[t];
    a3.e[m]=a2.e[t];
    t++;
    m++;
    l++;
    }
    else    if(t==k&&n!=j){
    a3.c[m]=a1.c[n];
    a3.e[m]=a1.e[n];
    n++;
    m++;
    l++;
    }
}
    return l;
}
搜索更多相关主题的帖子: 多项式 printf 输入 int 回车 
2019-09-23 19:25
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:20 
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int coef;//系数 
    int expn;//指数 
    struct Node *next;
}LNode;                       //LNode为创建的多项式链表类型       
struct elem
{
    int coef;
    int expn;
}List[100],change;            //List[]构建链表,change用来交换List[]中的某两项。
LNode* create(int n)           
{
    LNode *head;                                    
    LNode *s,*L;              //*s表示新创建的空表,*L表示当前的链表,用来连接两空表
    L=s=NULL;
    head=(LNode *)malloc(sizeof(LNode));
    head->next=0;                 //定义空链表 
    L=(LNode *)malloc(sizeof(LNode));
    n--;                                            
    L->coef=List[1].coef;          //复制
    L->expn=List[1].expn;
    head->next=L;
    int i=2;             
    while(n)
    {
        s=(LNode *)malloc(sizeof(LNode));
        L->next=s;
        s->coef=List[i].coef;
        s->expn=List[i].expn;
        L=s;
        n--;
        i++;
    }
    L->next=0;
    return head;
}
LNode* add(LNode *p1,LNode *p2)   //将多项式p1与p2相加,结果存在第三个链表中(第三个链表由该函数创建)
{  

 
    p1=p1->next;              
    p2=p2->next;
    LNode *head;              
    LNode *L,*s;
    head=(LNode *)malloc(sizeof(LNode));
    head->next=NULL;
    L=head;
    while(p1&&p2)            //遍历两表,根据情况判断表的长短是否相同,是否缺项多项,建立一个新的链表来存取内容 
    {
        if(p1->expn > p2->expn)//比较指数大小,将指数和系数较小的存入新表 
        {
            s=(LNode *)malloc(sizeof(LNode));
            L->next=s;
            s->coef=p2->coef;
            s->expn=p2->expn;
            L=s;
            p2=p2->next;
        }
        if(p1->expn < p2->expn)//比较指数大小,将指数和系数较小的存入新表 
        {
            s=(LNode *)malloc(sizeof(LNode));
            L->next=s;
            s->coef=p1->coef;
            s->expn=p1->expn;
            L=s;
            p1=p1->next;
        }
        if(p1->expn == p2->expn)//相等可以直接相加 
        {
            s=(LNode *)malloc(sizeof(LNode));
            L->next=s;
            s->coef=p1->coef + p2->coef;
            s->expn=p1->expn;
            L=s;
            p1=p1->next;
            p2=p2->next;
        }
    }
    while(p1)//p1有剩余 
    {
            s=(LNode *)malloc(sizeof(LNode));
            L->next=s;
            s->coef=p1->coef;
            s->expn=p1->expn;
            L=s;
            p1=p1->next;
    }
    while(p2)//p2有剩余 
    {
            s=(LNode *)malloc(sizeof(LNode));
            L->next=s;
            s->coef=p2->coef;
            s->expn=p2->expn;
            L=s;
            p2=p2->next;
    }
    L->next=NULL;
    return head;
}
void print(LNode *p1)     //输出表
{
    p1=p1->next;
    while(p1)
    {
        printf("%d %d\n",p1->coef,p1->expn);
        p1=p1->next;
    }
}
int main()
{
    int z=2;
    LNode *head2[2];     //head2[]为两多项式的头结点
    int n;
    while(z)                                        
    {
    printf("请输入项数\n");
    scanf("%d",&n);
    printf("请输入各项\n");
    int i=1;
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&List[i].coef,&List[i].expn);
    }
    i=1;
    int j=1;
    for(i;i<n;i++)                                     
    for(j=i+1;j<=n;j++)
    {
        if(List[j].expn<List[i].expn)    //将输入的指数按升序排列 ,排序算法 
        {
            change.coef=List[i].coef;
            change.expn=List[i].expn;
            List[i].coef=List[j].coef;
            List[i].expn=List[j].expn;
            List[j].coef=change.coef;
            List[j].expn=change.expn;
        }
    }
    head2[z]=create(n); 
    z--;
    }
    LNode *pp;
    pp=add(head2[1],head2[2]);
    printf("结果为:\n");
    print(pp);
    system("pause");
    return 0;
}
2019-09-24 08:22



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




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

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