goldexperiences
2020-03-20 08:54
采纳率: 33.3%
浏览 346

用C语言解决一元多项式求导的问题,要求用单链表解决,为什么我这个的输出这么奇怪?

实验要求
(1)输人说明:以指数递降方式输人多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
(2)输出说明:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
(3)测试用例:图片说明

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Link{
    int c;
    int e;
    struct Link *next; 
}LinkNode;
void InitList(LinkNode *&L){
        L=(LinkNode *)malloc(sizeof(LinkNode));   
        L->next=NULL;
 }//建立头结点 

void CreateListF(LinkNode *&L,int n)
{   void InitList(LinkNode *&L);
    InitList(L);
    LinkNode *s,*r;
    int i;
    L=(LinkNode *)malloc(sizeof(LinkNode));  
    r=L;        
    for (i=0;i<n;i++){  
        s=(LinkNode *)malloc(sizeof(LinkNode));
        r->next=s;  
        r=s;
        scanf("%d %d ",&s->c,&s->e);
        }
    r->next=NULL;
}//建立链表
void change(LinkNode *L){
    LinkNode *p=L;
    while(p!=NULL){ 
        p=p->next;
        p->c=(p->e)*(p->c);
        p->e=(p->e)-1;
        if(p->next==NULL){
            p->c=0;
            p->e=-1;
            }
    }
    free(p);
}//求导函数 
void DispList(LinkNode *L,int n){
    int i=0;
    LinkNode *p=L->next;
    printf("求导后的系数和指数");  
    while (i<n) {   
        printf("%d %d ",p->c,p->e);
        p=p->next;
        i++;        
        }
    printf("\n");
}//输出链表
void DestroyList(LinkNode *&L){   
        LinkNode *pre=L,*p=L->next;
        while (p!=NULL) {     
            free(pre);  
            pre=p;  
            p=pre->next;
            }
        free(pre);     
}//销毁链表函数 
int main(void) {
    void CreateListF(LinkNode *&L,int n);
    void DispList(LinkNode *L,int n);
    void change(LinkNode *L);
    void InitList(LinkNode *&L);
    void DestroyList(LinkNode *&L);
    int m;
    LinkNode *L;
    InitList(L);
    printf("输入系数与指数总数:");
    scanf("%d",&m);
    printf("输入系数和指数:"); 
    CreateListF(L,m/2);
    DispList(L,m/2-1);
    DestroyList(L);
    return 0;
}

结果运行出来是这样:
输入系数与指数总数:4
输入系数和指数:1,1,1,0,
求导后的系数和指数1 0
要么就是:
输入系数与指数总数:6
输入系数和指数:1,2,
求导后的系数和指数1 0 7738368 0
求大神解答,弄了一下午了,本人将万分感激
用的编译器是DeV.C++

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 胖狗子修行之路 2020-03-20 10:26
    已采纳

    图片说明

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    typedef struct Link{
        int c;
        int e;
        struct Link *next; 
    }LinkNode;
    void InitList(LinkNode *&L){
            L=(LinkNode *)malloc(sizeof(LinkNode));   
            L->next=NULL;
     }//建立头结点 
    
    void CreateListF(LinkNode *&L,int n){   
        InitList(L);
        LinkNode *s,*r;
        int i;
        L=(LinkNode *)malloc(sizeof(LinkNode));  
        r=L;        
        for (i=0;i<n;i++){  
            s=(LinkNode *)malloc(sizeof(LinkNode));
            r->next=s;  
            r=s;
            scanf("%d%d",&(s->c),&(s->e));
        }
        r->next=NULL;
    }//建立链表
    void change(LinkNode *L){
        LinkNode *p=L->next;
        if(p->e == 0) {
            p->c = 0;
            p->e = 0;
            return ;
        }
        while(p!=NULL){ 
            if(p->e != 0) {
                p->c=(p->e)*(p->c);
                p->e=(p->e)-1;
            }else {
                p->c = 1000001;
                p->e = 1000001;
            }
            p=p->next;
        }
        free(p);
    }//求导函数 
    void DispList(LinkNode *L){
        LinkNode *p=L->next;
        printf("求导后的系数和指数");  
        while (p!=NULL) {
            if(p->c == 1000001) break;
            printf("%d %d ",p->c,p->e);
            p=p->next;      
        }
        printf("\n");
    }//输出链表
    void DestroyList(LinkNode *&L){   
            LinkNode *pre=L,*p=L->next;
            while (p!=NULL) {     
                free(pre);  
                pre=p;  
                p=pre->next;
                }
            free(pre);     
    }//销毁链表函数 
    int main(void) {
        int m;
        LinkNode *L;
        printf("输入系数与指数总数:");
        scanf("%d",&m);
        printf("输入系数和指数:"); 
        CreateListF(L,m/2);
        change(L);
        DispList(L);
        DestroyList(L);
        return 0;
    }
    
    
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题