| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 WP叶超 于 2017-10-18 11:47 编辑  
 
今天在学校机房进行实验,做的是一元多项式的加法题目。 
在函数定义的时候我用的polylist *L,实测能运行,但是老师说这种方法只能偶然能运行(我也不知道这个偶然是什么意思...),因为polylist *L不是一个指针,一定要我改成 polylist &L 
 
 
如下就是两种不同的写法:(加粗的表示不同之处) 
----------------------------------------------------------------------------------- 
Status poly_create(polylist *L){//创建链表 
        polynode *p, *q; 
        int len,i; 
        float val1; 
        int val2;  
         
        printf("你的多项式有几项?:"); 
        scanf("%d",&len); 
         
        *L = (polylist)malloc(size); 
        q = *L; 
 
---------------------------------------------------------------------------------- 
 
Status poly_create(polylist &L){//创建链表 
        polynode *p, *q; 
        int len,i; 
        float val1; 
        int val2;  
         
        printf("你的多项式有几项?:"); 
        scanf("%d",&len); 
         
        L = (polylist)malloc(size); 
        q = L; 
-------------------------------------------------------------------------------- 
 
但是两个都可以运行,并且结果都是对的,我们老师说&L是对的,*L是错的... 
恳请大佬们帮我解决一下这个问题: 
两个方法有什么不同之处? 
 
附上代码(两种不同方式): 
----------------------------------------------------------------------------------- 
#include<stdio.h> 
#include<stdlib.h> 
#define OK    1 
#define ERROR 0 
#define size sizeof(polynode)  
 
typedef int Status; 
typedef int ElemType;  
 
typedef struct polynode{ 
        float coef;      //系数 
        int expn;      //指数 
        struct polynode *next; 
}polynode, *polylist; 
 
Status InitList(polylist *L){ 
        L = (polylist)malloc(size); 
        if(!(*L)) 
                exit(0); 
                 
        (*L)->next = NULL; 
        return OK; 
} 
 
Status poly_create(polylist *L){//创建链表 
        polynode *p, *q; 
        int len,i; 
        float val1; 
        int val2;  
         
        printf("你的多项式有几项?:"); 
        scanf("%d",&len); 
         
        *L = (polylist)malloc(size); 
        q = *L; 
         
        for(i = 0; i < len; ++i){ 
                p = (polylist)malloc(size); 
                scanf("%f%d", &val1, &val2); 
                p->coef = val1; 
                p->expn = val2; 
                q->next = p; 
                q = p; 
        } 
        q->next = NULL; 
        return OK; 
} 
 
 
Status poly_display(polylist L){//显示链表内容  
        polynode *p; 
        p = L->next; 
        while (p != NULL){ 
                printf(" %.2fX(%d) ",p->coef,p->expn); 
                p = p->next; 
        }  
        putchar(10); 
        return OK; 
} 
 
 
Status poly_add(polylist La, polylist Lb, polylist *Lc){ 
        polynode *p,*q,*s,*r; 
         
        p = La->next; 
        q = Lb->next; 
        *Lc = (polylist)malloc(size); 
        r = *Lc; 
         
        while(p && q){ 
                if(p->expn == q->expn && (p->coef + q->coef) != 0){ 
                        s = (polylist)malloc(size); 
                        s->coef = (p->coef) + (q->coef); 
                        s->expn = p->expn; 
                        r->next = s; 
                        r = s; 
                        p = p->next; 
                        q = q->next; 
                        continue;  
                } 
                 
                if(p->expn == q->expn && (p->coef + q->coef) == 0){ 
                        p = p->next; 
                        q = q->next; 
                        continue; 
                }  
                 
                if(p->expn > q->expn){ 
                        s = (polylist)malloc(size); 
                        s->coef = q->coef; 
                        s->expn = q->expn; 
                        r->next = s; 
                        r = s; 
                        q = q->next; 
                        continue; 
                } 
                 
                if(p->expn < q->expn){ 
                        s = (polylist)malloc(size); 
                        s->coef = p->coef; 
                        s->expn = p->expn; 
                        r->next = s; 
                        r = s; 
                        p = p->next; 
                        continue; 
                } 
                 
        } 
        while( p ){ 
                s = (polylist)malloc(size); 
                s->coef = p->coef; 
                s->expn = p->expn; 
                r->next = s; 
                r = s; 
                p = p->next; 
        } 
        while( q ){ 
                s = (polylist)malloc(size); 
                s->coef = q->coef; 
                s->expn = q->expn; 
                r->next = s; 
                r = s; 
                q = q->next; 
         
        } 
                r->next = NULL; 
        return OK; 
} 
 
int main(){ 
        polylist La, Lb, Lc; 
         
        InitList(&La); 
        InitList(&Lb); 
        InitList(&Lc); 
         
        poly_create(&La);         
        poly_display(La); 
        putchar(10); 
         
        poly_create(&Lb); 
        poly_display(Lb); 
        putchar(10); 
         
        poly_add(La,Lb,&Lc); 
        poly_display(Lc); 
        putchar(10); 
 
        return 0; 
} 
 
--------------------------------------------------------------- 
 
#include<stdio.h> 
#include<stdlib.h> 
#define OK    1 
#define ERROR 0 
#define size sizeof(polynode)  
 
typedef int Status; 
typedef int ElemType;  
 
typedef struct polynode{ 
        float coef;      //系数 
        int expn;      //指数 
        struct polynode *next; 
}polynode, *polylist; 
 
Status InitList(polylist *L){ 
        (*L)= (polylist)malloc(size); 
        if(!(*L)) 
                exit(0); 
                 
        (*L)->next = NULL; 
        return OK; 
} 
 
Status poly_create(polylist &L){//创建链表 
        polynode *p, *q; 
        int len,i; 
        float val1; 
        int val2;  
         
        printf("你的多项式有几项?:"); 
        scanf("%d",&len); 
         
        L = (polylist)malloc(size); 
        q = L; 
         
        for(i = 0; i < len; ++i){ 
                p = (polylist)malloc(size); 
                scanf("%f%d", &val1, &val2); 
                p->coef = val1; 
                p->expn = val2; 
                q->next = p; 
                q = p; 
        } 
        q->next = NULL; 
        return OK; 
} 
 
 
Status poly_display(polylist L){//显示链表内容  
        polynode *p; 
        p = L->next; 
        while (p != NULL){ 
                printf(" %.2fX(%d) ",p->coef,p->expn); 
                p = p->next; 
        }  
        putchar(10); 
        return OK; 
} 
 
 
Status poly_add(polylist La, polylist Lb, polylist &Lc){ 
        polynode *p,*q,*s,*r; 
         
        p = La->next; 
        q = Lb->next; 
        Lc = (polylist)malloc(size); 
        r = Lc; 
         
        while(p && q){ 
                if(p->expn == q->expn && (p->coef + q->coef) != 0){ 
                        s = (polylist)malloc(size); 
                        s->coef = (p->coef) + (q->coef); 
                        s->expn = p->expn; 
                        r->next = s; 
                        r = s; 
                        p = p->next; 
                        q = q->next; 
                        continue;  
                } 
                 
                if(p->expn == q->expn && (p->coef + q->coef) == 0){ 
                        p = p->next; 
                        q = q->next; 
                        continue; 
                }  
                 
                if(p->expn > q->expn){ 
                        s = (polylist)malloc(size); 
                        s->coef = q->coef; 
                        s->expn = q->expn; 
                        r->next = s; 
                        r = s; 
                        q = q->next; 
                        continue; 
                } 
                 
                if(p->expn < q->expn){ 
                        s = (polylist)malloc(size); 
                        s->coef = p->coef; 
                        s->expn = p->expn; 
                        r->next = s; 
                        r = s; 
                        p = p->next; 
                        continue; 
                } 
                 
        } 
        while( p ){ 
                s = (polylist)malloc(size); 
                s->coef = p->coef; 
                s->expn = p->expn; 
                r->next = s; 
                r = s; 
                p = p->next; 
        } 
        while( q ){ 
                s = (polylist)malloc(size); 
                s->coef = q->coef; 
                s->expn = q->expn; 
                r->next = s; 
                r = s; 
                q = q->next; 
         
        } 
                r->next = NULL; 
        return OK; 
} 
 
int main(){ 
        polylist La, Lb, Lc; 
         
        InitList(&La); 
        InitList(&Lb); 
        InitList(&Lc); 
         
        poly_create(La);         
        poly_display(La); 
        putchar(10); 
         
        poly_create(Lb); 
        poly_display(Lb); 
        putchar(10); 
         
        poly_add(La,Lb,Lc); 
        poly_display(Lc); 
        putchar(10); 
         
        return 0; 
} 
------------------------------------------------------------ 
用引用更加安全和易懂,在传递参数的时候直接扔进去就行了,可以有效避免传递错误的格式,但是指针就不行,必须得是地址才行,同时要求操作的时候要更小心 
 
 
 |   
- 
这个是运行和输出结果 
 
 
 
 
 
 
 
 |