首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一元多项式的小疑点

2013-11-02 
一元多项式的小问题//一元多项式的表示与相加运算 #includestdio.h#includestdlib.htypedef struct po

一元多项式的小问题

//一元多项式的表示与相加运算 
#include<stdio.h>
#include<stdlib.h>


typedef struct polyNode {
float coef;          //系数项       
int exp;            //指数项 
struct polyNode *next;
}polyNode, *Poly;

void outputPoly(Poly A) {
Poly p = A;
   while(p->next){
     printf("%.1f*x^%d",(*p)->coef,(*p)->exp);
     p = p->next;
     printf("+");
   }
   printf("\n");
}

void PolyAdd(Poly A, Poly B) {
Poly pa = A->next, pb = B->next,rear = A, q;
while(pa&&pb){
if(pa->exp<pb->exp){
rear->next = pa;
rear = pa;
pa = pa->next;
}
else if(pa->exp>pb->exp){
rear->next = pb;
rear = pb;
pb = pb->next;
}
else{
pa->coef+=pb->coef;
if(pa->coef!=0.0){
rear->next = pa;
rear = pa;
pa = pa->next;
q = pb; pb = pb->next; free(q);
}
else{
q=pa; pa=pa->next; free(q);
q=pb; pb=pb->next; free(q);
}
}
}
if(pa) rear->next = pa;
else   rear->next = pb;
free(B);
}

void creatPoly(Poly *q, int n) {
Poly p,r;                            //p要加入的结点 
int i = 0;
//printf("请输入%d组项数系数项和指针项(逗号隔开)",n);
*q = (Poly)malloc(sizeof(polyNode));
//(*q)->next = NULL;
r = *q;
while(i<n){
p = (Poly)malloc(sizeof(polyNode));
    printf("输入第%d项的系数和指数(以 , 分隔):",i+1);
scanf("%d,%d",&p->coef,&p->exp);
r->next = p;
r = p;
i++;
}
r->next = NULL;
}

void main() {
int i, j;
Poly p, q;

    printf("输入多项式的项数:");
    scanf("%d",&i);
creatPoly(&p, i);
outputPoly(p);
printf("输入多项式的项数:");
    scanf("%d",&j);
creatPoly(&q, j);
PolyAdd(p, q);
}


代码能够跑起来,但是调用outputPoly函数之后打印出来的结果不对,哪位高手能帮我改改。
[解决办法]
void outputPoly(Poly A) {
   Poly p = A;
   while(p->next){
   printf("%.1f*x^%d",(*p)->coef,(*p)->exp);//改为printf("%.1f*x^%d",p->coef,p->exp);
   p = p->next;
   printf("+");
   }
   printf("\n");
}

[解决办法]
typedef struct polyNode {
float coef;          //系数项       
int exp;            //指数项 
struct polyNode *next;
}polyNode;

typedef struct polyNode* Poly;      // 定义结构的指针

void outputPoly(Poly A) {
Poly p = A;
while(p->next){
printf("%.1f*x^%d",p->next->coef,p->next->exp); // 不能打印p的值 从p的next开始
p = p->next;
if (p)
{
printf("+");          // 最后一项不打印+
}
}
printf("\n");
}
void creatPoly(Poly *q, int n) {
Poly p,r;                            //p要加入的结点 
int i = 0;
//printf("请输入%d组项数系数项和指针项(逗号隔开)",n);
*q = (Poly)malloc(sizeof(polyNode));
//(*q)->next = NULL;
r = *q;
while(i<n){
p = (Poly)malloc(sizeof(polyNode));
printf("输入第%d项的系数和指数(以 , 分隔):",i+1);
scanf("%.1f,%d",&p->coef, &p->exp);     // float 用%f
printf("%.1f,%d\n",p->coef,p->exp);     // float 用%f
r->next = p;
r = p;
i++;
}
r->next = NULL;
}

------解决方案--------------------


if (p->next)
{
printf("+");   // 这里是下一个不为空时才打印+ 上面错了
}

热点排行